首页前端开发HTMLJavascript 加载性能优化

Javascript 加载性能优化

时间2024-05-20 00:50:03发布访客分类HTML浏览102
导读:阻塞特性 浏览器对javascript的处理主要有2部分:下载和执行 下载在有些浏览器中是并行的,有些浏览器中是串行的,如IE8、Firefox3、Chrome2都是串行下载的 执行在所有浏览器中默认都是阻塞的,当js在执...

阻塞特性

浏览器对javascript的处理主要有2部分:下载和执行

  • 下载在有些浏览器中是并行的,有些浏览器中是串行的,如IE8、Firefox3、Chrome2都是串行下载的
  • 执行在所有浏览器中默认都是阻塞的,当js在执行时不会进行html解析等其它操作

阻塞特性:

javascript有个阻塞特性,当浏览器执行javascript代码时,不能同时做其它任何事情。无论当前javascript代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成。浏览器在下载和执行脚本是进出现阻塞的原因在于,脚本可能会改变页面或javascript的命名空间,它们对后面页面内容造成影响。

一、脚本位置

浏览器在碰到一个引入外部javascript文件的标签时会停下所有工作来下载并解析执行它,在这个过程中,页面渲染和用户交互完全被阻塞了。例:

  无标题文档        

页面的内容。。。

由于脚本的阻塞特性,页面会在3个javascript文件全部下载执行完成后,页面才会继续渲染,把脚本放在页面顶部会导致明显延迟,通常表现为显示空白页,用户无法浏览内容,也无法与页面交互。

ie8+、firefox 3.5+、safari4+、chrome2+都允许并行下载javascript文件,但是在下载的过程中仍然会阻塞图片等其它资源的下载。

由于脚本会阻塞页面其它资源的下载,因此推荐将javasrcipt尽量放到body标签的底部,以减少对整个页面下载的影响。

二、组织脚本

由于标签在下载时会阻塞页面的渲染,所以减少标签数量有助于改善这一情况。建议将多个javascript文件合并为一个,这样可以减少性能的消耗。同时也可以减少请求的数量。

参考:在服务端合并和压缩javascript和CSS文件

三、无阻塞脚本

1、延迟脚本

HTML4 为标签定义了一个defer 属性,它能使这段代码延迟执行,然而该属性只有IE4+支持,因此它不是一个理想的跨浏览器解决方案。声明了defer 属性的script会在DOM加载完成,window.onload 事件触发前被解析执行:

  script defer example    alert('defer');
     alert('script');
 window.onload = function(){
     alert('load');
 }
    

这段代码在支持defer属性的浏览器弹出顺序是:script、defer、load;不支持defer属性的浏览器弹出的顺序是defer、script、load。

2、动态脚本元素

function loadScript(url, callback) {
     var script = document.createElement('script') script.type = 'text/javascript';
 if (script.readyState) {
 //for ie script.onreadystatechange = function() {
 if (script.readyState == 'loaded' || script.readyState == 'complete') {
     script.onreadystatechange = null;
     callback();
 }
 }
    ;
 }
 else {
 //other browser script.onload = function() {
     callback();
 }
    ;
 }
     script.src = url;
     document.getElementsByTagName('head')[0].appendChild(script);
}
    

loadscript函数用法

 //单个文件 loadScript('file1.js', function(){
     alert('loaded!');
 }
    );
 //多个文件 loadScript('file1.js', function(){
 loadScript('file2.js',function(){
 loadScript('file3.js', function(){
     alert('all files loaded!');
 }
    );
 }
    );
 }
    );
    

这种技术的重点在于:无论何时启动下载,文件的下载和执行过程不会阻塞页面其它进程,你甚至可以将代码放在页面的head区域而不影响页面的其它部分(下载该文件的http链接除外)。

3、XMLHttpRequest 脚本注入

此技术会先创建一个XHR对象,然后用它下载javascript文件,最后创建动态的script元素将代码注入到页面中。

var xhr = new XMLHttpRequest();
    xhr.open('get', 'file1.js', true);
xhr.onreadystatechange = function() {
     if (xhr.status >
    = 200 &
    &
     xhr.status 

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Javascript 加载性能优化
本文地址: https://pptw.com/jishu/663798.html
HTML5开发学习大纲,新手必知 git学习笔记

游客 回复需填写必要信息