一、什麼是whenComplete
當我們在網站上引入外部資源時(如:JS、CSS文件等),這些資源需要從遠程服務器上下載到我們的瀏覽器中。在這個過程中,我們需要確保這些資源已經完全加載完畢,才能執行相關的JavaScript代碼,否則會出現頁面卡頓、操作失效等問題。
而當用戶網絡環境較差時,這些外部資源的加載時間會更加漫長,這就需要我們使用一種方式來確保資源加載結束後再執行JavaScript代碼。here comes the hero-whenComplete。
當用whenComplete時,可以通過一種方法(回調)來確保這些資源已經被加載完畢,從而確保我們的JavaScript代碼不會影響網站的性能,同時也不會出現相關的錯誤。
二、如何使用whenComplete
為了使用whenComplete,我們需要下載這個庫並在你的頁面中引入該文件,以確保你可以訪問當中提供的API。現在,我們可以嘗試在代碼中使用whenComplete。
whenComplete("http://example.com/js/main.js", function () {
console.log('main.js finished loading!'); // 當 main.js 完成加載後執行此處代碼
});
在上面的例子中,我們使用了whenComplete API,當我們的main.js文件加載完畢時,console.log將會輸出一個消息’ main.js finished loading!’,從而告訴我們已經可以安全地執行一些需要JS文件的相關代碼了。這個例子很簡單,但是它顯示了whenComplete API的工作方式。我們只需要提供需要加載的文件的路徑和一個回調函數,在資源加載完畢時,函數將會被執行。
三、whenComplete和jQuery的結合
當大多數人思考jQuery時,他們通常會將其視為一種JavaScript庫,可以幫助我們輕鬆地編寫跨瀏覽器代碼。但是,jQuery不僅僅是一個幫助我們編寫JavaScript代碼的工具,它還有一些有用的API,可以幫助我們優化頁面的性能。
在這裡,我們將介紹將whenComplete與jQuery的Code Snippet相結合的方法,以實現資源加載完成後執行相關代碼的目的。
$.when(
$.getScript( "http://example.com/js/main.js" ),
$.getScript( "http://example.com/js/plugins.js" ),
$.Deferred(function( deferred ){
$( deferred.resolve );
})
).done(function(){
console.log('All scripts finished loading!');
});
在上面的代碼塊中,我們使用了jQuery的$.when()和$.getScript()來並行加載多個文件。當所有文件都加載完畢後,我們會向$.Deferred() API對象發出「resolve」消息。最後,我們在.done()中執行代碼。此僅是whenComplete與jQuery的Code Snippet中可用的選項之一,當然還有其他用法,可以根據需要進行擴展。
四、當資源已經存在時仍使用whenComplete
如果我們的網站本身已經加載了所需的文件,並且我們的代碼不想受到whenComplete限制,那麼在使用whenComplete之前,我們可以先檢查所需資源是否已經存在於頁面中。
var jsFile = 'http://example.com/js/main.js';
if (document.querySelector('script[src="' + jsFile + '"]')) {
console.log('main.js is already present.');
} else {
whenComplete(jsFile, function(){
console.log('main.js finished loading!');
});
}
在上面的代碼塊中,我們使用了document.querySelector() API來檢查頁面是否還需加載JavaScript文件。如果頁面中已經存在我們需要的資源,那麼我們就可以繞過whenComplete,並且提示用戶相關的信息。同時,如果資源還沒加載,我們使用whenComplete API再次確保插件已經加載完畢,從而安全地執行我們需要的代碼。
五、總結
通過使用whenComplete API,我們可以確保我們的網頁JavaScript代碼不會影響頁面性能,並且可以在插件加載完畢後執行相關的JavaScript代碼。除此之外,我們還學會了如何使用當中的回調函數,如何結合jQuery和檢查資源是否已經存在於當前頁面就行了防重複加載。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/156607.html