[Mapbender-dev] Packer (code conventions)
Paul Spencer
pspencer at dmsolutions.ca
Tue Feb 6 08:21:26 EST 2007
There are essentially three load costs associated with javascript:
* the size of the javascript file itself (transfer time)
* the number of javascript files (number of http connections required
to get all the javascript)
* size/complexity of the javascript to execute
The goal here, I think, is to improve load time for the application,
so you need to put all your javascript into a single file and
minimize the size of the file. The execution time will not change
for these things unfortunately, only spending quality time with a
code profiler (thank you FireBug) can help actual execution time/
processor load.
I have achieved about 8 x smaller file size using white space and
comment removal (essentially what jsmin does) combined with gz
compression. Coupled with putting all the js into one file, this is
a substantial improvement in load time for clients.
As a side note to this discussion, I'm not keen on the packer concept
because it requires unpacking on the client side, which causes
additional load on the browser. The jsmin and equivalents produce
code that executes as is in the browser without additional load on
the browser. See this article for a discussion on the topic http://
clientside.cnet.com/best-practices/optimization/dean-edwards-packer-
compression-tool/. Note that you can run packer to just strip white
space and comments, but then it is the same as jsmin and most other
minification tools.
Finally, it is much more convenient to maintain javascript in
multiple files. Obfuscation as part of combining and compressing is,
in my opinion, acceptable because you can make the original,
commented, source available as well. Any obfuscation that happens as
part of creating a runtime executable is no different from compiling
C source ... if it results in faster load times then clients will be
happy. I guess my point here is that you are not compressing to
obfuscate, you are compressing to optimize, but don't discard options
just because they obfuscate. Any decent compression or minification
is going to produce more-or-less unreadable code anyway so don't make
that part of your assessment criteria.
What is nice is being able, at run time, to choose between loading
the compiled, optimized version of the code (for production code) and
the uncompiled, uncompressed version of the code (for development,
debugging). Whatever you choose to do, I highly recommend that you
be able to switch easily from one to the other.
On 6-Feb-07, at 6:07 AM, Marc Jansen wrote:
> Hello list, Hi Christoph,
>
>
> Christoph Baudson (WhereGroup) schrieb:
>> Another thing that we should keep in mind is, that a lot of
>> different js-scripts are loaded into map.php on startup, and
>> conflicts could arise if each script would be compressed
>> individually (as Dean Edwards' packer shortens variable names as
>> well).
>>
>
> Yes the names are shortened, but that should not be a problem since
> everything done by Dean Edwards packer is being reverted as the
> script is loaded. The whole resultung function (p, a, c, k, e, d)
> {...} is being evaluated at once. Different scripts are sent
> through eval in the order of presence of script-tags in the markup.
> I used is together with about 6 other scripts and there were no
> problems.
>
>> I did a little research, and found this list of JS obfuscators and
>> packers (there are quite a lot)
>>
>> http://www.javascriptsearch.com/guides/Advanced/articles/
>> 061221JSObfuscators.html
>>
>
> I think we should keep in mind that our target is not obfuscation.
> Lots of the tools listed on this page have annoying descriptions:
>
> "...is a utility for all JavaScript programmers who are fed up with
> the fact, that their source code can be stolen and simply modified."
> "...will encode javascript to make it more difficult for people to
> read and/or steal..."
>
> Sure enough other packers should be considered. Can't we make up a
> small test page in the wiki with results for some of the tools and
> pros and cons for each?
>
>> Especially this one
>>
>> http://www.saltstorm.net/depo/esc/varsubst.wbm
>>
>> seems to be interesting, as it is free software and can handle the
>> compression of multiple (dependent) js files.
>>
>
> As mentioned above, I don't think there are new dependencies
> related to packing... at least with Dean Edwards tool
>
>> So I guess we should consider other packers as well. If anyone has
>> experience with any of these or other tools, please share your
>> knowledge.
>>
>> Christoph
>> _______________________________________________
>> Mapbender_dev mailing list
>> Mapbender_dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapbender_dev
>>
>
>
> -- Marc
>
> _______________________________________________
> Mapbender_dev mailing list
> Mapbender_dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapbender_dev
+-----------------------------------------------------------------+
|Paul Spencer pspencer at dmsolutions.ca |
+-----------------------------------------------------------------+
|Chief Technology Officer |
|DM Solutions Group Inc http://www.dmsolutions.ca/ |
+-----------------------------------------------------------------+
More information about the Mapbender_dev
mailing list