Page Speed Optimization Libraries
1.13.35.1
|
#include "lazyload_images_filter.h"
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 GoogleUrl & | base_url () const |
Getters. More... | |
const GoogleUrl & | decoded_base_url () const |
RewriteDriver * | driver () const |
HtmlElement * | noscript_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 () |
virtual RewriteDriver::InlineAuthorizationPolicy | 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 () |
static RewriterHtmlApplication::Status | 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 | |
ServerContext * | server_context () const |
const RewriteOptions * | rewrite_options () |
virtual const char * | LoggingId () |
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>
</body>
|
inlineoverridevirtual |
Note: there is also kRequiresScriptExecutionFilterSet in rewrite_options.cc, 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.