net_instaweb::LazyloadImagesFilter Class Reference

#include "lazyload_images_filter.h"

Inheritance diagram for net_instaweb::LazyloadImagesFilter:
net_instaweb::EmptyHtmlFilter net_instaweb::HtmlFilter

List of all members.

Public Member Functions

 LazyloadImagesFilter (RewriteDriver *driver)
virtual void StartDocument ()
virtual void StartElement (HtmlElement *element)
virtual void EndElement (HtmlElement *element)
virtual const char * Name () const
 The name of this filter -- used for logging and debugging.

Static Public Member Functions

static void Initialize (Statistics *statistics)
static void Terminate ()

Static Public Attributes

static const char * kImageLazyloadCode
static const char * kBlankImageSrc
static const char * kImageOnloadCode
static const char * kLoadAllImages

Detailed Description

Filter to lazyload images by replacing the src with a pagespeed_lazy_src attribute and injecting a javascript to detect which images are in the user's viewport and swapping the src back.

This filter only works if the document has a head. It adds some javascript to the head that determines if an image is visible and adds a listener to the window scroll event. If an image is visible, it replaces the src and the pagespeed_lazy_src attributes.

In order to immediately load images that are above the fold, we attach an onload event to each image. This onload event determines if the image is visible and immediately replaces the src with the pagespeed_lazy_src. Otherwise, the image is added to the deferred queue. Since the onload event is only fired if the image src is valid, we add a fixed inlined image to each image node we are deferring.

When the user scrolls, we scan through the deferred queue and determine which images are now visible, and switch the src and pagespeed_lazy_src.

Given the following input html: <html> <head> </head> <body>

1.jpeg

</body> </html>

The output will be <html> <head> <script> Javascript that determines which images are visible and attaches a window.scroll event. </script> </head> <body>

kBlankImageSrc

</body>


Member Function Documentation

virtual void net_instaweb::LazyloadImagesFilter::StartDocument (  )  [virtual]

Starts a new document. Filters should clear their state in this function, as the same Filter instance may be used for multiple HTML documents.

Reimplemented from net_instaweb::EmptyHtmlFilter.

virtual void net_instaweb::LazyloadImagesFilter::StartElement ( HtmlElement element  )  [virtual]

When an HTML element is encountered during parsing, each filter's StartElement method is called. The HtmlElement lives for the entire duration of the document.

Todo:
TODO(jmarantz): consider passing handles rather than pointers and reference-counting them instead to save memory on long documents.

Reimplemented from net_instaweb::EmptyHtmlFilter.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Tue May 29 16:34:02 2012 for Page Speed Optimization Libraries by  doxygen 1.6.3