一、什么是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/n/156607.html