JS的非同步載入

2021-09-12 16:53:34 字數 1596 閱讀 2726

自覺自己基礎不紮實,不應該心猿意馬,所以很久沒有更新效能優化專欄,回顧總結了一段時間後再來一發吧~

在學習前端開發的最開始,就可能有人告訴你,在 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.延遲載入 延遲載入是指令碼延遲到文件被完全...