Re: Recompiling of .less file triggered in prod unexpectedly
JumpStart <[email protected]> Fri, 25 Oct 2019 17:02:32 +0800
| Newsgroups | gmane.comp.java.tapestry.user |
|---|---|
| Message-ID | <[email protected]> |
Thank you Cezary. This is invaluable. As a first step I=E2=80=99ve added = some logging of the caching to see whether this is the culprit. Geoff > On 25 Oct 2019, at 7:38 am, Cezary Biernacki <[email protected]> = wrote: >=20 > Assuming that my suggestion is correct, the simplest solution would be = to > give more heap space to JVM if there is enough RAM on machines you are > deploying. >=20 > Otherwise, I would attempt to create a StreamableResourceSource = decorator > that would cache only selected resources that are heavy to compute = (e.g. > less files in your case), but otherwise not very memory consuming in a > ConcurrentMap using normal references (i.e. not SoftReference). As = there is > already a stack of decorators for SRS (see > org.apache.tapestry5.modules.AssetsModule) you should be careful how = to > order that new decorator. Try @Order("before:GZIpCompression", > "after:CacheCompressed"). >=20 > But in longer term, some way to precompile files for the production = would > be more sustainable. I would a consider a solution that adds > another StreamableResourceSource decorator (or a = ResourceTransformerFactory > decorator) which works in two modes, In the first mode it saves = streamable > resources to a specified directory on the file system, in the second = mode > it retrieves cached data from a JAR (using Java's Resource). During = the > build process a script would start the application in the first mode, > trigger compilation of key assets, and finally pack it to a JAR. In = the > production the second mode could be be used. >=20 > Best regards, > Cezary >=20 >=20 >=20 > On Thu, Oct 24, 2019 at 11:18 PM JumpStart < > [email protected]> wrote: >=20 >> That=E2=80=99s great information. So is the solution to precompile = them for >> production, or to override SRSCachingInterceptor, or something else >> altogether? >>=20 >>> On 24 Oct 2019, at 11:09 pm, Cezary Biernacki <[email protected]> >> wrote: >>>=20 >>> Tapestry caches compiled files in memory using SoftReference<> so it = is >>> possible for the garbage collector to remove them (see >>> = org.apache.tapestry5.internal.services.assets.SRSCachingInterceptor). In >>> the development mode Tapestry also caches compilations in a = temporary >>> directory, but unfortunately this mechanism is disabled in the = production >>> mode >>> (see >> = org.apache.tapestry5.internal.webresources.ResourceTransformerFactoryImpl#= createCompiler). >>>=20 >>> Cezary >>>=20 >>>=20 >>> On Thu, Oct 24, 2019 at 2:57 AM JumpStart < >>> [email protected]> wrote: >>>=20 >>>> I=E2=80=99m observing that after startup, and then after every 20 = minutes or so >> - >>>> actually, it seems to be quite variable - the first page after = login >> will >>>> take 20 or more seconds to be displayed. The rest of the time it is >> almost >>>> instantaneous. >>>>=20 >>>> I=E2=80=99ve run a sampler over it during one of these 20+ sec = periods and it >>>> seems to be spending all its time in the Less compiler. The page is >> using >>>> @Import: >>>>=20 >>>> @Import(stylesheet =3D { "css/client.less" }) >>>> public class Home extends LoggedIn { >>>>=20 >>>> I=E2=80=99m using tapestry-webresources-5.4.3.jar. >>>>=20 >>>> I was expecting this to be a one-time event, on first visit to the = page >>>> after startup. Under what circumstances would you expect it to = happen >> more >>>> than once? >>>>=20 >>>> Regards, >>>>=20 >>>> Geoff >>=20 >>=20 >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >>=20 >>=20 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]