Re: Recompiling of .less file triggered in prod unexpectedly
JumpStart <[email protected]> Mon, 28 Oct 2019 18:19:36 +0800
| Newsgroups | gmane.comp.java.tapestry.user |
|---|---|
| Message-ID | <[email protected]> |
Yep, that was the solution. I now cache hard references to the .less = resources instead of SoftReferences. The page that uses the .less file = no longer lags (except the first time after startup). In fact, I=E2=80=99m considering doing it for all assets, because I=E2=80=99= m not clear on there being any benefit to having the GC repeatedly = undoing the good work of the Tapestry asset cache. Geoff > On 25 Oct 2019, at 5:02 pm, JumpStart = <[email protected]> wrote: >=20 > 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. >=20 > Geoff >=20 >> 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 >=20 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]