精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

重寫document.write實現(xiàn)無阻塞加載JS廣告

開發(fā) 前端
無阻塞加載javascript,對于頁面性能優(yōu)化有很大的作用,這樣能有效的減少js對頁面加載的阻塞。特別是一些廣告js文件,由于廣告內(nèi)容有可能是富媒體,更是很可能成為你頁面加載提速的瓶頸,高性能javascript告訴我們,同學,提升你的網(wǎng)頁速度,就無阻塞地加載JS吧。

無阻塞加載javascript,對于頁面性能優(yōu)化有很大的作用,這樣能有效的減少js對頁面加載的阻塞。特別是一些廣告js文件,由于廣告內(nèi)容有可能是富媒體,更是很可能成為你頁面加載提速的瓶頸,高性能javascript告訴我們,同學,提升你的網(wǎng)頁速度,就無阻塞地加載JS吧。

于是便有一下代碼出現(xiàn)。

  1. (function() {  
  2. var s = document.createElement('script');  
  3. s.type = 'text/javascript';  
  4. s.async = true;  
  5. s.src = 'http://yourdomain.com/script.js';  
  6. var x = document.getElementsByTagName('script')[0];  
  7. x.parentNode.insertBefore(s, x);  
  8. })(); 

上邊都是大家熟悉的,看過書的同學都知道這樣無阻塞加載的好處,效果挺不錯的,當此等無阻塞腳本遇到一般js廣告就來了寫問題——廣告代碼出現(xiàn)在HTML里面了卻不顯示廣告。

納尼?HTML出來了不渲染到頁面上?

先看看廣告js代碼

  1. document.write('<img src="http://images.cnblogs.com/logo_small.gif" alt="Logo">'); 

代碼挺簡單就一個document.write輸出HTML代碼(相信很多廣告商的廣告都這樣),頁面不顯示廣告問題在哪里呢? 問題就在這個document.write。為什么?先w3schools看看document.write的定義很使用吧。

定義和用法
write() 方法可向文檔寫入 HTML 表達式或 JavaScript 代碼。
可列出多個參數(shù)(exp1,exp2,exp3,...) ,它們將按順序被追加到文檔中。

方法:
一是在使用該方在文檔中輸出 HTML,另一種是在調(diào)用該方法的的窗口之外的窗口、框架中產(chǎn)生新文檔。在第二種情況中,請務(wù)必使用 close() 方法來關(guān)閉文檔。

但其原理是在頁面流輸入過程中執(zhí)行,一旦頁面加載完畢,再次調(diào)用 document.write(),會隱式地調(diào)用 document.open() 來擦除當前文檔并開始一個新的文檔。也就是說如果在HTML加載完后我們再使用document.write會檫除之前生成html,而顯示document.write輸出的內(nèi)容。

而我們例子中在頁面加載完后在在html中輸出document.write,就不會被執(zhí)行了。問題知道了,原理知道了,那怎么解決這個問題呢?

異步利用ajax,行不同,很多廣告文件都是第三方的,在不同域名下,存在跨域問題,而且不能我們控制其代碼的輸出。在這種情況下我們想到了一個辦法就是重寫掉document.write,在js文件加載結(jié)束后再把document.write重寫回去。看代碼。

***版本無阻塞加載js廣告:

  1. function LoadADScript(url, container, callback){  
  2.         this.dw = document.write;  
  3.         this.url = url;  
  4.         this.containerObj = (typeof container == 'string'?document.getElementById(container):container);  
  5.         this.callback = callback || function(){};  
  6.     }  
  7.       
  8.     LoadADScript.prototype = {  
  9.         startLoad: function(){  
  10.             var script = document.createElement('script'),  
  11.                 _this = this;  
  12.               
  13.             if(script.readyState){ //IE  
  14.                 script.onreadystatechange = function(){  
  15.                 if (script.readyState == "loaded" || script.readyState == "complete"){  
  16.                     script.onreadystatechange = null;  
  17.                     _this.finished();  
  18.                 }  
  19.             };  
  20.             }else//Other  
  21.                 script.onload = function(){  
  22.                     _this.finished();  
  23.                 };  
  24.             }  
  25.               
  26.             document.write = function(ad){  
  27.                 var html = _this.containerObj.innerHTML;  
  28.                 _this.containerObj.innerHTML = html + ad;  
  29.             }  
  30.               
  31.             script.src = _this.url;  
  32.             script.type = 'text/javascript';  
  33.             document.getElementsByTagName('head')[0].appendChild(script);  
  34.         },  
  35.         finished: function(){  
  36.             document.write = this.dw;  
  37.             this.callback.apply();  
  38.         }  
  39.     }; 

頁面調(diào)用代碼:

  1. var loadScript = new LoadADScript('ad.js','msat-adwrap',function(){ console.log('msat-adwrap'); });  
  2. loadScript.startLoad();  
  3.       
  4. var loadScript = new LoadADScript('ad2.js','msat-adwrap',function(){ console.log('msat-adwrap2'); });  
  5. loadScript.startLoad();  
  6.       
  7. var loadScript = new LoadADScript('ad3.js','msat-adwrap',function(){ console.log('msat-adwrap3'); });  
  8. loadScript.startLoad(); 

廣告JS代碼

  1. //ad.js  
  2. document.write('<img src="http://images.cnblogs.com/logo_small.gif" alt="Logo">');  
  3.  
  4. //ad2.js  
  5. document.write('<img src="http://www.baidu.com/img/baidu_sylogo1.gif" width="270" height="129" usemap="#mp">');  
  6.  
  7. //ad3.js  
  8. document.write('<img alt="Google" height="95" id="hplogo" src="http://www.google.com/images/srpr/logo3w.png" width="275">'); 

***版本的問題是在多個文件調(diào)用的時候,會出現(xiàn)一些問題:

1. 由于文件加載的速度不一樣,導致可能有些先加載有些后加載,也就是無序的,而且很多時候我們需要的是有序的。比如我們需要先加載***屏的廣告。

2. 想有些廣告需要前置設(shè)置一些參數(shù)的,例如google adsense

 

為了解決這兩個問題好進一步修改成最終無阻塞加載js版本。

HTML頁面代碼:

  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3.     <head>  
  4.         <meta charset="utf-8" />  
  5.         <title>new_file</title>  
  6.         <script type="text/javascript" src="loadscript.js"></script>  
  7.     </head>  
  8. <body>  
  9. <div id = "msat-adwrap"></div>  
  10. <div id = "msat-adwrap2"></div>  
  11. <script type="text/javascript">  
  12.     loadScript.add({  
  13.         url:'ad.js',  
  14.         container: 'msat-adwrap',  
  15.         callback:function(){ console.log('msat-adwrap'); }  
  16.     }).add({  
  17.         url:'ad2.js',  
  18.         container: 'msat-adwrap2',  
  19.         callback:function(){ console.log('msat-adwrap2'); }  
  20.     }).add({//google adsense  
  21.         url:'http://pagead2.googlesyndication.com/pagead/show_ads.js',  
  22.         container: 'msat-adwrap',  
  23.         init: function(){  
  24.             google_ad_client = "ca-pub-2152294856721899";  
  25.             /* 250x250 rich */ 
  26.             google_ad_slot = "3929903770";  
  27.             google_ad_width = 250;  
  28.             google_ad_height = 250;  
  29.         },  
  30.         callback:function(){ console.log('msat-adwrap3'); }  
  31.     }).execute();  
  32. </script>  
  33. </body>  
  34. </html> 

loadscript.js源代碼

  1. /**  
  2.  * 無阻塞加載廣告  
  3.  * @author Arain.Yu  
  4.  */ 
  5.  
  6. var loadScript = ( function() {  
  7.     var adQueue = [], dw = document.write;  
  8.     //緩存js自身的document.write  
  9.  
  10.     function LoadADScript(url, container, init, callback) {  
  11.         this.url = url;  
  12.         this.containerObj = ( typeof container == 'string' ? document.getElementById(container) : container);  
  13.         this.init = init ||  
  14.         function() {  
  15.         };  
  16.  
  17.         this.callback = callback ||  
  18.         function() {  
  19.         };  
  20.  
  21.     }  
  22.  
  23.     LoadADScript.prototype = {  
  24.         startLoad : function() {  
  25.             var script = document.createElement('script'), _this = this;  
  26.  
  27.             _this.init.apply();  
  28.  
  29.             if(script.readyState) {//IE  
  30.                 script.onreadystatechange = function() {  
  31.                     if(script.readyState == "loaded" || script.readyState == "complete") {  
  32.                         script.onreadystatechange = null;  
  33.                         _this.startNext();  
  34.                     }  
  35.                 };  
  36.             } else {//Other  
  37.                 script.onload = function() {  
  38.                     _this.startNext();  
  39.                 };  
  40.             }  
  41.             //重寫document.write  
  42.             document.write = function(ad) {  
  43.                 var html = _this.containerObj.innerHTML;  
  44.                 _this.containerObj.innerHTML = html + ad;  
  45.             }  
  46.  
  47.             script.src = _this.url;  
  48.             script.type = 'text/javascript';  
  49.             document.getElementsByTagName('head')[0].appendChild(script);  
  50.         },  
  51.         finished : function() {  
  52.             //還原document.write  
  53.             document.write = this.dw;  
  54.         },  
  55.         startNext : function() {  
  56.             adQueue.shift();  
  57.             this.callback.apply();  
  58.             if(adQueue.length > 0) {  
  59.                 adQueue[0].startLoad();  
  60.             } else {  
  61.                 this.finished();  
  62.             }  
  63.         }  
  64.     };  
  65.  
  66.     return {  
  67.         add : function(adObj) {  
  68.             if(!adObj)  
  69.                 return;  
  70.  
  71.             adQueue.push(new LoadADScript(adObj.url, adObj.container, adObj.init, adObj.callback));  
  72.             return this;  
  73.         },  
  74.         execute : function() {  
  75.             if(adQueue.length > 0) {  
  76.                 adQueue[0].startLoad();  
  77.             }  
  78.         }  
  79.     };  
  80. }()); 

原文鏈接:http://www.cnblogs.com/hongcaomao/archive/2012/03/27/javascript_loadad.html

【編輯推薦】

  1. 5種JavaScript調(diào)用函數(shù)的方法
  2. 10件有關(guān)JavaScript讓人費解的事情
  3. 面向?qū)ο蟮腏avaScript基本知識指南大全
  4. 是時候開始使用JavaScript嚴格模式了
  5. 好用的高質(zhì)量JavaScript庫一覽
責任編輯:林師授 來源: 紅草帽的博客
相關(guān)推薦

2014-10-09 09:48:14

JavaScript

2014-11-05 10:31:28

2014-10-10 14:00:52

JavascriptHTML

2009-06-30 15:19:00

阻塞讀取遠程文件Java多線程

2010-01-07 17:03:31

千兆路由交換機

2010-01-11 09:30:39

千兆路由交換機技術(shù)

2021-06-04 18:14:15

阻塞非阻塞tcp

2013-08-22 10:39:03

VOD網(wǎng)絡(luò)建設(shè)VOD網(wǎng)絡(luò)華為

2015-04-30 12:34:05

WordPressNode.js

2016-12-01 09:24:56

Android

2011-07-28 14:29:45

JavaScript

2017-04-12 10:02:21

Java阻塞隊列原理分析

2024-12-20 07:30:00

重定向服務(wù)器端指令Next.js

2010-04-30 09:45:05

廣告木馬網(wǎng)絡(luò)安全卡巴斯基

2021-09-16 05:32:31

No.js 模塊加載器module1.js

2012-12-28 14:23:12

Android開發(fā)TextView

2018-04-18 14:38:14

廣告

2009-12-30 15:26:02

Silverlight

2011-04-25 11:05:10

javascript

2022-04-21 07:52:08

JS線程GUI渲染
點贊
收藏

51CTO技術(shù)棧公眾號

国产欧美一区二区精品仙草咪| 久久大逼视频| 精品国产99国产精品| 欧美日韩性生活片| 国产理论电影在线观看| 国产综合久久久久影院| 欧美激情视频网址| 精品人妻互换一区二区三区| 欧美性www| 午夜精品久久久久久久| 欧美在线播放一区| 亚洲国产av一区二区| 久久一区中文字幕| 日韩在线小视频| 午夜视频在线观看国产| 日韩电影精品| 色综合网站在线| 免费的一级黄色片| 日韩黄色影院| 久久久久99精品一区| 亚洲综合在线做性| 亚洲 欧美 日韩 在线| 亚洲欧美亚洲| 在线看福利67194| 亚洲国产精品自拍视频| 国产一区二区三区免费在线| 91久久精品一区二区| 日韩网站在线免费观看| 91吃瓜网在线观看| 久久色.com| 精品国产乱码久久久久久蜜柚| 91久久国语露脸精品国产高跟| 另类图片国产| 69视频在线播放| 欧美久久久久久久久久久久| 婷婷激情图片久久| 在线观看91久久久久久| 97超碰在线资源| 欧美一性一交| 欧美精品一区二区久久婷婷| 伦伦影院午夜理论片| 电影在线观看一区二区| 一本一道久久a久久精品综合蜜臀| www.在线观看av| av毛片在线看| 亚洲人精品午夜| 亚洲一区二三| 日本在线免费看| 国产精品久久久久久久久搜平片| 欧美日本韩国在线| 欧洲一级在线观看| 91亚洲精品久久久蜜桃| 精品无码久久久久久久动漫| 亚洲国产欧美另类| 国产91精品入口| 成人免费在线看片| 欧美77777| 99国产精品久久久久久久久久久| 国产日韩欧美精品| 天堂在线观看免费视频| caoporn国产一区二区| 国产视色精品亚洲一区二区| 乱精品一区字幕二区| 成人高清免费观看| 久久人人九九| 久草在线网址| 国产精品欧美一区喷水| 亚洲人成人77777线观看| 美女写真理伦片在线看| 亚洲美女精品一区| www.xxx麻豆| 九色porny丨国产首页在线| 欧美日韩加勒比精品一区| 六月丁香婷婷在线| 狂野欧美性猛交xxxx| 欧美美女喷水视频| 老熟女高潮一区二区三区| 久久精品色综合| 亚洲欧美在线一区| 超碰人人人人人人人| 欧美freesex交免费视频| 欧美精品激情在线| 中文字幕免费在线观看视频| 人人精品人人爱| 97久久人人超碰caoprom欧美| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 97se亚洲国产综合自在线不卡| 欧美日韩精品久久| a天堂中文在线官网在线| 亚洲国产精品一区二区久久| 老熟妇仑乱视频一区二区| www欧美在线观看| 精品成人佐山爱一区二区| 自拍偷拍中文字幕| 亚洲精品国产偷自在线观看| 高清欧美性猛交| wwwwww在线观看| 国产精选一区二区三区| 久久伊人一区| 顶级网黄在线播放| 色婷婷亚洲婷婷| 99热这里只有精品2| 精品在线播放| 色综合91久久精品中文字幕 | 精品视频网站| 欧美猛交免费看| 波多野结衣电车| 本田岬高潮一区二区三区| 亚洲第一导航| 国产在线精彩视频| 欧美顶级少妇做爰| 大又大又粗又硬又爽少妇毛片 | 99久久精品免费精品国产| 亚洲国产激情一区二区三区| a级片在线免费| 欧美日韩国产中文| 性欧美丰满熟妇xxxx性仙踪林| 亚洲澳门在线| 国产精品久久不能| 神宫寺奈绪一区二区三区| 国产精品乱码妇女bbbb| 欧美啪啪免费视频| 日本一区二区三区播放| 在线观看成人黄色| 久久久成人免费视频| 国产91露脸合集magnet| 中文字幕欧美人与畜| 春暖花开亚洲一区二区三区| 亚洲精品www久久久| 国产乱国产乱老熟300| 日本强好片久久久久久aaa| 久久久久一区二区三区| 婷婷色在线资源| 欧美精品乱码久久久久久按摩| 国产免费看av| 亚洲在线日韩| 激情伦成人综合小说| 51xtv成人影院| 91精品国产综合久久香蕉麻豆| 夫妇露脸对白88av| 日本在线观看不卡视频| 日本欧美精品久久久| 国产激情在线播放| 亚洲国产天堂网精品网站| 免费看一级一片| 国产剧情av麻豆香蕉精品| 成年人黄色在线观看| 免费成人高清在线视频| 最新国产精品拍自在线播放| 亚洲高清在线看| 欧美激情中文不卡| 另类小说色综合| 成人看的羞羞网站| 国产精品色午夜在线观看| 91社区在线| 欧美日韩国产一二三| 国产精品精品软件男同| 国产一区在线精品| 欧美狂野激情性xxxx在线观| 99re8这里有精品热视频8在线| 久久99视频免费| 日本xxxxwww| 富二代精品短视频| 中文字幕成人动漫| 久久99在线观看| 警花观音坐莲激情销魂小说| 中文字幕av一区二区三区四区| 久久久综合av| 视频一区二区三区国产| 色婷婷精品大视频在线蜜桃视频| 免费黄色片网站| 久久机这里只有精品| 欧美日韩午夜爽爽| 久久狠狠久久| 国产精品爽爽ⅴa在线观看| 免费日本一区二区三区视频| 欧美一级爆毛片| 日韩人妻无码一区二区三区99| 91亚洲资源网| 日日干夜夜操s8| 欧美精品日韩| 欧美一级日本a级v片| 日韩黄色三级| 久久久久久亚洲精品| 青青草在线免费观看| 欧美丝袜自拍制服另类| 九九在线观看视频| 91视视频在线观看入口直接观看www| 激情五月婷婷久久| 午夜日本精品| 日韩电影免费观看高清完整| 亚洲精品a区| 庆余年2免费日韩剧观看大牛| 69久久久久| 欧美精品一区二区三区蜜桃视频| 亚洲av综合一区| 亚洲成人动漫av| 三级影片在线观看| 91网上在线视频| 五月天六月丁香| 老牛影视一区二区三区| 9191国产视频| 日韩av密桃| 精品国产乱码久久久久久108| 日本一区二区三区中文字幕 | 中国老女人av| 国产99精品| 国内精品久久久久久久果冻传媒| 99riav视频一区二区| 午夜精品久久久久久久久久久久久 | 九热这里只有精品| 国产精品视频第一区| 91传媒理伦片在线观看| 精品一区二区免费在线观看| 岳毛多又紧做起爽| 影音先锋久久资源网| 亚洲午夜精品一区二区三区| 日韩精品导航| 国产精品一区二区不卡视频| 在线观看亚洲精品福利片| 国产成人鲁鲁免费视频a| 国产福利在线免费观看| 久色乳综合思思在线视频| yw视频在线观看| 亚洲免费视频在线观看| 欧日韩在线视频| 欧美va日韩va| www.av黄色| 欧美一三区三区四区免费在线看| 亚洲一级视频在线观看| 色综合夜色一区| 中文字幕av影院| 欧美日韩裸体免费视频| 国产午夜小视频| 亚洲综合激情另类小说区| 国产免费久久久久| 亚洲欧美在线视频观看| 国产大屁股喷水视频在线观看| 久久精品日产第一区二区三区高清版 | 国产中文一区二区三区| 日本中文字幕精品—区二区| 日韩国产精品大片| 久久久久久久久久福利| 母乳一区在线观看| 成人羞羞国产免费网站| 久久不射2019中文字幕| 黑森林福利视频导航| 男女精品视频| 已婚少妇美妙人妻系列| 日韩二区三区在线观看| 亚洲xxxx2d动漫1| 免费视频一区二区| 天堂视频免费看| 国产精品888| 国产精品果冻传媒| proumb性欧美在线观看| 国产男男chinese网站| 久久综合久色欧美综合狠狠| 国产精品无码久久久久一区二区| 国产亚洲成年网址在线观看| 懂色av蜜桃av| 亚洲三级视频在线观看| 四虎免费在线视频| 亚洲高清在线精品| 丰满少妇xoxoxo视频| 欧美色爱综合网| h狠狠躁死你h高h| 亚洲国产精品中文| 欧美色综合一区二区三区| 一色桃子一区二区| 里番在线观看网站| 九九精品视频在线| 在线天堂资源| 国产免费亚洲高清| 亚洲va欧美va人人爽成人影院| 国产一区二区三区色淫影院| 免费成人高清在线视频theav| 日韩欧美在线一区二区| 91超碰成人| 黄色网页免费在线观看| 日本亚洲一区二区| 美女又黄又免费的视频| 99视频有精品| 潮喷失禁大喷水aⅴ无码| 亚洲精选视频免费看| 国产女同在线观看| 欧美色中文字幕| 好吊视频一区二区三区| 亚洲欧美日韩天堂| 在线免费观看的av| 日韩av电影在线播放| 国产亚洲久久| 免费精品视频一区二区三区| 国产精品88久久久久久| 婷婷五月综合缴情在线视频| 日本免费在线视频不卡一不卡二| 自拍偷拍激情视频| 欧美激情一区二区三区不卡| 久久久久久久久久99| 在线亚洲欧美专区二区| 国产1区在线观看| 中文字幕少妇一区二区三区| 九色porny丨入口在线| 亚洲已满18点击进入在线看片| 蜜桃精品噜噜噜成人av| 99久久久精品视频| 麻豆精品视频在线| 大地资源二中文在线影视观看 | 91天天综合| 精品国产福利| 午夜精彩国产免费不卡不顿大片| 成人三级视频在线播放 | 欧美性xxxxxxxx| 欧美性受xxxx狂喷水| 久久精品99久久久香蕉| 日本不卡一二三| 国产青春久久久国产毛片| 久久久久亚洲| 污污网站在线观看视频| 91年精品国产| 中文字幕一区二区三区精品| 日韩一级完整毛片| 免费的黄网站在线观看| 国产精品成人品| 久久最新网址| 久久精品免费一区二区| 成人免费毛片app| 久草国产在线观看| 欧美一区二区三级| 久久精品视频免费看| 国产在线一区二区三区| 精品国产一级毛片| 成人在线观看a| 久久先锋影音av鲁色资源网| 日本一区二区三区四区五区| 日韩欧美国产综合在线一区二区三区| 欧美尤物美女在线| 国产情人节一区| 99热精品久久| 污污的网站免费| 亚洲欧洲av另类| 国产视频www| 久久亚洲综合国产精品99麻豆精品福利| 欧美aaaaaaaa| 爱爱爱视频网站| 国产一二精品视频| 青青草免费av| 亚洲第一精品夜夜躁人人爽| 91jq激情在线观看| 久久精品日产第一区二区三区乱码 | 91视频久久久| 在线视频中文亚洲| 国产一区二区三区四区五区3d| 日韩视频在线播放| 久久国产精品免费| 国产高潮国产高潮久久久91 | 欧美疯狂party性派对| 手机在线免费观看毛片| 国产精品成人一区二区艾草| 中文字幕一区二区在线视频| 久久久成人精品| 7m精品国产导航在线| 91丨porny丨探花| 久久久精品中文字幕麻豆发布| 日韩精品成人免费观看视频| 日韩在线观看视频免费| 成人综合日日夜夜| 国产欧美日韩小视频| 久久久久久久久99精品| 亚洲系列在线观看| 久久免费视频这里只有精品| 欧美高清视频看片在线观看| 老熟妇仑乱视频一区二区| 亚洲视频资源在线| 天堂中文在线官网| 国产精品白丝jk喷水视频一区| 亚洲影视一区| 久久无码人妻精品一区二区三区| 欧美在线影院一区二区| 巨大荫蒂视频欧美大片| 国内精品久久久久久久果冻传媒| 日韩高清不卡在线| 久久久久久久久97| 国产一区二区黑人欧美xxxx| 懂色av色香蕉一区二区蜜桃| 男人日女人视频网站| 国产清纯美女被跳蛋高潮一区二区久久w | 一本大道综合伊人精品热热| 暖暖日本在线观看| 精品一区二区日本| 久久se这里有精品| 国产成人在线免费观看视频| 深夜精品寂寞黄网站在线观看| 亚洲码欧美码一区二区三区| 国产最新免费视频| 亚洲欧美日韩中文播放 | 久久久成人av| 精品在线观看入口| 亚洲av无码一区东京热久久| 欧美综合一区二区三区|