惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
罗磊的独立博客
U
Unit 42
I
InfoQ
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog
S
SegmentFault 最新的问题
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
月光博客
月光博客
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
博客园_首页
腾讯CDC
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
阮一峰的网络日志
阮一峰的网络日志
D
Docker
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
V
V2EX
Last Week in AI
Last Week in AI
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
IT之家
IT之家
L
LangChain Blog
WordPress大学
WordPress大学
Y
Y Combinator Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享

博客园 - 匆匆

Grunt常见问题 一个小型的类库 JavaScript 设计模式 HTML5常见问题 改版提示,新手指南 前端开发规范文档 常用正则表达式 JavaScript String 对象扩展方法 JavaScript String 对象常用方法 JavaScript Array 对象扩展方法 JavaScript Array 对象常用方法 JavaScript 常见基础问题二 JavaScript 常见基础问题一 跨浏览器的本地存储解决方案 页面中添加事件、阻止事件传播、事件删除 常用CSS书写技巧 Gridview用法大总结(牛年珍藏版) 总结一些常用功能源码 JS类库
JavaScript与网页性能
匆匆 · 2012-03-28 · via 博客园 - 匆匆

JavaScript的加载和运行,对网页的性能有至关重要的作用。通常我们会采取以下方式来优化脚本:
1、将脚本放在页面底部。
JavaScript有阻塞的特征,当JavaScript运行时其他的事情不能被浏览器处理。大部分老版本浏览器是不允许JavaScript并行下载的。虽然IE8,Firefox3.5,Safari4,Chrome2允许并行下载JavaScript文件,但仍然要阻塞其他资源的下载过程,例如图片。即使脚本之间的下载过程互不阻塞,页面仍然要等待所有JavaScript代码下载并执行完成后才能继续渲染。因此,将<script>标签放在尽可能接近<body>标签底部的位置,可以减少对整个页面下载的影响。
2、减少<script>标签数。
每当页面解析碰到一个<script>标签时,紧接着有一段时间用于代码执行。最小这些延迟时间可以改善页面的整体性能。
3、尽量减少引用外部脚本文件的数量和体积。
可以将多个JavaScript脚本压缩合并,以减少HTTP请求数。

以上只是提高性能的第一步,当我们的JavaScript变得很大,产生一次HTTP请求,也有可能会锁定浏览器一大段时间。为了避开这种情况,我们可以逐步向页面添加JavaScript。这意味着等页面加载完之后,再下载源码。以下方法可以解决:
1、延期脚本Deferred Scripts(defer属性只被IE4+、Firefox3.5+支持,不是一个很理想的跨浏览器解决方案)。一个带有defer属性的<script>标签可以放在文档的任何位置。对应的文件将在<script>被解析时启动下载,但代码不会被执行,直到DOM加载完(在onload事件之前执行)
例如:<script type="text/javascript" src="util.js" defer></script>
2、动态脚本元素,DOM允许使用JavaScript动态创建HTML的几乎全部文档内容。因此,<script>元素也可以非常容易地通过标准的DOM函数来创建。这样做的好处是,无论在何处启动下载,文件的下载和运行都不会阻塞其他页面处理过程。

<script type="text/javascript">
    var JsLoader = {
        load: function (url, callback) {
            var script = document.createElement("script");
            script.setAttribute("charset", "utf-8");
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", url);
            document.getElementsByTagName("head")[0].appendChild(script);
            if (Browser.ie) {
                script.onreadystatechange = function () {
                    if (this.readyState == "loaded" || this.readyState == "complete") {
                        script.onreadystatechange = null; 
                        callback();
                    }
                };
            } else if (Browser.mozilla) {
                script.onload = function () {
                    callback();
                };
            } else {
                callback();
            }
        }
    };
    JsLoader.load("http://weyoo.cn/js/util.js", function () {
        JsLoader.load("http://weyoo.cn/js/jquery-1.7.1.min.js", function () {
            JsLoader.load("http://weyoo.cn/js/baseModel.js", function () {
                JsLoader.load("http://weyoo.cn/js/commonToolFn.js", function () {
                    alert("串联保证加载顺序哦");
                });
            });
        });
    });
</script>

3、XMLHttpRequest Script Injection  XHR脚本注入