如何最好地推迟将脚本排除在PageSpeed Insights之外?

时间:2019-01-13 06:32:20

标签: javascript pagespeed zopim

我们在网站上使用Zopim。不幸的是,因此,我们在PageSpeed Insights上受到了严重的惩罚。

  • 没有Zopim:86/100
  • 使用Zopim:66/100

Zopim似乎了解issue,并承诺进一步优化其小部件,但我们尚未看到很多进展。

添加Zopim的代码如下:

<script type="text/javascript">
  window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
  d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
  _.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute("charset","utf-8");
  $.src="https://v2.zopim.com/?2dAdkKRoqdi9hHHrfr302XabQaK8DN7f";z.t=+new Date;$.
  type="text/javascript";e.parentNode.insertBefore($,e)})(document,"script");
</script>

我一直在尝试不同的方法来延迟脚本的执行(延迟和异步),但是未能提高我们的PageSpeed Insights得分(未完全删除Zopim)。

我来到了article,但是我的幼稚尝试(用“ https://v2.zopim.com/?2dAdkKRoqdi9hHHrfr302XabQaK8DN7f”替换“ defer.js”)并没有达到预期的效果,而Zopim仍然被PageSpeed计数。

我的问题:

  • 推迟非关键脚本以确保PageSpeed Insights 将脚本计入分数的最佳方法是什么?
  • 如何将其应用于Zopim脚本?

4 个答案:

答案 0 :(得分:3)

在这篇文章中写了最好的解决方案:here

“我们更改了加载此脚本背后的逻辑。脚本加载在用户执行第一个操作时开始。作为我们考虑的操作:滚动、鼠标单击、鼠标移动、触摸屏幕或按键。”

工作真好!

<script>
            document.addEventListener('scroll', zopimlaunch);
            document.addEventListener('mousedown', zopimlaunch);
            document.addEventListener('mousemove', zopimlaunch);
            document.addEventListener('touchstart', zopimlaunch);
            document.addEventListener('scroll', zopimlaunch);
            document.addEventListener('keydown', zopimlaunch);

            function zopimlaunch () {
                window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set._.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute('charset','utf-8');
                $.src='//v2.zopim.com/?yourid';z.t=+new Date;$.type='text/javascript';e.parentNode.insertBefore($,e)})(document,'script');

                document.removeEventListener('scroll', zopimlaunch);
                document.removeEventListener('mousedown', zopimlaunch);
                document.removeEventListener('mousemove', zopimlaunch);
                document.removeEventListener('touchstart', zopimlaunch);
                document.removeEventListener('scroll', zopimlaunch);
                document.removeEventListener('keydown', zopimlaunch);
            }

</script>

答案 1 :(得分:1)

您可以通过在JavaScript第三行的末尾添加loaded_model来做到这一点,如下所示:

$.setAttribute("defer",null);

答案 2 :(得分:1)

我已经更改了网站,以便Zopim在页面本身加载后加载,而不是在初始页面加载中不可或缺。 将此放置在</body>之前:

    <script>
    window.addEventListener("load", function () {
        window.$zopim || (function (d, s) {
            var z = $zopim = function (c) { z._.push(c) },
                $ = z.s = d.createElement(s), e = d.getElementsByTagName(s)[0]; z.set = function (o) {
                    z.set._.push(o);
                }; z._ = []; z.set._ = []; $.async = !0; $.setAttribute('charset', 'utf-8');
            $.src = '//v2.zopim.com/?1ubUmoyGvu8nQlye7YBWC3pLL0lgJDUf'; z.t = +new Date; $.
                type = 'text/javascript'; e.parentNode.insertBefore($, e);
        })(document, 'script');
    })
</script>

答案 3 :(得分:0)

是的,zopim不在我的好书中,所以我也一直在设法解决他们的代码。这就是我推迟了zopim脚本的方式。

two_largest = df['P_max'].nlargest(2).to_numpy()

df.loc[df['P_max'] == two_largest[0], 'Peak2'] = df.loc[df['P_max'] == two_largest[1]]['P_max'].to_numpy()[0]
df.loc[df['P_max'] == two_largest[0], 'RSI2'] = df.loc[df['P_max'] == two_largest[1]]['RSI'].to_numpy()[0]

print(df.fillna(0))
    Index  P_max  P_max_ind  RSI  Peak2  RSI2
0       0    0.0          0    0    0.0   0.0
1       1    0.0          0    0    0.0   0.0
2       2    0.0          0    0    0.0   0.0
3       3   11.8          3   81    0.0   0.0
4       4    0.0          0    0    0.0   0.0
5       5    0.0          0    0    0.0   0.0
6       6   11.5          6   75    0.0   0.0
7       7    0.0          0    0    0.0   0.0
8       8   11.0          8   80    0.0   0.0
9       9    0.0          0    0    0.0   0.0
10     10   12.0         10   80   11.8  81.0
相关问题