Re: gzipped content in LivePages
Werner Thie <[email protected]> Thu, 15 Jul 2010 11:12:52 +0200
| Newsgroups | gmane.comp.python.quotient.dev |
|---|---|
| Organization | THIEngineering AG |
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------080909040908010005060009 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Odd to answer my own posts, but maybe this is of interest to someone between now and eternity... Diddling with the code in nevow.compressing I found it difficult to do a selective prezipped JS content delivery within the LivePage class. So I searched for a way to do it by subclassing and found an (for me) acceptable way to deal with the problem at hand: - deliver zipped JS modules only when present in the resource path - fall back to standard unzipped content when negotiation does not allow zipped content module directory on jsmodules path ./common __init__.js globals.js bigmodule.js bigmodule.js.gz The attached code snippet shows how to do that by subclassing athena.MappingResource and LivePage. Werner On 29.05.2010 06:03, Werner Thie wrote: > Hi > > Is there an easy way to switch to gzipped content in either nevow or > twisted, helping a lot with delivering more and more JScript code to > the user (obfuscated and all I could squeeze out another factor of three) > > Thank you, Werner > > _______________________________________________ > Divmod-dev mailing list > [email protected] > http://divmod.org/cgi-bin/mailman/listinfo/divmod-dev --------------080909040908010005060009 Content-Type: application/x-python; name="MappingCompressedResourceExample.py" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="MappingCompressedResourceExample.py" IyEgL3Vzci9iaW4vZW52IHB5dGhvbgojLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KCiIi IgptYWlucGFnZS5weSAtIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMg aGFwcGVuaW5nLCB0aGUgdXNlciB3aWxsIG5ldmVyCiAgICAgICAgICAgICAgZXZlciBzZWUg YSBwYWdlIGNoYW5nZSBkdXJpbmcgdGhlIHdob2xlIHZpc2l0LiBFdmVyeXRoaW5nIHRoZSB1 c2VyIGl3CiAgICAgICAgICAgICAgc2hvd24gaXMgaW5qZWN0ZWQgYXMgYSBMaXZlRWxlbWVu dCBpbnRvIHRoZSBwYWdlIGFuZCBkZWxldGVkIGFmdGVyIGl0CiAgICAgICAgICAgICAgaGFz IHNlcnZlZCBpdHMgcHVycG9zZS4KCmF1dGhvciAgIDogV2VybmVyIFRoaWUsIHd0aApsYXN0 IGVkaXQ6IHd0aCwgMTUuMDcuMjAxMAptb2RoaXN0b3J5OgogIDE1LjA3LjIwMTAgLSB3dGgs IG5ldyBNYXBwaW5nQ29tcHJlc3NlZFJlc291cmNlIGltcGxlbWVudGVkCiIiIgoKaW1wb3J0 IG9zLCBzeXMKCmZyb20gem9wZS5pbnRlcmZhY2UgaW1wb3J0IGltcGxlbWVudHMKCmZyb20g dHdpc3RlZC5weXRob24gaW1wb3J0IHV0aWwsIGxvZwoKZnJvbSBuZXZvdyBpbXBvcnQgc3Rh dGljLCBhdGhlbmEsIGxvYWRlcnMsIHVybCwgdGFncyBhcyBULCBpbmV2b3csIGd1YXJkCmZy b20gbmV2b3cucGFnZSBpbXBvcnQgcmVuZGVyZXIKZnJvbSBuZXZvdy5jb21wcmVzc2lvbiBp bXBvcnQgcGFyc2VBY2NlcHRFbmNvZGluZwpmcm9tIG5ldm93LmluZXZvdyBpbXBvcnQgSVJl cXVlc3QKCmNsYXNzIE1hcHBpbmdDb21wcmVzc2VkUmVzb3VyY2UoYXRoZW5hLk1hcHBpbmdS ZXNvdXJjZSk6CiAgIiIiCiAgTHtpbmV2b3cuSVJlc291cmNlfSB3aGljaCBsb29rcyB1cCBz ZWdtZW50cyBpbiBhIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2xpYwogIG5hbWVzIGFuZCB0aGUg ZmlsZXMgdGhleSBjb3JyZXNwb25kIHRvLiBBZGRpdGlvbmFsbHkgaWYgYSBjb21wcmVzc2Vk IHZlcnNpb24KICBpcyBwcmVzZW50IGFuZCBjb250ZW50IG5lZ290aWF0aW9uIGFsbG93cyB6 aXBwZWQgcmVzb3VyY2VzLCB0aGUgemlwcGVkCiAgZmlsZSBpcyBwcmVmZXJyZWQKCiAgQHR5 cGUgbWFwcGluZzogQ3tkaWN0fQogIEBpdmFyIG1hcHBpbmc6IEEgbWFwIGJldHdlZW4gc3lt Ym9saWMsIHJlcXVlc3RhYmxlIG5hbWVzIChlZywKICAnTmV2b3cuQXRoZW5hJykgYW5kIEN7 c3RyfSBpbnN0YW5jZXMgd2hpY2ggbmFtZSBmaWxlcyBjb250YWluaW5nIGRhdGEKICB3aGlj aCBzaG91bGQgYmUgc2VydmVkIGluIHJlc3BvbnNlLgogICIiIgogIGltcGxlbWVudHMoaW5l dm93LklSZXNvdXJjZSkKCiAgZGVmIGNhbkNvbXByZXNzKHNlbGYsIHJlcSk6CiAgICAiIiIK ICAgIENoZWNrIHdoZXRoZXIgdGhlIGNsaWVudCBoYXMgbmVnb3RpYXRlZCBhIGNvbnRlbnQg ZW5jb2Rpbmcgd2Ugc3VwcG9ydC4KICAgICIiIgogICAgdmFsdWUgPSByZXEuZ2V0SGVhZGVy KCdhY2NlcHQtZW5jb2RpbmcnKQogICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIGVu Y29kaW5ncyA9IHBhcnNlQWNjZXB0RW5jb2RpbmcodmFsdWUpCiAgICAgIHJldHVybiBlbmNv ZGluZ3MuZ2V0KCdnemlwJywgMC4wKSA+IDAuMAogICAgcmV0dXJuIEZhbHNlCgoKICBkZWYg cmVzb3VyY2VGYWN0b3J5KHNlbGYsIGZpbGVOYW1lKToKICAgICIiIgogICAgUmV0cmlldmUg YSBwb3NzaWJseSAgTHtpbmV2b3cuSVJlc291cmNlfSB3aGljaCB3aWxsIHJlbmRlciB0aGUg Y29udGVudHMgb2YKICAgIEN7ZmlsZU5hbWV9LgogICAgIiIiCiAgICBmID0gb3BlbihmaWxl TmFtZSwgJ3JiJykKICAgIGpzID0gZi5yZWFkKCkKICAgIHJldHVybiBzdGF0aWMuRGF0YShq cywgJ3RleHQvamF2YXNjcmlwdCcpCgoKICBkZWYgbG9jYXRlQ2hpbGQoc2VsZiwgY3R4LCBz ZWdtZW50cyk6CiAgICB0cnk6CiAgICAgIGltcGwgPSBzZWxmLm1hcHBpbmdbc2VnbWVudHNb MF1dCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgIHJldHVybiByZW5kLk5vdEZvdW5kCiAg ICBlbHNlOgogICAgICByZXEgPSBJUmVxdWVzdChjdHgpCiAgICAgIGltcGxneiA9IGltcGwg KyAnLmd6JwogICAgICBpZiBzZWxmLmNhbkNvbXByZXNzKHJlcSkgYW5kIG9zLnBhdGguZXhp c3RzKGltcGxneik6CiAgICAgICAgaW1wbCA9IGltcGxnegogICAgICAgIHJlcS5zZXRIZWFk ZXIoJ2NvbnRlbnQtZW5jb2RpbmcnLCAnZ3ppcCcpCiAgICAgIHJldHVybiBzZWxmLnJlc291 cmNlRmFjdG9yeShpbXBsKSwgW10KCgpjbGFzcyBtYWluUGFnZShhdGhlbmEuTGl2ZVBhZ2Up OgogIGFkZFNsYXNoID0gVHJ1ZQogIGpzQ2xhc3MgPSB1J2NvbW1vbi5iaWdtb2R1bGUuTWFp blBhZ2UnCgogIGRvY0ZhY3RvcnkgPSBsb2FkZXJzLnhtbHN0cigiIiIKICAgIDwhRE9DVFlQ RSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRw Oi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KICAgIDxo dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpuZXZvdz0i aHR0cDovL25ldm93LmNvbS9ucy9uZXZvdy8wLjEiPgogICAgICA8aGVhZD4KICAgICAgICA8 dGl0bGUgbmV2b3c6ZGF0YT0idGl0bGUiIG5ldm93OnJlbmRlcj0iZGF0YSI+UGFnZSBUaXRs ZTwvdGl0bGU+CiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250 ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgICAgICA8bmV2b3c6aW52aXNp YmxlIG5ldm93OnJlbmRlcj0ibGl2ZWdsdWUiIC8+CiAgICAgICAgPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4KICAgICAgICAgIGh0bWwgewogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAg ICAgICAgICB9CiAgICAgICAgICBib2R5IHsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAw JTsKICAgICAgICAgIH0KICAgICAgICAgICogaHRtbCBib2R5IHsKICAgICAgICAgICAgaGVp Z2h0OiAxMDAlOwogICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICAgIDwvaGVhZD4K ICAgICAgPGJvZHkgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IG92ZXJmbG93 OiBoaWRkZW47IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7Ij4KICAgICAgPC9ib2R5Pgog ICAgPC9odG1sPgogICIiIikKCiAgZGVmIGNoaWxkX2pzbW9kdWxlKHNlbGYsIGN0eCk6CiAg ICAiIiIKICAgIGJ5IG92ZXJyaWRpbmcgd2UgbGV0IE1hcHBpbmdDb21wcmVzc2VkUmVzb3Vy Y2UgZG8gaXRzIG1hZ2ljCiAgICAiIiIKICAgIHJldHVybiBNYXBwaW5nQ29tcHJlc3NlZFJl c291cmNlKHNlbGYuanNNb2R1bGVzLm1hcHBpbmcpCgogIGRlZiByZW5kZXJfcGxheWdyb3Vu ZChzZWxmLCBjdHgsIGRhdGEpOgogICAgZiA9IHBsYXlncm91bmQoKQogICAgZi5zZXRGcmFn bWVudFBhcmVudChzZWxmKQogICAgcmV0dXJuIGN0eC50YWdbZl0KCg== --------------080909040908010005060009 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline