Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
net_instaweb::LazyloadImagesFilter Class Reference

#include "lazyload_images_filter.h"

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

Public Member Functions

 LazyloadImagesFilter (RewriteDriver *driver)
virtual const char * Name () const
 The name of this filter – used for logging and debugging.
ScriptUsage GetScriptUsage () const override
- Public Member Functions inherited from net_instaweb::CommonFilter
 CommonFilter (RewriteDriver *driver)
const GoogleUrlbase_url () const
 Getters. More...
const GoogleUrldecoded_base_url () const
RewriteDriverdriver () const
HtmlElementnoscript_element () const
void InsertNodeAtBodyEnd (HtmlNode *data)
virtual void StartDocument ()
 Note: Don't overload these methods, overload the implementers instead!
virtual void StartElement (HtmlElement *element)
virtual void EndElement (HtmlElement *element)
virtual void Characters (HtmlCharactersNode *characters)
ResourcePtr CreateInputResource (StringPiece input_url, RewriteDriver::InputRole role, bool *is_authorized)
ResourcePtr CreateInputResourceOrInsertDebugComment (StringPiece input_url, RewriteDriver::InputRole role, HtmlElement *element)
void ResolveUrl (StringPiece input_url, GoogleUrl *out_url)
bool IsRelativeUrlLoadPermittedByCsp (StringPiece url, CspDirective role)
bool BaseUrlIsValid () const
bool DebugMode () const
bool CanAddPagespeedOnloadToImage (const HtmlElement &)
virtual void LogFilterModifiedContent ()
AllowUnauthorizedDomain () const
virtual bool IntendedForInlining () const
void AddJsToElement (StringPiece js, HtmlElement *script)
- Public Member Functions inherited from net_instaweb::EmptyHtmlFilter
virtual void Cdata (HtmlCdataNode *cdata)
 Called for CDATA blocks (e.g. <![CDATA[foobar]]>)
virtual void Comment (HtmlCommentNode *comment)
 Called for HTML comments that aren't IE directives (e.g. ).
virtual void IEDirective (HtmlIEDirectiveNode *directive)
virtual void Directive (HtmlDirectiveNode *directive)
 Called for HTML directives (e.g. <!doctype foobar>).
virtual void Flush ()
virtual bool CanModifyUrls ()
ScriptUsage GetScriptUsage () const override
- Public Member Functions inherited from net_instaweb::HtmlFilter
virtual void RenderDone ()
bool is_enabled () const
void set_is_enabled (bool is_enabled)

Static Public Member Functions

static void InitStats (Statistics *statistics)
static void Terminate ()
ShouldApply (RewriteDriver *driver)
 Lazyload filter will be no op for the request if ShouldApply returns false.
static GoogleString GetLazyloadJsSnippet (const RewriteOptions *options, StaticAssetManager *static_asset_manager)
- Static Public Member Functions inherited from net_instaweb::CommonFilter
static bool ExtractMetaTagDetails (const HtmlElement &element, const ResponseHeaders *headers, GoogleString *content, GoogleString *mime_type, GoogleString *charset)

Static Public Attributes

static const char * kImageLazyloadCode
static const char * kImageOnloadCode
static const char * kLoadAllImages
static const char * kOverrideAttributeFunctions
static const char * kIsLazyloadScriptInsertedPropertyName
- Static Public Attributes inherited from net_instaweb::CommonFilter
static const char kCreateResourceFailedDebugMsg []
 Debug message to be inserted when resource creation fails.

Additional Inherited Members

- Public Types inherited from net_instaweb::HtmlFilter
enum  ScriptUsage { kWillInjectScripts, kMayInjectScripts, kNeverInjectsScripts }
 Describes a filter's relationship with scripts. More...
- Protected Member Functions inherited from net_instaweb::CommonFilter
ServerContextserver_context () const
const RewriteOptionsrewrite_options ()
virtual const char * LoggingId ()

Detailed Description

Filter to lazyload images by replacing the src with a data-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 data-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 data-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 data-pagespeed-lazy-src.

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

</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>


Member Function Documentation

ScriptUsage net_instaweb::LazyloadImagesFilter::GetScriptUsage ( ) const

Note: there is also kRequiresScriptExecutionFilterSet in, which identifies filters that will leave broken pages if javascript is disabled, and hence require noscript handing. The set of filters that CanInjectScripts is larger, as it includes filters that might inject beacons or other optional functionality that is not page-critical.

Implements net_instaweb::HtmlFilter.

The documentation for this class was generated from the following file: