diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
| commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
| tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/performance/lazy_loading | |
| parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
| download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip | |
initial commit
Diffstat (limited to 'files/zh-cn/web/performance/lazy_loading')
| -rw-r--r-- | files/zh-cn/web/performance/lazy_loading/index.html | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/files/zh-cn/web/performance/lazy_loading/index.html b/files/zh-cn/web/performance/lazy_loading/index.html new file mode 100644 index 0000000000..6399c43e0f --- /dev/null +++ b/files/zh-cn/web/performance/lazy_loading/index.html @@ -0,0 +1,122 @@ +--- +title: Lazy loading +slug: Web/Performance/Lazy_loading +tags: + - Lazy-loading + - Web Performance + - 延迟加载 + - 性能优化 + - 懒加载 +translation_of: Web/Performance/Lazy_loading +--- +<p><span class="seoSummary"><strong>延迟加载(懒加载) </strong></span>是一种将资源标识为非阻塞(非关键)资源并仅在需要时加载它们的策略。<span class="seoSummary"><span> </span></span>这是一种缩短<a href="https://wiki.developer.mozilla.org/zh-CN/docs/Web/Performance/Critical_rendering_path">关键渲染路径</a>长度的方法,可以缩短页面加载时间。</p> + +<p>延迟加载可以在应用程序的不同时刻发生,但通常会在某些用户交互(例如滚动和导航)上发生。</p> + +<h2 id="概览">概览</h2> + +<p>随着网络的发展,我们已经看到发送给用户的资产数量和规模都在急剧增加。从2011年到2019年,台式机的资源中位数从 <strong>~100KB </strong>增至 <strong>~400KB</strong>,移动版的资源中位数从 <strong>~50KB</strong> 增至<strong>~350KB</strong>。图像大小已从台式机上的<strong>~250KB </strong>增至 <strong>~900KB</strong>,而移动设备上的 <strong>~100KB</strong>增至<strong>~850KB</strong>。</p> + +<p>One of the methods we can use to tackle this problem is to shorten the <a href="/en-US/docs/Web/Performance/Critical_rendering_path">Critical Rendering Path</a> length by lazy loading resources that are not critical for the first render to happen.<br> + A practical example would be when, you land on the home page of an e-commerce site which has a link to a cart page/section and all its resources (JS, CSS, images...) are downloaded <strong>only</strong> when the user navigates to that cart page.</p> + +<h2 id="策略">策略</h2> + +<p>延迟加载可以通过多种策略应用于多个资源。</p> + +<h3 id="一般"> 一般</h3> + +<p id="Code_splitting">代码拆分<br> + JavaScript, CSS and HTML can be split into smaller chunks. This enables sending the minimal code required to provide value upfront, improving page-load times. The rest can be loaded on demand.</p> + +<ul> + <li> Entry point splitting: separates code by entry point(s) in the app</li> + <li> Dynamic splitting: separates code where <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import">dynamic import()</a> statements are used</li> +</ul> + +<h3 id="JavaScript"> JavaScript</h3> + +<p>脚本类型模块<br> + 任何类型为 <code>type="module" </code>的脚本标签都被视为一个 <a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Modules">JavaScript 模块</a>,并且默认情况下会被延迟。</p> + +<h3 id="CSS"> CSS</h3> + +<p>默认情况下,CSS被视为<a href="https://developer.mozilla.org/zh-CN/docs/Web/Performance/Critical_rendering_path">渲染阻塞</a>资源,因此,在 <a href="https://developer.mozilla.org/zh-CN/docs/Web/API/CSS_Object_Model">CSSOM</a> 被构造完成之前,浏览器不会渲染任何已处理的内容。CSS 必须很薄,才能尽快交付,建议使用媒体类型和查询实现非阻塞渲染。</p> + +<pre class="notranslate"><link href="style.css" rel="stylesheet" media="all"> +<link href="portrait.css" rel="stylesheet" media="orientation:portrait"> +<link href="print.css" rel="stylesheet" media="print"> +</pre> + +<p>可以执行一些 <a href="/zh-CN/docs/Learn/Performance/CSS">CSS 优化</a>来实现这一目标。</p> + +<h3 id="Fonts">Fonts</h3> + +<p>默认情况下,字体请求会延迟到构造渲染树之前,这可能会导致文本渲染延迟。</p> + +<p>It is possible to override the default behaviour and preload web font resources using <code><link rel="preload"></code>, the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display">CSS font-display property</a>, and the <a href="https://developer.mozilla.org/en-US/docs/Web/API/CSS_Font_Loading_API">Font Loading API</a>.<br> + <br> + See also: <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link">Element Link</a></p> + +<h3 id="Images_and_iframes">Images and iframes</h3> + +<p>Very often, webpages contain many images that contribute to data-usage and how fast a page can load. Most of those images are off-screen (<a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Critical_rendering_path">non-critical</a>), requiring user interaction (an example being scroll) in order to view them.</p> + +<p><strong>Loading </strong>属性<br> + The {{htmlattrxref("loading", "img")}} attribute on an {{HTMLElement("img")}} element (or the {{htmlattrxref("loading", "iframe")}} attribute on an {{HTMLElement("iframe")}}) can be used to instruct the browser to defer loading of images/iframes that are off-screen until the user scrolls near them.</p> + +<pre class="notranslate"><img src="image.jpg" alt="..." loading="lazy"> +<iframe src="video-player.html" title="..." loading="lazy"></iframe></pre> + +<p>The <code>load</code> event fires when the eagerly-loaded content has all been loaded; at that time, it's entirely possible (or even likely) that there may be lazily-loaded images that are within the {{Glossary("visual viewport")}} that haven't yet loaded.</p> + +<p>You can determine if a given image has finished loading by examining the value of its Boolean {{domxref("HTMLImageElement.complete", "complete")}} property.</p> + +<p><strong>Polyfill</strong><br> + Include this polyfill to provide support for older and currently incompatible browsers:<br> + <a href="https://github.com/mfranzke/loading-attribute-polyfill" rel="noopener">loading-attribute-polyfill</a></p> + +<p><strong>交叉观察者 API</strong><br> + <a href="https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver">Intersection Observers</a> allow the user to know when an observed element enters or exits the browser’s viewport.</p> + +<p><strong>事件处理程序</strong><br> + 当浏览器的兼容性至关重要时,有以下几种选择:</p> + +<ul> + <li><a href="https://github.com/w3c/IntersectionObserver">polyfill intersection observer</a></li> + <li>后退以滚动,调整大小或改变方向的事件处理程序,以确定特定元素是否在视口中</li> +</ul> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <thead> + <tr> + <th><strong>Specification</strong></th> + <th><strong>Status</strong></th> + <th><strong>Comment</strong></th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('HTML WHATWG', "#lazy-loading-attributes")}}</td> + <td>{{Spec2('HTML WHATWG')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="查看更多">查看更多</h2> + +<ul> + <li><a href="https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css">Render blocking CSS</a></li> + <li><a href="https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization#optimizing_loading_and_rendering">Optimizing loading and rendering</a></li> + <li><a href="https://developers.google.com/web/fundamentals/performance/lazy-loading-guidance/images-and-video">Lazy loading images and video</a></li> +</ul> + +<dl> +</dl> + +<div id="gtx-trans" style="position: absolute; left: 160px; top: 2955px;"> +<div class="gtx-trans-icon"></div> +</div> |
