PageOptimizerPlugin

Optimize html markup, as well as js and css

Description

This plugin is used to clean up the html page foswiki renders by rewriting and/or removing code not required in html5. It also compresses all stylesheets and javascript code used in a page thus reducing the number of http requests that are normally required to load a page including all of its assets.

These changes only apply to output of type text/html, not to any other kind of output.

Rewrite of html markup

The following list of transformations is performed:

  • all one-liner html comments are removed
  • any markup following the closing </html> is removed
  • sequences of <p></p><p></p>... are collapsed into one
  • script blocks of type text/javascript don't need a type argument anymore as that's the default in html5
  • style blocks of type text/css don't need a type argument anymore as that's the default in html5
  • citations produced by foswiki's > at the beginning of a line are collapsed into one <div> block of type foswikiCite, or foswikiBlockQuote when there are multiple citation lines following
  • <verbatim> blocks contained in template comments are rewritten to look nicer for better readability of view templates coded in topics

Combining and compressing stylesheets and javascript

PageOptimizerPlugin is reading all css and js files loaded into a page and combines them into one each. Only stylesheets for media="all" are processed. Only scripts of type text/javascript are processed. All css files are parsed and rewritten so that contained @import() and url() statements are working as expected.

The combined css (js) files are cached and reused by pages that have the same profile of assets loaded into the page. Or expressed the other way around: each page that differs in the set of assets will get its own combined stylesheet (javascript).

PageOptimizerPlugin is able to gather statistics about how often specific css (js) files have been used while combining them with others. This feature is switched off by default but can be enabled using the {GatherStatistics} switch in configure. Once statistics are enabled, the plugin will record css and js use. Results can be printed out using the statistics REST handler. For now, this is a rather crude statistic how often css (js) file have been used per pages visited. E.g. a value of 100% means: this asset has been used on all pages, whereas lower values indicate a decreasing frequency of those files being used.

All css and js files will be cached in plain text as well as encoded gzip compressed for browsers supporting on-the-fly decompression of js and css files.

The cache of stylesheets and javascript files can be refreshed manually by using the refresh url parameter:

Installation Instructions

You do not need to install anything in the browser to use this extension. The following instructions are for the administrator who installs the extension on the server.

Open configure, and open the "Extensions" section. "Extensions Operation and Maintenance" Tab → "Install, Update or Remove extensions" Tab. Click the "Search for Extensions" button. Enter part of the extension name or description and press search. Select the desired extension(s) and click install. If an extension is already installed, it will not show up in the search results.

You can also install from the shell by running the extension installer as the web server user: (Be sure to run as the webserver user, not as root!)
cd /path/to/foswiki
perl tools/extension_installer <NameOfExtension> install

If you have any problems, or if the extension isn't available in configure, then you can still install manually from the command-line. See https://foswiki.org/Support/ManuallyInstallingExtensions for more help.

Dependencies

NameVersionDescription
URI1.54>=Required.

Change History

25 Sep 2017: added http/2 push headers
09 Sep 2016: improved cache handling, i.e. added a rest handler to purge the cache occasionally
13 Jun 2016: fixed compatibility with AngularPlugin/AngularSkin; performance improvements
23 Feb 2015: remove some bogus non-macros if left over, such as REVISIONS, REVTITLE, REVARG, QUERYPARAMSTRING
04 Apr 2014: flag rest handlers that don't require authentication
30 May 2013: fixed handling if IE conditional comments; no js or css optimization by default, only html cleanup
07 May 2012: added feature to make at least some <p>s real paragraphs for improved typographics
02 Apr 2012: added {ExcludeJavaScript} and {ExcludeCss} feature to specify files not to be processed by the asset optimizer
26 Mar 2012: added flags to turn on/off specific optimizations
20 Mar 2012: added statistics module
19 Mar 2012: initial checkin

PackageForm edit

Author Michael Daum
Version 3.00
Release 25 Sep 2017
Description Optimize html markup, as well as js and css
Repository https://github.com/foswiki/PageOptimizerPlugin
Copyright © 2012-2017 Michael Daum http://michaeldaumconsulting.com
License GPL (Gnu General Public License)
Home Foswiki:Extensions/PageOptimizerPlugin
Support Foswiki:Support/PageOptimizerPlugin
Topic revision: r1 - 25 Sep 2017, UnknownUser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this site is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback