現在的網頁越來越復雜,需要加載非常多的Javascript腳本來實現各種功能,但是這種情況可能會導致網頁加載過慢,用戶體驗不佳。為了解決這個問題,我們需要對Javascript的加載進行優化。而這時候,defer和async這兩個屬性就非常重要了。
defer和async都是針對加載Javascript腳本時的屬性,通過將腳本的加載延遲到合適的時刻來加快頁面的加載速度。但是它們二者之間還是有很大的差別的。
首先,defer的意思是“延遲”。它指定的Javascript腳本會延遲到頁面完全加載之后才執行。這種方式非常適合于處理那些不需要立即執行的腳本,比如用于統計頁面訪問量的代碼。以下是一個defer屬性的實例:
<script defer src="your-script.js"></script>
接下來我們看async。async與defer不同,它表示“異步地”. async指定的Javascript腳本不會阻礙頁面的正常加載,而是在下載完畢之后立即執行,這種方式適合于那些需要立即執行的代碼。假設我們要在header里加載一個異步腳本,那么我們可以這么寫:
<script async src="your-script.js"></script>
異步腳本很適合那些廣告或用戶跟蹤的代碼,因為用戶瀏覽頁面時不需要等待當前腳本的加載完畢,從而提高用戶體驗。
雖然defer和async都可以提高頁面加載速度,但是它們之間還是有一些要注意的地方。一個重要的事情就是,defer并不一定總是比async更優秀。如果你的Javascript代碼是需要在頁面渲染前執行的,那么你需要選擇async,即使這個頁面加載時間更慢。而如果web應用程序不需要在DOM樹構建完成之前執行腳本,又不希望影響頁面的渲染,那么defer是更好的選擇。
最后我們來看一個包含多個異步腳本的例子:
<script async src="script1.js"></script> <script async src="script2.js"></script> <script async src="script3.js"></script> <script async src="script4.js"></script> <script async src="script5.js"></script> <script async src="script6.js"></script>
這個例子中,所有的異步腳本會在它們下載完成后立即執行,而沒有使用任何延遲。就算這樣,異步腳本的加載依然可以提高整個頁面的加載速度,就算它們的下載經過時候比較均衡。
以上就是關于defer和async的簡單介紹。通過正確地使用它們,我們可以使我們的網站更快,用戶體驗更佳。