使用动态脚本元素加载js

大概了解

这种技术通过动态创建<script>元素来加载js,重点在于无论何时启动下载,文件的下载和执行过程不会阻塞页面其他进程。
使用动态脚本元素下载文件时,返回的代码通常会立即执行(Firefox和Opera除外,它们等待此前所有动态脚本节点执行完毕)。在该脚本文件包含其他脚本调用的接口时,就会带来问题,所以你必须跟踪并确保脚本下载完成并准备就绪。

代码

<!doctype html>
    <head>
        <script>
            function loadJs(url,callback){
                var script = document.createElement("script");
                script.type = "text/javascript";

                if(script.readyState){//IE触发事件,通常只检测两种值,loaded,complete
                    script.onreadystatechange == function(){
                        if(script.readyState == "loaded" || script.readyState == "complete"){
                            script.onreadystatechange = null;//防止事件被处理两次
                            callback();
                        }
                    }
                }else{//其他浏览器在<script>元素接受完成时触发load事件
                    script.onload = function() {
                        callback();
                    }
                }

                script.src = url;
                document.getElementsByTagName('head')[0].appendChild(script);
            } 

            loadJs("test1.js",function() {
                loadJs("test2.js",function() {
                alert("all js are loaded");
            })
            })
        </script>
    </head>
    <body>
        <p>加载js</p>
    </body>
</html>

上述代码会先加载test1.js,然后加载test2.js。如果多个js下载顺序很重要,更好的做法是将他们按正确的顺序合并成一个文件。

小结(核心)

减少js对性能的影响,有如下方法

  1. </body>闭合标签之前,将所有<script>放在页面底部,确保脚本执行前页面完成渲染
  2. 合并脚本,<script>越少,加载越快
  3. 使用动态脚本元素加载js
  4. 使用<script>标签的defer属性(仅适用于IE和Firefox3.5+)
  5. 使用xhr对象加载js并注入页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值