[wp-hackers] compression and caching

William Canino william.canino at googlemail.com
Tue Dec 29 18:34:14 UTC 2009


Weston,

> I'm eager to hear what you all think about this approach

Here's my feedback:

My sites do not change their scripts and css every day, or even once a
week.  And certainly the js and css do not change in-between every
visitor's two pageloads.  For this reason, I think your plugin's
processing is best as a button inside the blog's admin area -- run by
the site admin when so inclined -- and not hooked into the blog page's
loading process.

Your solution is like running "OPTIMIZE TABLE wp_options" on every page load.

On the other hand, I am pleased that your plugin writes .js files, not
.php files, unlike Leon Chevalier's PHPSpeedy.



And, Weston, constructive suggestion: See
http://codex.wordpress.org/WordPress_Coding_Standards .


2009/12/28 Weston Ruter <westonruter at gmail.com>:
> Hi all, I'm new here. Micah invited me to join in on the discussion.
>
> I just read most of the messages in this thread, and I see most of them are
> debating the merits of compressing (gzipping) responses. Regarding scripts
> alone, just concatenating the enqueued scripts and minifying them will
> result in drastic speedups without gzipping at all. For example, I recently
> a WordPress site built by a reputable company that had 50(!) external
> JavaScript files. If these were all concatenated together and
> minified/optimized, then there would potentially be only one download. As an
> added bonus, this optimized script could be gzipped and even more
> importantly be served with a far-future expires header.
>
> I have been developing a plugin called “Optimize Scripts” which does just
> this. As the plugin page states, it:
>
>   1. Respects head and footer groups.
>   2. Minifies code using Google's Closure Compiler.
>   3. Caches the concatenated/minified code and rebuilds it only when one of
>   its source scripts expires or changes. The optimizescripts_expires filter
>   is provided which allows the far-future expires time to be forced.
>   4. Filename for concatenated/minified script is the md5 of all the
>   handles concatenated together (thus if an additional handle is provided, a
>   new concatenated script is generated).
>   5. Provides a filter to limit which scripts get concatenated (i.e. jQuery
>   on ajax.googleapis.com should be left alone); by default, all scripts on
>   local host are concatenated, and remote scripts are left alone.
>   6. Removes the default 'ver' query parameter which WordPress adds to
>   every script src if no version argument is supplied on
>   wp_enqueue/register_script: this is important for Web-wide caching of
>   scripts loaded from ajax.googleapis.com, for example. When registering
>   new scripts, pass the filemtime in as the version so that whenever a file
>   changes, the concatenated script will be regenerated.
>   7. Script optimization can be delegated to a scheduled cron job so that
>   the server does not periodically respond slowly to visitors.
>
> Read more and see examples on the plugin page:
> http://wordpress.org/extend/plugins/optimize-scripts/
>
> This plugin also relies on server configuration in that a far-future expires
> header must be set, or otherwise the plugin will abort concatenation.
> (However, the optimizescripts_expires filter mentioned above is a workaround
> for this.)
>
> I'm eager to hear what you all think about this approach and if would be
> good to include in WordPress core so that it can be fast by default in how
> it serves scripts.
>
> Weston
>
>
> *William Canino* wrote at *Mon Dec 28 21:22:29 UTC 2009*:
>
>> Let me share with you guys my .htaccess file. I got more gains with
>>
>> this config in my experience than minifying and concatenating on the
>> fly hereby killing the CPU of my shared host.
>>
>> # Far Expires
>> FileETag All
>> ExpiresActive On  # enable expirations
>> ExpiresByType text/javascript "access plus 5 weeks"
>>
>>
>> ExpiresByType application/x-javascript "access plus 5 weeks"
>> ExpiresByType application/javascript "access plus 5 weeks"
>> ExpiresByType text/css "access plus 5 weeks"
>>
>> # Javascript and CSS Gzipping
>>
>>
>> # copied from http://zuble.blogspot.com/2007/02/compressed-js-and-modrewrite.html
>> <FilesMatch "\\.js.gz$">
>>
>>   ForceType text/javascript
>>
>>   Header set Content-Encoding: gzip
>> </FilesMatch>
>> <FilesMatch "\\.js$">
>>   RewriteEngine On
>>   RewriteCond %{HTTP:Accept-Encoding} gzip
>>   RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
>>
>>
>>   RewriteCond %{REQUEST_FILENAME}.gz -f
>>   RewriteRule (.*)\.js$ $1\.js.gz [L]
>>   ForceType text/javascript
>> </FilesMatch>
>> <FilesMatch "\\.css.gz$">
>>   ForceType text/css
>>   Header set Content-Encoding: gzip
>>
>>
>> </FilesMatch>
>> <FilesMatch "\\.css$">
>>   RewriteEngine On
>>   RewriteCond %{HTTP:Accept-Encoding} gzip
>>   RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
>>   RewriteCond %{REQUEST_FILENAME}.gz -f
>>
>>
>>   RewriteRule (.*)\.css$ $1\.css.gz [L]
>>   ForceType text/css
>> </FilesMatch>
>>
>> I then saved a minified+gzipped version of each css and js on the
>> respective directories.
>>
>> Don't joke -- I *have* killed a shared hosting CPU before by
>>
>>
>> dynamically concatenating, minifying and compressing assets.
>>
>>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>


More information about the wp-hackers mailing list