构建高性能JavaScript应用

前端性能优化准则:

一、减少http请求。

措施:合并小图片,css控制背景图。合并CSS,合并JS

二、使用CDN(Content Deliver Network 内容分发网络)发布静态资源。

三、启用压缩组件。

response header:Content-encoding

request header:Accept-encoding

四、添加Expires响应头。

response header:Expires(指定过期时间)

缺点:1.需要指定具体的过期日期,时间到后需要重新指定。2.服务端客户端时钟必须一致。

http 1.1 引入Cache-Control:max-age 指定秒数解决该问题。

五、head 引入样式文件。

解决:白屏,闪屏问题。浏览器加载无样式DOM有两种策略:

1、先渲染无样式dom树,发现样式文件后重新加载,引起闪屏问题。

2、延迟渲染dom树直到发现样式文件,加载完样式文件后再加载dom树,引起白屏问题。

六、底部引入脚本文件。

早期浏览器(IE67),JS文件的下载会禁用浏览器的并行下载特性(http 1.1 规定浏览器可同时发起2个http链接),IE8以后浏览器可以并行下载多个脚本,但是由于并发的http连接数是有限的,所以依然会阻塞其它资源的下载,原因:

1、浏览器无法判断脚本中是否有document.write改变dom结构。

2、浏览器为了保证脚本的执行顺序。

脚本的并行下载是必要的,但必须保证执行顺序,保证执行顺序的措施:

1、IE浏览器的defer属性

2、动态创建script dom,并同时绑定onload,onreadystatechange(IE浏览器不支持onload,需要同时判断script dom的readyState的是是否等于loaded或者complate,有时候状态值会不经过loaded状态直接变为complete,而有时候变为loaded后并不切换到complate)事件。

3、document.write 脚本

七、精简CSS 脚本。

八、删除重复脚本。

九、减少DNS查询。

技巧:使用link标签的ref="dns-prefetch"类型,用于提前dns解析和缓存域名主机信息,以确保将来再请求同域名的资源时能够节省dns查找时间。例如淘宝主页:

十、自定义Etag。

Etag的格式与web容器是耦合的,站点在服务器集群(多种web容器)下导致Etag值不一致,命中率很低。两种方案:

1、禁用Etag

2、自定义Etag

十一、缓存Ajax

下面这篇文章提供了不一样的思路来优化浏览器对静态资源的加载,比如利用LocalStorage缓存文件,link标签预加载资源等:

http://www.infoq.com/cn/articles/browser-resource-loading-optimization?utm_source=infoq&utm_medium=popular_links_homepage

非阻塞式加载脚本技术对比:

http://www.cnblogs.com/yslow/archive/2009/04/28/1445597.html

构建高性能JavaScript应用

时间: 2024-11-07 18:57:43

构建高性能JavaScript应用的相关文章

【JavaScript】【译】编写高性能JavaScript

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优

《高性能javascript》一书要点和延伸(上)

前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的收获. 第一章 加载和执行 基于UI单线程的逻辑,常规脚本的加载会阻塞后续页面脚本甚至DOM的加载.如下代码会报错: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

《构建高性能web站点》随笔 无处不在的性能问题

前言– 追寻大牛的足迹,无处不在的“性能”问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡.分布式文件系统多个方面娓娓道来,洋洋洒洒,甚是精彩,想来让人心旷神怡.     但“纸上得来终觉浅,绝知此事要躬行”,要消化本书的内容,绝不是一件简单的事情,更重要的还是实践.在实践和学习的过程中,我会把自己的经验和感悟分享出来,一方面权当做笔记,另一方面,对于后来的童鞋,希望能提供一丝一毫的帮助,不胜欣慰.     由于是读书

高性能JavaScript 重排与重绘

转自(学习之用) 作者:韩子迟 网址:http://www.cnblogs.com/zichi/p/4720000.html 先回顾下前文高性能JavaScript DOM编程,主要提了两点优化,一是尽量减少DOM的访问,而把运算放在ECMAScript这一端,二是尽量缓存局部变量,比如length等等,最后介绍了两个新的API querySelector()以及querySelectorAll(),在做组合选择的时候可以大胆使用.而本文主要讲的是DOM编程可能最耗时的地方,重排和重绘. 1.什

构建高性能web站点

以下为阅读<构建高性能web站点>郭欣 著 第一章的重点总结 1.等待的真相 a) 在用户等待的时间里,大概发生了以下几部分时间: i. 数据在网络上传输的时间:包括两个部分,浏览器端主机发出请求经过网络到达服务器的时间,服务器回应数据经过网络到达浏览器主机的时间.也称为响应时间,他的决定因素主要包括发送的数据量和网络带宽.站点服务器处理请求并回应数据的时间- ii. 站点服务器处理请求并生成回应数据的时间.主要消耗在服务器端,包括非常多的环节,我们一般用"每秒处理请求数"

《高性能javascript》 领悟随笔之-------DOM编程篇(二)

<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.重绘与重排 当浏览器加载完页面所有的元素.js.css.图片之后会自动生成两个数据结构: 1.dom树 (图片为转载) 如图所示,dom树表示了整个页面文档的结构,通过访问dom树我们可以得到某

《高性能javascript》pdf

下载地址:网盘下载 如果你使用JavaScript构建交互丰富的Web应用,那么JavaScript代码可能是造成你的Web应用速度变慢的主要原因.<高性能JavaScript>揭示的技术和策略能帮助你在开发过程中消除性能瓶颈.你将会了解如何提升各方面的性能,包括代码的加载.运行.DOM交互.页面生存周期等.雅虎的前端工程师Nicholas C. Zakas和其他五位JavaScript专家介绍了页面代码加载的最佳方法和编程技巧,来帮助你编写更为高效和快速的代码.你还会了解到构建和部署文件到生

高性能JavaScript阅读简记(二)

三.DOM Scripting DOM编程 我们都知道对DOM操作的代价昂贵,这往往成为网页应用中的性能瓶颈.在解决这个问题之前,我们需要先知道什么是DOM,为什么他会很慢. DOM in the Browser World 浏览器中的DOM DOM是一个独立于语言的,使用XML和HTML文档操作的应用程序接口(API).浏览器中多与HTML文档打交道,DOM APIs也多用于访问文档中的数据.而在浏览器的实现中,往往要求DOM和JavaScript相互独立.例如在IE中,JavaScript的

构建基于Javascript的移动CMS——生成博客(二).路由

在有了上部分的基础之后,我们就可以生成一个博客的内容--BlogPosts Detail.这样就完成了我们这个移动CMS的几乎主要的功能了,有了上节想必对于我们来说要获取一个文章已经不是一件难的事情了. 获取每篇博客 于是我们照猫画虎地写了一个BlogDetail.js define([ 'jquery', 'underscore', 'mustache', 'text!/blog_details.html' ],function($, _, Mustache, blogDetailsTempl