On 20/12/2010, at 10:36 PM, Adam Heath wrote:

> Scott Gray wrote:
>> On 20/12/2010, at 10:04 PM, Adam Heath wrote:
>> 
>>> Be very careful about combining lots of javascript files into one.
>>> You *must* do proper If-Modified-Since handling, or you will greatly
>>> increase the bandwidth usage of client browsers.
>>> 
>>> Without a proper ETag, and If-Modified-Since handling, the browser
>>> will download the combined javascript file repeatedly, on each page
>>> load.  The solution, is a bit convoluted.
>>> ==
>>> allETags = []
>>> greatestLastModified = 0
>>> for(file in files) {
>>> perFileETag = perFileLastModifiedTime + '-' + perFileSize
>>> allETags.add(perFileETag)
>>> if (perFileLastModifiedTime > greatestLastModified) {
>>>   greatestLastModified = perFileLastModified
>>> }
>>> }
>>> etag = allEtags.join(':')
>>> 
>>> response.setHeader('ETag', etag)
>>> response.setLastModifiedTime(greatestLastModified)
>>> ==
>>> and...
>>> 
>>> in IMS mode, the previous ETag will be given.  Split that on ':',
>>> iterate each part, comparing the lastModifiedTime and size to the
>>> current list of files.
>>> 
>>> IMS mode is also different in HEAD and GET mode.
>>> 
>>> I suppose I should pull out the Binary handler in webslinger, as it
>>> has support for all of this.
>>> 
>> 
>> The combined files are written to runtime/tempfiles (tempfiles being a 
>> webapp mount point) and only regenerated when the cache entry is removed, in 
>> production you wouldn't set an expireTime so they'd essentially only be 
>> regenerated if the instance is restarted.  No special handling should be 
>> necessary, the app or http server would set the headers in the same way it 
>> does for the static javascript files.
> 
> Why rewrite the combined files into tempfiles at all?  Just iterate
> over them each time during serve.  No need to use extra disk space.
> 
> Would the cache have to cleared anytime one of the member files is
> modified on disk?  If so, then ew.  That's very sucky.

Well you would use a short expireTime for development, same as for a million 
other things in OFBiz.  I'll post the code to jira if anyone wants to use it 
while they wait for the superior solution.

Regards
Scott

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to