原创

新手到站长的必经之路(十)

1、背景

无意中分享一个网站的链接给同事,满怀期待的炫耀一下,结果,尴尬的事情发生了,无限加载中。5s过去了还是没有出来。直觉告诉了网站出问题了。

2、排查步骤

  • 回到自己的电脑上打开网址,300ms左右完成加载
  • 切换到无痕模式进行打开,问题复现了。

打开F12k可以明显发现加载缓慢的有以下几类资源

3、根因分析

  • 免费cdn jsdelivr自2021年12月20日起退出了大陆市场,稳定性堪忧
  • google ads官方的代码存在坑点。默认是同步加载。但是大佬与google ads的链接不好。严重影响网站的加载速度,进而带来了非常不好的用户体验。

4、解决办法

4.1、cdn迁移

国内免费的且可靠的cdn选择如下:

我的做法是

  • 优先加cdn切换到Staticfile
  • 部分低版本Staticfile 没有的,我在jsdelivr上加资源下载下来,然后打包上传到个人的七牛云cdn。文件夹的目录按照原始的jsdelivr的目录进行构造。不得不说七牛云还是业内比较良心的

4.2、优化google ads

google ads的官方原始示例代码如下

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 自适应 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-xxx"
     data-ad-slot="5275519214"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

有多少个广告单元就复制几次

这样做带来2个问题

  • adsbygoogle.js多次加载
  • adsbygoogle同步加载阻塞页面的正常渲染

改进的方案是,优先网页加载,然后在google ads加载

  • 移除所有的
  • 在网页的底部增加如下代码,本质是在网页加载完毕,动态的引入googleads.js
<script type="text/javascript">
    function downloadJSAtOnload() {
        var element = document.createElement("script");
        element.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
        document.body.appendChild(element);
    }
    if (window.addEventListener) window.addEventListener("load", downloadJSAtOnload, false);
    else if (window.attachEvent) window.attachEvent("onload", downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
</script>

或者
只保留一个js的加载
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

同时考虑到类似的情况,将百度统计之类的代码统一挪到网页的底部

5、优化效果

优化完毕,网页的加载速度大幅度提升。似乎找到了网页排名最近下降的真正原因了。看来平时关注网站的话还得多用无痕模式了

正文到此结束
本文目录