自覺自己基礎不紮實,不應該心猿意馬,所以很久沒有更新效能優化專欄,回顧總結了一段時間後再來一發吧~在學習前端開發的最開始,就可能有人告訴你,在 body 的末尾再引入 script 標籤(收到依賴的jquery更適合放在前面),書寫js**就提高效率,這到底是為什麼呢?
先看乙個不好的例子:
>
class
="page"
>
type
="button"
style
="color
:red
" disabled
>
src=
"./example.js"
>
script
>
title
=" a picture"
>
div>
>
script
>
body
>
由於逐步呈現的策略,當 script 橫插到body中間,我們可能會看到這樣的場景:input顯示在螢幕上,再微微的卡頓後 img 才被渲染出來。
因此我們可得到乙個粗略的結論,script 插入越晚,頁面上的可見內容更能快速呈現出來。
(鑑於這個限制在http2被打破了,,,emmm,這段內容見供參考~)
現在的 web 頁面很少有純粹的靜態頁面了,一旦有動態內容,為了避免錯誤,瀏覽器都會等待。
目前位置,我們知道了兩點:
故我們應當把大部分指令碼放在靠後的位置,but 對於會影響頁面內容的指令碼還是應該放的靠前一點。這時候我們可以採用非同步的方式,晚一點引入不是那麼緊急的指令碼。
defer
src=
"js/example1.js"
>
script
>
async
src=
"js/example2.js"
>
script
>
domcontentloaded : 頁面(document)已經解析完成,頁面中的dom元素已經可用。但是頁面中引用的、subframe可能還沒有載入完;onload:頁面的所有資源都載入完畢(包括)。瀏覽器的載入進度在這時才停止。這個方法依賴於 js **操作,可以通過 ajax 獲取遠在伺服器端的**,然後通過 eval 執行。
axios.
get(
'/examplejs').
then
( res =>
)
當然也可以直接建立乙個 script 標籤,裡面寫入要執行的**:
let s = document.
createelement
('script');
s.innerhtml =
`console.log("hello")`
;document.body.
(s);
js的非同步載入
今天被問到了如何非同步載入js,聽到這句話我內心是拒絕的,啥玩意兒?js也要用非同步載入不是引入了就行了,也沒見速度變慢啊。後來仔細查詢了一下,才發現自己原來還是太年輕了。因為之前自己寫的載入的都是本地js,或者是並沒有複雜邏輯運算的js,導致看不出來太大問題,查完資料後,要將不會的記在這裡,當作學...
JS 非同步載入
參考學習 有關promise的學習 如果 async async 指令碼相對於頁面的其餘部分非同步地執行 當頁面繼續進行解析時,指令碼將被執行 如果不使用 async 且defer defer 指令碼將在頁面完成解析時執行 如果既不使用 async 也不使用 defer 在瀏覽器繼續解析頁面之前,立...
js的阻塞載入 延遲載入和非同步載入
1.阻塞載入 平常預設使用的都是阻塞載入。例如 阻塞載入會阻止瀏覽器的後續處理,停止了後續的檔案的解析,執行,如影象的渲染。為了這樣可以讓頁面先顯示出來,我們通常會把要載入的js放到body結束標籤之前,使得js可在頁面最後載入,儘量減少阻塞頁面的渲染。2.延遲載入 延遲載入是指令碼延遲到文件被完全...