国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

為什么要避免使用 "document.write()"

xiangzhihong / 2524人閱讀

摘要:每當(dāng)解析器遇到腳本時(shí),它必須停止并執(zhí)行它,然后才能繼續(xù)解析。如果腳本動態(tài)地注入另一個(gè)腳本,解析器將被迫等待更長時(shí)間才能下載資源,這可能會導(dǎo)致一個(gè)或多個(gè)網(wǎng)絡(luò)往返并延遲首次渲染頁面的時(shí)間,導(dǎo)致頁面無法加載或花費(fèi)的時(shí)間長于用戶放棄。

本文是技術(shù)圈 google 瀏覽器前端新特性播報(bào)的推送,歡迎大家加入

為什么要避免使用 document.write()

最近我們發(fā)現(xiàn)如果我們在頁面中使用了document.wirte(),那么在 chrome 的開發(fā)者控制臺會出現(xiàn)下面的警告信息

(index):34 A Parser-blocking, cross-origin script, 
https://paul.kinlan.me/ad-inject.js, is invoked via document.write(). 
This may be blocked by the browser if the device has poor network connectivity.

為啥要做這個(gè)提示呢,對于在2G,3G 或者是慢 wifi 環(huán)境下面,使用document.write()動態(tài)加載資源會讓頁面的展現(xiàn)慢10秒以上,瀏覽器可以呈現(xiàn)頁面之前,必須通過解析HTML標(biāo)記來構(gòu)建DOM樹。每當(dāng)解析器遇到腳本時(shí),它必須停止并執(zhí)行它,然后才能繼續(xù)解析HTML。如果腳本動態(tài)地注入另一個(gè)腳本,解析器將被迫等待更長時(shí)間才能下載資源,這可能會導(dǎo)致一個(gè)或多個(gè)網(wǎng)絡(luò)往返并延遲首次渲染頁面的時(shí)間,導(dǎo)致頁面無法加載或花費(fèi)的時(shí)間長于用戶放棄。根據(jù)Chrome中的設(shè)備,我們了解到,通過第三方腳本插入的document.write()頁面的速度通常比2G的其他頁面載入速度慢兩倍。

去除document.write的效果

chrome 開發(fā)者收集了28天chrome瀏覽器使用者的2G瀏覽數(shù)據(jù),從中發(fā)現(xiàn)7.6%的2G加載頁面中都包含了通過document.write()寫入頁面的跨網(wǎng)站,并且會中斷瀏覽器解析的腳本。通過把這些加載腳本進(jìn)行攔截加載,我們看到了以下的改進(jìn):

頁面加載到達(dá)first contentful paint(視覺上讓用戶感覺正在加載的狀態(tài))t的狀態(tài)的數(shù)量增加10%,達(dá)到完全解析狀態(tài)的頁面數(shù)量增加25%,減少10%由于需要刷新頁面帶來的用戶失望

到達(dá)first contentful paint的時(shí)間減少了21%(加快速度大于1秒)

解析頁面所需的時(shí)間減少了38%,差不多加快了6秒,大大減少了向用戶展示內(nèi)容的時(shí)間

chrome 瀏覽器對于document.write的策略

針對以上的測試數(shù)據(jù),chrome 從 55版本開始,chrome 瀏覽器對用戶使用的document.write()進(jìn)行干預(yù),如果符合以下所有的情況,頁面

?

更加全面的告警

上面兩種方式結(jié)合之后可以對影響的用戶量有一個(gè)初步的判斷,如果要做精確的判斷,可以檢查 HTTP 頭部:
當(dāng)插入的腳本document.write被阻止時(shí),Chrome會將以下標(biāo)頭發(fā)送到所請求的資源:

Intervention: ;

當(dāng)document.write發(fā)現(xiàn)插入腳本時(shí),可能會在不同情況下被阻止,Chrome可能會發(fā)送:

Intervention: ; level="warning"

干預(yù)頭將作為腳本的GET請求的一部分發(fā)送(在實(shí)際干預(yù)的情況下異步)。

替換方案

由于document.write會減慢頁面的加載,可以考慮使用appendChild等 api 將元素插入頁面中,不過這兩者有以下的區(qū)別

document.write的參數(shù)是一個(gè) html 字符串,appendChild是一個(gè)Node對象

如果有多個(gè)document.write寫入 script 標(biāo)簽,標(biāo)簽與標(biāo)簽之間的加載是同步的,也就是說,標(biāo)簽的加載順序會和document.write的執(zhí)行順序相同;而使用appendChild插入多個(gè)sciprt標(biāo)簽時(shí),標(biāo)簽加載的順序是不確定的,先加載完成的先執(zhí)行,因此通過appendChild插入script標(biāo)簽時(shí),要注意是否需要對加載的順序進(jìn)行控制,可以通過script.onload進(jìn)行順序回調(diào)插入

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106999.html

相關(guān)文章

  • Html/Css/Jquery知識點(diǎn)集錦

    摘要:首先,巧妙的使用這一標(biāo)記,將游覽器從所有情況中分離出來。接著,再次使用將和分離開來,這樣已經(jīng)獨(dú)立識別。元素不能用作語義用途以外的其他目的。Html1、Html5有哪些新特性,移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)別HTML和HTML5?HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。拖拽釋放(Drag and drop) ...

    shiweifu 評論0 收藏0
  • 用CSS3 transition屬性實(shí)現(xiàn)淡入淡出輪播圖

    摘要:首先,巧妙的使用這一標(biāo)記,將游覽器從所有情況中分離出來。元素不能用作語義用途以外的其他目的。空白段落元素并非用于跳行。當(dāng)瀏覽器支持時(shí),它們會自動地呈現(xiàn)出來并發(fā)揮作用。Html1、Html5有哪些新特性,移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)別HTML和HTML5?HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。拖拽釋放(D...

    姘存按 評論0 收藏0
  • JavaScript Puzzlers! 解惑(一):什么 ["1", &qu

    摘要:第一題為的返回值。返回值其中的每個(gè)元素均為關(guān)聯(lián)的原始數(shù)組元素的回調(diào)函數(shù)返回值的新數(shù)組。修改數(shù)組對象數(shù)組對象可由回調(diào)函數(shù)修改。方法啟動后的條件元素是否傳遞給回調(diào)函數(shù)在數(shù)組的原始長度之外添加元素。 JavaScript Puzzlers! 被稱為 javascript 界的專業(yè)八級測驗(yàn),感興趣的 jser 可以去試試。 我試了一下, 36 道題只做對了 19 道, 算下來正確率為 53%,...

    k00baa 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<