Web 第三方嵌入网页速度优化

第三方的内容可能会通过多种方式影响我们页面的性能。比如它可能会阻塞渲染、与我们页面上其他的资源争夺网络带宽、第三方网页的嵌入也可能在加载时导致布局偏移,进而影响我们网页的 Core Web Vitals 指标。

Web 第三方嵌入网页速度优化

什么是嵌入

第三方嵌入可能是你网站上显示的任何内容,首先它满足下面俩条件:

  • 不是你写的
  • 由第三方服务器提供

一般嵌入经常用于以下的情况:

  • 与体育、新闻、娱乐和时尚相关的网站会嵌入一些第三方视频
  • 将社交媒体(比如 Twitter )卡片嵌入到自己的网页中
  • 一些餐厅、公园或者活动页面通常需要嵌入在线地图

一般我们都会通过 <iframe> 来嵌入一个三方网页。

第三方代码嵌入位置

对第三方嵌入资源的加载请求会阻断我们主 JS 的加载,所以第三方脚本标签的位置很重要。

将第三方脚本标签放在网页的主要资源之后,并使用 async 或 defer 属性异步加载它们。

<head>
   <title>page</title>
   <link rel="stylesheet" media="screen" href="/xx/xx.css">
   <script src="xx.js"></script>
   <script src="https://xxx.com/xxxx.js" async></script>
</head>

懒加载

原生 <iframe> 的懒加载

使用 <iframe> 嵌入第三方网页,我们可以使用浏览器的原生懒加载支持,这回使浏览器在用户即将滚动到该标签之前才加载它。

<iframe src="https://xxxx.com"
       loading="lazy"
       width="400"
       height="400">
</iframe>

loading 属性支持设置下面的值:

  • lazy: 表示浏览器应该延迟加载 iframe。浏览器会直到 iframe 接近可视区域时才加载它。
  • eager:立即加载 iframe。
  • auto: 由浏览器决定是否延迟加载这个iframe。

lazysizes

由于原生的懒加载的兼容性问题,不同的浏览器可能会有不一样的行为表现。如果你希望更好的控制懒加载的距离阈值,或者希望跨浏览器提供一致的延迟加载体验,可以使用 lazysizes 这库。

lazysizes 是一个快速、高性能并且对 SEO 友好的懒加载库,适用于图片和 iframe,你可以像下面这样使用,实现 YouTube 视频的嵌入:

<script src="lazysizes.min.js" async></script>

<iframe data-src="https://www.youtube.com/embed/xxxxxx"
   width="560" height="315"
   class="lazyload"
   title="YouTube"
   frameborder="0"
   allow="accelerometer; autoplay; clipboard-write; 
        encrypted-media; gyroscope; picture-in-picture"
   allowfullscreen>
</iframe>

布局稳定性

然动态加载嵌入内容可以提高页面的加载性能,但有时会导致页面内容意外移动,这称为布局偏移。

CLS 是 Core Web Vitals 之一,它会测量在页面的整个生命周期中发生的每个意外的样式移动的所有单独布局更改得分的总和。

为了避免发生太大的布局偏移,我们可以通过指定 iframe 的 width 和 height 属性或通过为将加载第三方嵌入的静态图片设置固定大小。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    blank

    暂无评论内容