Inline Preview Images
Configuration
The 'Inline Preview Images' filter is enabled by specifying:
- Apache:
ModPagespeedEnableFilters inline_preview_images
- Nginx:
pagespeed EnableFilters inline_preview_images;
in the configuration file.
The 'Resize Mobile Images' filter is enabled by specifying:- Apache:
ModPagespeedEnableFilters resize_mobile_images
- Nginx:
pagespeed EnableFilters resize_mobile_images;
Description
The 'Inline Preview Images' filter generates low quality versions of the images that are
inlined in the HTML page. Users experience faster rendering of the page and the low quality
images are replaced by high quality versions after an onload event is triggered. The filter
works on images found in
<img> tags.
The 'Resize Mobile Images' filter works like Inline Preview Images, but is applied only for mobile browsers, and shrinks the size in pixels of the placeholder images on mobile devices to better fit the device screen size. If Inline Preview Images is activated and Resize Mobile Images is not, full-resolution preview images will be served to both desktop and mobile browsers.
Note: inline_preview_images and
resize_mobile_images should be used together with
insert_image_dimensions to avoid reflow as the images load.
Operation
The 'Inline Preview Images' filter changes thesrc attribute of
<img> elements to data-pagespeed-high-res-src based on a few
parameters which are described in next section. It generates low quality versions of the
images and replaces the src attribute with these. The low quality images are
replaced by high quality versions after an onload event is triggered.
Parameters that affect optimization
- Apache:
ModPagespeedMaxInlinedPreviewImagesIndex IndexNumber
- Nginx:
pagespeed MaxInlinedPreviewImagesIndex IndexNumber;
The first IndexNumber images on the page are replaced by low quality images.
Negative numbers will result in all images being rewritten. Zero means no
image will be rewritten. The default value of this parameter is -1. Refer to the Risks
section for trade offs on setting this value.
- Apache:
ModPagespeedMinImageSizeLowResolutionBytes MinBytes
- Nginx:
pagespeed MinImageSizeLowResolutionBytes MinBytes;
MinBytes, a positive integer, is the minimum size in bytes of any image for
which a low quality image is generated. No images will be rewritten for zero and negative
values.
'Inline Preview Images' injects JavaScript that uses a beacon to report back to the server the images that are visible in the client's initial viewport (above the fold). It takes a few accesses of a page for the data to be reported back and processed but eventually the above-the-fold images will be known and will be replaced with low quality versions while all others will be handled normally; until then images are replaced as described above.
The use of beacons can be disabled using the ModPagespeedCriticalImagesBeaconEnabled directive. If they are disabled, 'Inline Preview Images' will not inject the JavaScript and images will be replaced with low quality versions as described above.
Example
You can see the Inline Preview Images filter in action at
www.modpagespeed.com on this
example. You can also see this
example
of the Resize Mobile Images filter.
Risks
This filter is considered moderately risky. The main risk is that the HTML becomes bloated
due to the embedded low quality image data.
MaxInlinedPreviewImagesIndex should be chosen appropriately; otherwise, if
images below the fold are inlined, there is no user perceivable gain, but the page takes
longer to load due to the extra bytes in the HTML.
Note that MaxInlinedPreviewImagesIndex and
MinImageSizeLowResolutionBytes should not be used to disable inlining of
preview images (for example by setting either parameter to 0). Instead, the
inline_preview_images and resize_mobile_images filters themselves
should be disabled.