这文章不错呀。收藏一下。
http://blog.csdn.net/dyllove98/article/details/8982351 前端工程打开速度优化的循序渐进总结
创建人: @郑昀 更新日期:2013年5月8日 分类: 前端技术
- 页面打开速度(Fully Loaded)
- 网站首页(或列表页)之 First View :打开速度应在 3秒+0.5秒 内;
- 对 Repeat View 时的各项指标暂不作要求;
- 首屏打开时间(Start Render)
- 网站首页(或列表页) 之 First View :首屏渲染速度应在 1秒+0.5秒 内;
- 文档解析完毕时间(Document Complete):
- 对此指标暂不作要求。
- 遵循常规优化建议
- 外联内联js/css的位置摆放建议
- combo handler的引入
- 图片无损压缩的优化
- 减少 dom elements 的数量
- 引入 textarea/script 元素做延迟解析异步渲染
- javascript 外联文件引用放在 html 文档底部:具体如何摆放内联JS/CSS和外联JS/CSS,请参考 优化第二阶段;
- css 外联文件引用在 html 文档头部:位于 header 内;
- http 静态资源尽量用多个子域名:充分利用现代浏览器的多线程并发下载能力。浏览器的多线程下载能力,参考 附录C;
- 具体建议:
- JS、CSS、CSS背景图片、CSSSprite图片分散在 s0~s2.55tuanimg.com 下;
- 业务类图片分散在 p0~p3.55tuanimg.com 下;
- json/xml 等格式的文本响应,也建议开启 gzip ;
- jepg/png 等图片,可以选择不开启 gzip,因为可能服务器端图片无损压缩算法已经很强悍了,不需要依赖于 gzip;
- 含义参考 附录D;
- 郑昀实例示范:
- Nginx设置示范:
-
location ~ .*\.(js|css)${
expires 30d;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp)${
expires 1M;
}
- 通过 combo handler 合并 js 和 css 的下载,参考 优化第三阶段;
- 本阶段请尽量减少外联 js/css 文件数,尽量减少 ajax 调用;
- 去除不必要的 cookie ;
- 尽量减少 cookie 的大小;
- 留心将 cookie 设置在适当的域名下,避免影响到其他网站;
- 设置适当的过期时间。一个较早的过期时间或者不设置过期时间会更快地删除 cookie,从而减少响应时间。
- 当浏览其请求一个静态图片并一同发送 cookie 时,服务器并不需要这些 cookies 。这样只是毫无益处地创建了多余的网络流量。应当保证静态资源在请求时没有携带 cookies,所以需要把你的静态资源放在另一个子域名下。
- 如果你的域名是 www.example.org,你可以将你的静态资源放在 static.example.org 中。如果你把 cookie 设置在顶级域名 example.org 上而不是 www.example.org,那么所有发送至 static.example.org 的请求会包括那些 cookies。在 这种情况下,你可以用一个全新的没有 cookie 的域名来放置你的静态资源。
-
定律一:资源是否下载依赖 JS 执行结果——JS 有可能会修改 DOM。典型的,可能会有
document.write
。这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。 -
定律二:JS 执行依赖 CSS 最新渲染——JS 的执行有可能依赖最新样式。比如,可能会有
var width = $('#id').width()
. 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。 - 定律三:现代浏览器存在 prefetch 优化—— 现代浏览器在竞争中,在 UI update 线程之外,还会开启另一个线程,对后续 JS 和 CSS 提前下载(注意,仅提前下载,并不执行)。有了 prefetch 优化,这意味着,在不存在任何阻塞的情况下,理论上 JS 和 CSS 的下载时机都非常优先,和位置无关。
一,如果真的需要把外联js和css放在head里,那也需要从下面这种排序
1. 外联js
2. 外联css
3. 外联js
统一为:
1. 外联css
2. 外联js
3. 外联js
不要script和css交替混编。
原因是,据有人称:『
从Firefox 4+开始,对prefetch的策略有些许调整,调整在于 head 中 css 与 js 的位置。
css 在外联 js 后面时,可能会在 script 后面的 css 加载好之前,提前进行首次渲染。
然后等后面的 css 加载好后,再次更新 Render Tree 并进行渲染,造成页面闪烁现象。
即,各种优化策略,似乎随着浏览器版本不同,头可能发生细微差异。
』
所以郑昀认为,保守做法是,js 和 css 不要在 head 里交替混编,统一为先外联css再外联js!
二,但只有万不得已时,才会在 head 里放外联js,否则请把外联js放置到</body>前。
原因是张克军的《js和css的顺序关系》指出:
外联js放在页面最后,高级浏览器会自动做优化(prefetch),你不用担心,它也可能会提前下载。
<script src="http://a.tbcdn.cn/??s/kissy/1.2.0/kissy-min.js,p/global/1.0/global-min.js,p/fp/2012/core.js,p/fp/2012/fp/module.js,p/fp/2012/fp/util.js,p/fp/2012/fp/directpromo.js?t=2012062320120712.js" data-fp-timestamp="20120703"></script>
js之间用英文逗号或&符号分隔。此src的Response是多个js文件的内容拼装。
国内的 Combo Script 支持
淘宝李晶-拔赤在 https://github.com/jayli/combo 下发布了combo.php和minfy.php,能够做到合并文件(不压缩),以及合并且压缩。
文件列表:
- combo.php 合并文件,不压缩
- minify.php 合并压缩文件
- cssmin.php 压缩css
- jsmin.php 压缩js
- cb.php 淘宝CDN合并文件策略的模拟
脚本使用:
- 要求php5及以上版本
- 程序在找不到本地文件的情况下,会去指定的cdn上找同名文件
- 程序会自动转义-min文件为源文件,因此要约定-min文件和原文件要成对出现
- 需要定义combo.php和minify.php中的$YOUR_CDN变量
- 如果只是合并压缩local文件,则不必重置$YOUR_CDN变量
- 这里提供cb.php,用来实现tbcdn的开发环境的模拟,apache的配置在cb.php中
CDN上的 Combo Handler支持
1)2008年7月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务。
2)淘宝CDN支持Combo Handler,用逗号分隔js/css,用两个问号来触发combo特性:
- 遇到 & 时,会尽可能得到实体字符。
- 遇到 </textarea(\s|\\|>) 时,会结束解析。
- 其他都直接作为 textarea 的内容。
- 玉伯(王保平,id@lifesinger)《淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式》(需翻X墙)
- BigRender所依赖的“数据延迟加载组件”datalazyload
- yiminghe《数据延迟加载组件》
- 推荐使用 http://www.webpagetest.org/ 评测,由于它受限于并发测试和带宽,所以资源下载速度较差,只能作为与竞争对手对比测试的依据;
- Test Location 请选择亚洲的中国江苏节点;
- Browser 请选择 Firefox、IE9、Chrome等现代浏览器;
- 如下图所示:
- 郑昀
- 博睿从它的各地监测节点以及不同电信链路访问,得到一个响应速度的平均值;
- Firefox插件 YSlow! ;
- Google PageSpeed https://developers.google.com/speed/pagespeed/insights ;
Browser | HTTP/1.1 | HTTP/1.0 |
IE 6,7 | 2 | 4 |
IE 8 | 6 | 6 |
Firefox 3+ | 6 | 6 |
Safari 3+ | 4 | 4 |
Chrome 3+ | 4 | 4 |
Chrome 11+ | 6 | ? |
Opera 10+ | 4 | 4 |
Opera 11+ | 16 | ? |
+
+
=
=
+
=
相关推荐
总的来说,前端开发是一个不断发展与进步的领域,随着新的样式解决方案和组件库的不断涌现,以及前端框架的不断更新和演进,前端开发的技术栈和工具链也在不断完善和丰富。未来,前端社区将继续充满朝气与活力,为...
Vue.js是目前非常流行的前端开发框架之一,被誉为前端三大框架之一,另外两个是React和Angular。Vue.js的设计理念是简洁、易用且高效,它旨在通过最小的学习曲线提供强大的功能,使得开发者能够快速构建交互式的用户...
这份“循序渐进的JavaScript范例资料”旨在帮助初学者和有经验的开发者逐步掌握JavaScript的核心概念和技术。 首先,我们要了解JavaScript的基础。JavaScript是一种解释型、弱类型、基于原型的动态语言。它在浏览器...
以下是一些循序渐进学好JavaScript的方法: 1. **清楚JS的定位**:理解JavaScript作为客户端脚本语言的角色,主要任务是处理用户交互、更新页面内容、进行异步通信(Ajax)等。始终围绕这个核心思想去学习,有助于...
vue-todos预览地址(响应式设计,pc端,移动端) 初始化地址...让vue.js的初学者循序渐进的,有效的学习vuejs 。運行# 更新依赖包npm install# 本地运行 at localhost:8080npm run dev# 打包npm run build你学习到vue-cli
最后,使用JSON进行数据交换是前端优化的另一个重要方面。JSON是一种轻量级、语言无关的数据交换格式,与XML相比,其数据量更小,解析更快。由于JSON天然就与JavaScript兼容,使得数据操作更加直观和高效。JSON数据...
适读人群 :本书适合对前端工程化有一定理解和实践的中高级前端工程师阅读,同样适合对前端工程化感兴趣的服务器端开发者以及运维人员阅读。 1.本书由周爱民老师倾情作序,美团技术总监赵强、搜狐高级技术经理邵充、...
“阿基里斯之踵”是前端工程化的痛点之处,即开发速度慢、协同效率低、距离业务逻辑较远、用户体验较近等问题。 解决思路: 1. 云+端一体化:前端工程化技术架构的目标是将前端开发流程自动化、标准化,以提高开发...
在现代Web开发中,前端工程化...总结,前端工程化体系设计与实践是前端开发者必须掌握的核心技能之一。通过合理的架构设计、工具选择和最佳实践,可以打造出高效、稳定、易维护的前端项目,适应快速变化的Web开发环境。
"前端笔试题面试题汇总+前端优化总结" 前端优化的目的是什么?从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。从服务商角度而言,优化能够减少页面请求数、...
总的来说,"网易高级前端工程师跟着他每周重点攻克一个前端面试重难点"的学习计划涵盖了JavaScript核心、前端框架、性能优化、工程化实践、浏览器原理以及安全等多个方面。通过系统学习和实践,你将在前端开发的道路...
### Web前端性能优化知识点 #### 一、构建优化 **1.1 文件压缩与合并** - **文件压缩**:利用工具如UglifyJS...总之,Web前端性能优化是一个系统性的工程,需要开发人员具备全面的知识体系和实践经验才能有效实施。
"前端性能优化与实践.zip"这个压缩包包含了一系列关于前端性能优化的深度文章和教程,涵盖了浏览器缓存机制、首屏加载优化、服务端渲染、事件处理策略、图片优化、性能监测工具以及CDN的工作原理等多个方面。...
Web 前端年总结 PPT 模板的主要内容和知识点,包括技术研发部汇报人、技术研发部工作总结、项目中存在的问题及改进、技术研发部的不足及总结、技术研发部的展望、Web 前端技术、框架开发、代码优化和数据检测等。
前端JS打开CMD执行程序 不限制浏览器 JS打开浏览器 谷歌浏览器前端打开其他程序 谷歌浏览器JS打开其他程序
这包括了解服务端渲染、前端性能优化、前后端分离的设计原则等高级话题。 #### 二、前端技术选型 - **选择合适的前端语言**: - **JavaScript**:作为前端的核心语言,其版本不断更新,ES6+引入了许多新特性,...
VUE前端面试手册,含JS,HTML,CSS,算法和数据结构,计算机系统,计算机网络,浏览器,性能优化,前端工程化,数据库,前端框架,小程序,设计模式,数据可视化.zipVUE前端面试手册,含JS,HTML,CSS,算法和数据...
性能优化是前端开发中不可或缺的一部分,它直接影响到用户的体验,进而影响网站的留存率和转化率。前端性能优化主要分为两大类:加载时优化和运行时优化。 加载时优化的目标是提高网站的加载速度,减少用户等待时间...
此外,郭碧青也谈到了前端优化在移动端的应用,特别是在手机QQ兴趣部落项目中的实践。因为移动端设备的资源和网络条件通常受限,所以对于性能优化的要求更高。他分享了使用了如React Native和Vue等现代前端框架的...