前期也有介绍过为了统计访问量等数据,在全站加上了CNZZ站长统计的代码,详见www.iappi.cn程门立学.添加站长统计代码记录 ,但是很快就发现有个问题了。就是在chrome浏览器下或者国内浏览器,例如QQ浏览器、360浏览器等极速模式下会存在几个警告。虽然网络正常,也没有影响到https的页面的展示,但还是觉得需要处理。毕竟浏览器已经警告了,不能视而不见。
![5583f2d65bf314083734b29614c2cc04.png](https://img-blog.csdnimg.cn/img_convert/5583f2d65bf314083734b29614c2cc04.png)
初步看了下一共6个警告,2个来自站长统计,4个来自360搜索自动推送代码。6个警告都是阻止跨站解析器阻断脚本通过document.write调用(A parser-blocking, cross site script,XXXX.js is invoked via document.write.),大概警告的内容是:
A parser-blocking, cross site (i.e. different eTLD+1) script, <URL>, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See <URL> for more details.
z_stat.php?id=XXXXXXXX&web_id=XXXXXXXX:17 A parser-blocking, cross site (i.e. different eTLD+1) script, https://c.cnzz.com/core.php?web_id=XXXXXXXX&t=z, is invoked via document.write. The network request for this script MAY be blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com/feature/5718547946799104 for more details.
初步翻译下是:一个跨站解析器阻断脚本XXXX.js通过document.write调用,如果设备的网络连接较差,该脚本的网络请求可能会被浏览器在此页面或未来页面加载中被阻止。
上网查了下跨站的document.write调用警告,大概发现原因有:
Chrome 55版本开始干预“通过document.write插入的跨站解析器阻断脚本”的加载,提升页面加载速度。
根据网站上的表述,对于诸如2G之类的连接速度较慢的用户来说,通过document.write加载的第三方脚本,性能损失通常非常严重,以至于主页内容的显示会延迟数十秒。
在浏览器呈现页面之前,必须通过解析HTML标记来构建DOM树。无论何时解析器遇到脚本,它都必须停止并执行脚本,才能继续解析HTML。如果脚本动态插入另一个脚本,解析器将被迫等待更长时间才能下载资源,这可能会导致一次或多次网络往返并延迟首次呈现页面的时间。
Chrome从第55版开始代表所有用户进行干预,具体来说,当满足以下所有条件时,Chrome将不执行通过document.write()插入的<script>元素:
- 慢速网络下,特别是使用2G网络,有可能某些3G下。
- Document.write()在Top层文档中。
- Document.write()中的脚本是解析器阻断脚本。不过有“异步”或“延迟”属性的脚本将正常运行。
- 该脚本不是托管在同一站点上。类似于http://iappi.cn调用了http://cnzz.com的代码脚本。
- 该脚本没有缓存,缓存中的脚本会继续运行。
- 该页面的请求不是重新加载。如果用户触发了重新加载Chrome不会干预,会像平常一样执行页面。
但是既然警告了的话,也不好直接就不用CNZZ的统计了,而且也还是警告而已。更何况,网上也有资料给出了解决的方案,就是将代码更改成异步代码。
原普通统计代码:
<script type=”text/javascript” src=”https://s96.cnzz.com/z_stat.php?id=XXXXXXXX&web_id=XXXXXXXX”></script>
更改后的异步代码:<script>var cnzz_s_tag = document.createElement(‘script’);cnzz_s_tag.type = ‘text/javascript’;cnzz_s_tag.async = true;cnzz_s_tag.charset = ‘utf-8’;cnzz_s_tag.src = ‘https://w.cnzz.com/c.php?id=XXXXXXXX&async=1’;var root_s = document.getElementsByTagName(‘script’)[0];root_s.parentNode.insertBefore(cnzz_s_tag, root_s);</script>
注意将id=XXXX这段改成对应的统计ID,避免无法生效。
在后台把对应的代码进行替换后刷新,发现CNZZ统计的警告已经消失,只剩下360搜索的警告了。说明基本上已经完成了第一步,下一步则是看统计是否依然准确了,有待于明天继续检验。
![a3e851bdf4dad0c6e236400ee48f4ac2.png](https://img-blog.csdnimg.cn/img_convert/a3e851bdf4dad0c6e236400ee48f4ac2.png)
下一步在看怎样优化360的推送代码,或者直接干掉了。毕竟360的代码有时候延迟接近8s多,严重的影响网页的打开速度了。推送了这么久,也仅仅收录了2个页面。
参考资料: https://zhuanlan.zhihu.com/p/37978427
更多:
消除CNZZ.站长统计代码被Chrome浏览器警告的操作www.iappi.cn![9833eafd687900bc284652a3bfebc98f.png](https://img-blog.csdnimg.cn/img_convert/9833eafd687900bc284652a3bfebc98f.png)