当<script>标记是一个HTML文档流,浏览器必须停止渲染并等待脚本文件下载并执行,然后再继续(例子)。通过JavaScript创建一个新的<script>标签可以避免这个问题,因为它是出了文档流,所以脚本文件被下载并执行,无需等待。其结果是:动态加载JavaScript文件可以让你的网页渲染速度更快,从而提高性能。动态加载JavaScript文件可以让你的网页渲染速度更快,从而提高性能。

最好的方法
史蒂夫在他的博客和他的书已探讨几种不同的方式来加载JavaScript而不阻塞。在思考它和试验之后,我得出的结论是,用一个为JavaScript的加载而不阻塞只是一个最佳实践方法:创建两个JavaScript文件。第一只包含必要的动态加载JavaScript代码,第二个包含其他一切必要的交互性对page.Include的第一个JavaScript文件与<script>标签在页面的底部,只是里面的初始水平</ BODY>。创建调用该函数来加载第二个JavaScript文件,并包含任何额外的初始化code.That的是第二<script>标签!真的没有必要做任何事情。关键外卖是仅具有两个JavaScript和使第一个尽可能小。例如,第一个文件只包含一个函数:

function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";     if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }     script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}
代码量很小,这样会让您的启动载入加载更快实际代码最终看起来像这样:
<script type="text/javascript" src="http://your.cdn.com/first.js"></script>
<script type="text/javascript">
loadScript("http://your.cdn.com/second.js", function(){
    //initialization code
});
</script>

关键,这整个技术是只有两个JavaScript文件,所以第二个包含的需要初始化页面的一切。如果你的页面需要两个以上的文件?那么你应该串联您的文件一起要么在构建时(使用类似链轮),或在运行时(使用类似mod_concat或组合处理程序)。不应该有,当你的页面需要超过这两个JavaScript文件到正确的初始化时间。每个额外的HTTP请求有开销,然后你就不需要担心顺序安排的下载,使代码在正确的顺序执行。通过刚才有两个文件,可以消除大量的关注点在哪个文件被下载并执行第一次以及消除不必要的HTTP请求。

本文链接:http://www.jfox.info/%e5%8a%a0%e8%bd%bd%e5%a4%96%e9%83%a8javascript%e7%9a%84%e6%9c%80%e4%bd%b3%e6%96%b9%e6%b3%95, 转载请保留.

加载外部JavaScript的最佳方法的更多相关文章

  1. 使用js加载器动态加载外部Javascript文件

    原文:http://www.cnblogs.com/xdp-gacl/p/3927417.html 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var ...

  2. JavaScript学习总结(十九)——使用js加载器动态加载外部Javascript文件

    今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js 1 var MiniSite=new Object(); 2 /** 3 * 判断浏览器 4 */ 5 M ...

  3. 【Win 10 应用开发】加载外部的 srt 字幕

    据说系统内置的多媒体功能支持 srt. ssa 等字幕,老周测试过几种格式的字幕均能加载. SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写. 第一行是字幕的编号,应该是从1 ...

  4. JavaScript实现判断图片是否加载完成的3种方法整理

    JavaScript实现判断图片是否加载完成的3种方法整理 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示 ...

  5. VUE页面实现加载外部HTML方法

    前后端分离,后端提供了接口.但有一部分数据,比较产品说明文件,是存在其他的服务器上的.所以,在页面显示的时候,如果以页面内嵌的形式显示这个说明文件.需要搞点事情以达到想要的效果.本文主要和大家介绍VU ...

  6. WebGL three.js学习笔记 加载外部模型以及Tween.js动画

    WebGL three.js学习笔记 加载外部模型以及Tween.js动画 本文的程序实现了加载外部stl格式的模型,以及学习了如何把加载的模型变为一个粒子系统,并使用Tween.js对该粒子系统进行 ...

  7. Error #2044: 未处理的 IOErrorEvent:。 text=Error #2035: 找不到 URL这是flash加载外部资源时有时会遇到的问题,对于此问题解决如下

    导致这个错误的主要原因是未添加IOErrorEvent事件监听,或者添加了监听,但是加载时使用了unload() 参考资料: http://blog.csdn.net/chjh0540237/arti ...

  8. FusionCharts简单教程(六)------加载外部Logo

    一.加载外部文件Logo       在使用FusionCharts时,我们可能需要在加载图像的时候需要在图表中显示标识.图片等等.这里我们可以使用logoURL属性来实现.如: <chart ...

  9. 浏览器加载外部js 的顺序,以及处理顺序。

    问题, 有事候按F12打开 google的调试台后,查看network下面加载过来的资源是, 有些资源的状态处于 pending.. 个人理解: 浏览器是可以同时开启多个http 请求去加载外部的资源 ...

随机推荐

  1. cobbler部署机器的默认密码

    修改cobbler的默认密码: 用 openssl 生成一串密码后加入到 cobbler 的配置文件(/etc/cobbler/settings)里,替换 default_password_crypt ...

  2. Segment Tree Build I & II

    Segment Tree Build I The structure of Segment Tree is a binary tree which each node has two attribut ...

  3. sina第三方登录

    Sina  第三方登录 添加网站的流程如下: Sina接入主要审核点: • 1.网站可正常访问:若页面无法打开,或加载时间过长,或未建设完成的网站.或空白网站将无法通过审核: • 2.站点已部署微连接 ...

  4. Java for LeetCode 144 Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

  5. 【JAVA、C++】LeetCode 011 Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...

  6. codeforces 478A.Initial Bet 解题报告

    题目链接:http://codeforces.com/problemset/problem/478/A 题目意思:简单来说,就是初始化的时候,五个人的值都是 b,现在给出每个人最终的状态:就是经过互相 ...

  7. WebService之CXF框架

    本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具 1.为什么要用到ant这个工具呢? Ant做为一种 ...

  8. IOS8 空项目全屏

    打开工程项目属性文件,点击Target下面的第一项,再选择General选项卡,向下找到Use Asset Catalog按钮.点击它. 弹出对话框,点击Migrate即可.这样,应用尺寸就能根据屏幕 ...

  9. 【HTML5】Web存储

    HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前,这些都是由 coo ...

  10. Android 下载文件 显示进度条

    加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...