前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js怎么动态加载js文件(JavaScript性能优化篇)转

js怎么动态加载js文件(JavaScript性能优化篇)转

作者头像
stys35
发布2019-10-29 23:39:26
19.3K0
发布2019-10-29 23:39:26
举报
文章被收录于专栏:工作笔记精华工作笔记精华

下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度

  1. 【基本优化】 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完成页面渲染而不会造成页面堵塞问题,这个大家都懂的。

2. 【合并JS代码,尽可能少的使用script标签】 最常见的方式就是带代码写入一个js文件中,让页面只使用一次<script></script>标签来引入

3. 【无堵塞加载JS】 通过给script标签增加 defer属性或者是 async 属性来实现 <script src="file.js"?defer></script> 注解: asyncdefer不同之处是async加载完成后会自动执行脚本,defer加载完成后需要等待页面也加载完成才会执行代码

4.【动态创建script来加载-推荐】

代码语言:javascript
复制
function loadJS( url, callback ){

    var script = document.createElement('script'),

        fn = callback || function(){};

    script.type = 'text/javascript';

    

    //IE

    if(script.readyState){

        script.onreadystatechange = function(){

            if( script.readyState == 'loaded' || script.readyState == 'complete' ){

                script.onreadystatechange = null;

                fn();

            }

        };

    }else{

        //其他浏览器

        script.onload = function(){

            fn();

        };

    }

    script.src = url;

    document.getElementsByTagName('head')[0].appendChild(script);

}

 

//用法

loadJS('file.js',function(){

    alert(1);

});

 

5. 谷歌浏览器运行效果,script被动态创建在head中

6.建议大家可以封装成类库,单独引入。 该原理实现的也有很多不错的js类库可以使用,如LazyLoad.js,支持数组的形式引入,打开浏览器在network中可看到js是同步加载的

7.【XHR加载】 使用ajax方式加载 代码: var xhr = new XMLHttpRequest; xhr.open('get','file.js',true); xhr.onreadystatechange = function(){ ? ? if( xhr.readyState == 4 ){ ? ? ? ? if( xhr.status >=200 && xhr.status < 300 || xhr.status == 304 ){ ? ? ? ? ? ? var script = document.createElement('script'); ? ? ? ? ? ? script.type = 'text/javascript'; ? ? ? ? ? ? script.text = xhr.responseText; ? ? ? ? ? ? document.body.appendChild(script); ? ? ? ? } ? ? } }; xhr.send(null);

8.【总结】 最好的方式还是使用动态创建script的方式加载,当动态创建script,浏览器会分配一个线程去下载src指向的资源,多个script也是同步下载的

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com