有朋友可能看过我写的两篇文章:第一篇是《利用Write()和userAgent解决自适应网站CDN后不能识别移动端的问题》,想解决前端判断移动端和PC端、然后投放广告代码的问题。其实这样做并没考虑SEO优化的问题。
这样做之后,发现网页打开总是卡顿,从控制台发现了问题:
A Parser-blocking, cross site (i.e. different eTLD+1) script, http://pos.baidu.com/xxxxxxx, 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.
加载网页时卡顿的原因是这样的:
在 2G、3G 或速度比较慢的 wifi 环境中,使用 document.write()
动态加载资源会让页面的展现慢 10 秒以上。每当解析器遇到脚本时,它必须停止并执行它,然后才能继续解析 HTML。如果脚本动态地注入另一个脚本,解析器将被迫等待更长时间才能下载资源,这可能会导致一个或多个网络往返并延迟首次渲染页面的时间,导致页面无法加载或花费的时间长于用户放弃。通过第三方脚本插入的 document.write()
页面的速度通常比 2G 的其他页面载入速度慢两倍!
更多内容可以参考我这篇文章:《大家尽量不要在网页中使用document.write()》。
因此,后来我把网页广告代码中的document.write()都撤掉了。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
但是,这两天发现控制台还在警告,一看竟然是网页开头那个显示时间的欢迎语。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
里面仍有两处涉及到了document.write()
函数。
代码如下:
- <script type="text/javascript">
- today = new Date();
- var day;
- var date;
- var hello;
- hour = new Date().getHours();
- if (hour < 6) {
- hello = ' 凌晨好! ';
- } else if (hour < 9) {
- hello = ' 早上好!';
- } else if (hour < 12) {
- hello = ' 上午好!';
- } else if (hour < 14) {
- hello = ' 中午好! ';
- } else if (hour < 17) {
- hello = ' 下午好! ';
- } else if (hour < 19) {
- hello = ' 傍晚好!';
- } else if (hour < 22) {
- hello = ' 晚上好! ';
- } else {
- hello = '夜深了! ';
- }
- function GetCookie(sName) {
- var arr = document.cookie.match(new RegExp("(^| )" + sName + "=([^;]*)(;|$)"));
- if (arr != null) {
- return unescape(arr[2])
- };
- return null;
- }
- var Guest_Name = decodeURIComponent(GetCookie('author'));
- var webUrl = webUrl;
- if (Guest_Name != "null") {
- hello = Guest_Name + ' , ' + hello + ' 欢迎回来。';
- }
- document.write(' ' + hello);
- </script>
- <span id="localtime">今天是:
- <script type="text/javascript">
- today = new Date();
- var tdate, tday, x, year;
- var x = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
- var MSIE = navigator.userAgent.indexOf("MSIE");
- if (MSIE != -1) {
- year = (today.getFullYear());
- } else {
- year = (today.getYear() + 1900);
- }
- tdate = year + "年" + (today.getMonth() + 1) + "月" + today.getDate() + "日" + " " + x[today.getDay()];
- document.write(tdate);
- </script>
- </span>
这两处的 document.write()
函数可以用其他代码和函数替换掉,如下所示:
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved
- <span id="time">
- <script type="text/javascript">
- / * 设置特定时间段的问候语 * /
- today = new Date();
- var day;
- var date;
- var hello;
- hour = new Date().getHours();
- if (hour < 6) {
- hello = ' 凌晨好! ';
- } else if (hour < 9) {
- hello = ' 早上好!';
- } else if (hour < 12) {
- hello = ' 上午好!';
- } else if (hour < 14) {
- hello = ' 中午好! ';
- } else if (hour < 17) {
- hello = ' 下午好! ';
- } else if (hour < 19) {
- hello = ' 傍晚好!';
- } else if (hour < 22) {
- hello = ' 晚上好! ';
- } else {
- hello = '夜深了! ';
- }
- / * 获取登录者的cookie * /
- function GetCookie(sName) {
- var arr = document.cookie.match(new RegExp("(^| )"+sName+"=([^;]*)(;|$)"));
- if(arr !=null){return unescape(arr[2])}; return null;}
- var Guest_Name = decodeURIComponent(GetCookie('author'));
- var webUrl = webUrl;
- if (Guest_Name != "null" ){
- hello = Guest_Name+' , '+hello+' 欢迎回来。';
- }
- / * 获取时间信息 * /
- today=new Date();
- var tdate,tday, x,year; var x = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五","星期六");
- var MSIE=navigator.userAgent.indexOf("MSIE");
- if(MSIE != -1){
- year =(today.getFullYear());
- } else {
- year = (today.getYear()+1900);
- }
- tdate= year+ "年" + (today.getMonth() + 1 ) + "月" + today.getDate() + "日" + " " + x[today.getDay()];
- / * 输出信息 * /
- document.getElementById('time').innerHTML=hello + '今天是:' + tdate;
- </script>
- </span>
替换之后,问题就解决了。
本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利
代码放在了网盘里:链接: pan.baidu.com/s/1o8LvecU 密码: qi3j