最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Script的加載方法小結(jié)

 更新時間:2011年01月12日 00:27:47   作者:  
對動態(tài)加載腳本,需要重點關(guān)注的一個問題是,所動態(tài)加載的JS腳本的接口依賴問題。

1.靜態(tài)加載
CSS,圖片資源文件在頁面渲染過程中可以并行下載,不會阻塞。在IE8,F(xiàn)F下,也可以支持JS的并行下載。盡管頁面的JS下載加速了,但是JS對頁面渲染的阻塞還是依然存在的,只有JS加載完畢了,頁面的剩余部分才能繼續(xù)渲染。放在Head部分的Script是最為惡劣的,因為對頁面來說,Head部分是require的,是后部分所必須的,Head部分不加載完畢,Body部分不會開始解析,Body解析之前,頁面是空白的。靜態(tài)Script放到頁面的哪部分來說都是阻塞,從瀏覽器實現(xiàn)的角度來說很好理解,因為JS代碼中完全有可能修改頁面元素影響Dom結(jié)構(gòu)。因為瀏覽器對JS行為的不可預(yù)知,所以只好等前面的Script加載完畢后再繼續(xù)渲染。所以最佳實踐往往是說將Script放到頁面底部</body>附近。
JS加載對前臺性能的影響,雅虎優(yōu)化原則之一是減少Http請求數(shù),壓縮JS,合并JS,減少JS數(shù)。
若是業(yè)務(wù)上有很多獨立模塊化的JS需要加載,可以考慮在線打包的方案。

2。延遲加載
W3C標(biāo)準(zhǔn)HTML4.01給Script標(biāo)簽定義了一個defer屬性,指明該JS不會改變Dom的content,瀏覽器可繼續(xù)解析和渲染,無需阻塞在該Script。
http://www.w3.org/TR/1999/REC-html401-19991224/interact/scripts.html

 defer
但部分瀏覽器并不支持該屬性。所以它不是個很好的跨瀏覽器解決方案。

3.動態(tài)加載


復(fù)制代碼 代碼如下:

<script type="text/javascript">
var js = document.createElement("script");
js.src = '**.js';
document.getElementsByTagName("head")[0].appendChild(js);
</script>

這段代碼創(chuàng)建了script標(biāo)簽,并插入這條標(biāo)簽到文檔中。關(guān)鍵在于,這個腳本的加載時異步的,不會影響頁面渲染的進程,不會阻塞頁面內(nèi)容的展示。這樣的方式盡管不會阻塞頁面資源的加載,但卻可能會阻塞其他的script腳本,不同瀏覽器在這點上的表現(xiàn)是有非常大的差異的,參看這篇文章動態(tài)引入的外部 JS 文件在各瀏覽器中的加載順序不一致
有兩點非常突出,

1.同樣的動態(tài)加載代碼,不同瀏覽器對動態(tài)加載進來的js,是否阻塞下條Script標(biāo)簽的表現(xiàn)是不一樣的

3

2.實現(xiàn)動態(tài)加載的那段代碼順序不同,對同一個瀏覽器來說,結(jié)果可能是非常迥異的,
如:

1 2

代碼順序的調(diào)換,IE的表現(xiàn)就不一樣

所以,對動態(tài)加載腳本,需要重點關(guān)注的一個問題是,所動態(tài)加載的JS腳本的接口依賴問題。這個問題的解決方案也不復(fù)雜,既根據(jù)實現(xiàn)業(yè)務(wù)的需要跟蹤所加載腳本的加載狀態(tài)。加載狀態(tài)的判斷在IE下用readyState屬性,非IE瀏覽器支持,腳本加載完成后的onload方法的調(diào)用。

業(yè)界優(yōu)秀的延遲加載庫

Ryan Grove 的LazeLoad https://github.com/rgrove/lazyload
Kyle Simpson 的 LABjs http://labjs.com/

相關(guān)文章

最新評論

周口市| 余姚市| 扶余县| 曲阳县| 安岳县| 霍林郭勒市| 蓝田县| 武义县| 荔浦县| 门头沟区| 瑞金市| 隆化县| 远安县| 璧山县| 米泉市| 永清县| 河津市| 报价| 陇西县| 苏尼特左旗| 藁城市| 色达县| 江口县| 彝良县| 手游| 海城市| 安康市| 秦安县| 吉木乃县| 汉阴县| 巴南区| 鱼台县| 尚志市| 定日县| 岳池县| 临朐县| 桂阳县| 墨脱县| 盐山县| 常州市| 双牌县|