Jatinder Mann是微软Internet Explorer产品的一名项目经理,在BUILD 2012大会上,他做了题为“提高HTML5应用和网站性能的50条秘技(50 performance tricks to make your HTML5 apps and sites faster)”的演讲,介绍了很多为Web应用程序提速的技巧。

  Mann的建议是按照下面六个原则组织的。

 1. 快速响应网络请求。

  避免重定向。排名前1000的网站中,63%使用了重定向。如果不执行重定向的话,页面速度可以提高10%。

  避免Meta-refresh。世界上14%的URL使用了Meta-refresh。

  尽可能通过CDN定位用户,使服务器响应时间最小化。

  从不同的域下载资源,使并发连接的应用最大化。

  复用连接。不要在响应请求时关闭连接。

  确保页面加载不会因合作伙伴网站提供的数据而延迟。

  了解耗时的网络组件,如重定向、缓存、DNS、请求和响应等。在IE 9和10中可以使用Navigation Timing API来测量浏览器花在每个操作上的时间。

  2. 最小化下载的字节数。

  加载页面时,要尽量减少下载的数据量。平均而言,每个页面要下载的数据量达777KB,其中有474KB的图片、128KB的脚本和84KB的Flash。

  请求gzip压缩的内容。

  将资源保存在本地的包中,比如为Windows商店应用生成的包资源索引(Package Resource Index)文件。这样当需要这些资源时就可以很容易地获取到。

  使用HTML5 App Cache缓存动态资源。App Cache会只下载一次资源,从而避免多次网络行程。当应用的版本号发生变化时,它会自动重新下载相应资源。

  尽量在响应中使用“Expires”字段来提供可缓存的内容。

  通过设定请求的If-Modified-Since字段来使用条件请求。

  缓存数据请求,如HTTP、XML和JSON等,因为大约95-96%的请求不会整天变化。虽然这个想法很合理,但实际缓存接收到的请求的网站所占比重还不到1%。

  用大写将文件命名标准化。虽然服务器可能把Icon.jpg当作 icon.jpg,但是对于Web平台而言,它们是不同的资源,对应不同的网络请求。

  对于IE而言,请使用最新的标记标准,因为它速度最快。IE 10也能识别早期的IE6-IE9标记风格,但是其速度不如新的标记风格。

  特定的业务Web应用可能需要强制IE运行于传统模式,请使用HTTP头字段“X-UA-Compatible: IE=EmulateIE7”来代替HTML标签 ,这样速度会快一些。

  为了平滑地渲染,样式表应该链接在页面顶部的之中的

  绝对不要在页面底部链接样式表。否则加载页面时可能会出现闪烁。

  对于分层样式,不要使用“@import”,因为它是同步的,会阻塞CSS数据结构的创建和屏幕绘制。

  避免样式的嵌入和内联,因为它会强制浏览器在HTML和CSS解析器之间进行上下文切换。

  仅包含必要的样式。不要下载和解析用不到的样式。

  仅在页面底部链接JavaScript。这可以确保脚本执行时图片和CSS等资源已经加载,无需等待,也避免了上下文切换。

  不要在页面开头链接JavaScript。如果某些脚本必须在开始处加载的话,请使用“defer”属性。

  不要内联JavaScript,这样可以避免上下文切换。

  使用“async”属性加载JavaScript,这样整个脚本就可以异步加载和执行。

  避免冗余代码。世界上52%的网页包含100行甚至更多的冗余代码,比如一个JavaScript文件被链接了两次。

  将一个JS框架标准化,无论是jQuery,Dojo,Prototype.js还是其他框架。浏览器没有必要加载多个功能基本相同的框架。

  不要加载FB和Twitter等网站的脚本,只是看起来很酷而已,它们会争用资源。

  4. 优化多媒体资源的使用。

  图片是最常用的资源,每个页面平均会下载58张图片。

  尽量避免下载太多图片,根据页面加载时间将图片最大数量控制在20-30之间。

  使用Image Sprites将多个图片组合成一个。该技术可以减少网络连接数,也会减少下载的字节数并节省GPU处理周期。

  手动创建Image Sprites,因为工具创建的可能会留下较大的空洞,这会加大需要下载的数据量,也需要更多的GPU 处理周期。

  使用PNG格式的图片,该格式在下载大小、解码时间、兼容性和压缩率之间实现了完美的折中。JPEG格式可以用于照片。

  使用原始的图像分辨率,这样可以避免下载不必要的数据以及缩放所需的CPU 处理。

  尽可能使用CSS3 Gradient替代图片。

  尽可能使用CSS3 border radius替代图片。

  使用CSS3 Transform来创建移动、旋转和倾斜效果。

  对于小型的单个图片,可以使用Data URI。这样可以节省一张图片的下载量。

  避免复杂的SVG,因为它们会延长下载和处理时间。

  当包含HTML5时,指定一个预览图片。这样浏览器就不必下载整个视频文件来确定预览图片了。

  使用HTML5来代替Flash、Silverlight或QuickTime。HTML5速度更快,而且其他几种形式的运行时插件会消耗系统资源。

  主动地以异步方式下载富媒体资源并将其保存在App Cache中。

  5. 编写快速的JavaScript。

  在JavaScript中进行数学运算时尽量使用整型。JavaScript的浮点运算比相应的整型运算耗费的时间要多得多。在进行数学运算,特别是计算密集型运算时,请使用Math.floor和Math.ceil将浮点数转换为整型数。

  降低JavaScript代码量,这样不但可以减少下载的数据量,而且能够提供更好的运行时性能。

  按需初始化JS。当需要时动态加载JS。

  通过缓存变量(如document和body等)使DOM交互减到最少。

  使用内置的DOM代码,如element.firstChild或node.nextSibling等。这些代码都是高度优化的,相对于第三方库能提供更好的性能。

  访问大量DOM元素时,使用querySelectorAll。

  使用.innerHTML来构建动态页面。

  批量标记更改。

  维护小巧而健壮的DOM——将其元素数目控制在1000以内。

  JSON快于XML。

  使用浏览器的JSON原生方法。

  不要滥用正则表达式。

  6. 知道你的应用在做什么。

  理解JavaScript定时器,了解setTimeout和clearInterval。除非确定要使用定时器完成一些功能,否则不要启动定时器。组合定时器也是如此。

  如果监视器的刷新率是60Hz,请将显式帧的定时器调整为16.7 ms。

  在IE 10、Chrome和Firefox中,图形处理请使用requestAnimationFrame动画函数。其绘制通过回调实现,因此不需要定时器。

  使用可见性API(document.hidden和 Visibilityhange)来确定应用程序的可见状态,如果页面是隐藏的,就关闭该活动。这样可以节省CPU和电池寿命。

  Mann建议在IE中使用Windows Performance Tools来测试Web页面的性能, 并以减少CPU时间和增加并发性为目标进行优化。

转载于:https://www.cnblogs.com/ranzige/p/html5_process.html

6个原则、50条秘技提高HTML5应用及网站性能相关推荐

  1. html5延迟加载效果,网站性能延迟加载图像的五种技巧(小结)

    由于图片是web上最流行的内容类型之一,因此网站的页面加载时间很容易成为一个问题. 即使经过适当的优化,图像也会有相当大的重量.这可能会对访问者在访问网站内容之前等待的时间产生负面影响.很有可能,它们 ...

  2. [转]航天可靠性设计原则1000条

    转:引言: 一位航天可靠性老专家过世,一位同学整理老先生的遗物时,发现了一本<可靠性设计原则1000条>复印本,都是一些比较基础而且比较实用的设计技巧,下面是这1000条可靠性设计的具体原 ...

  3. 任正非40年的50条管理哲学:完美的人就是没用的人,我信奉灰度

    "烧不死的鸟是凤凰,从泥坑里爬出来的才是圣人" 来 源 | 和牛商业(ID:heniucaijing) 作 者 | 任正非 1987年,43岁的任正非终于追回了被骗的货款,这是他初 ...

  4. c++容器使用50条总结

    第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容 ...

  5. 社交网络经验50条 看微博微信实战经验

    人心变幻莫测,运营如何把握社交网络? 1.大部分,不,是绝大部分都被社交网络平台是企业自媒体这一伪证给坑害了.于是,它们忘却了社交网络的基础,而着急使用自媒体,于是变成了一场自欺的狂欢.无论是什么,都 ...

  6. 计算机学院校园文化标语,校园文化建设标语50条

    当一个人开始从自己内心开始奋斗,他就是个有经验的人.下面是学习啦的小编为你们整理的内容,希望你们能够喜欢 校园文化建设标语50条 1.有一分耕耘,就有一分收获. 2.找方法才能成功,找借口只有失败. ...

  7. 圆锥曲线万能弦长公式_2020高考数学50条秒杀型公式与方法

    考试马上就要到了,学姐整理了高考数学50条秒杀型公式和方法,希望能帮助考生们更好地攻克数学难关! 高考数学秒杀公式与方法一 1,适用条件:[直线过焦点],必有ecosA=(x-1)/(x+1),其中A ...

  8. 计算机应用技术班级鉴定,大学班级的鉴定评语(精选50条)

    大学班级的鉴定评语(精选50条) 怎么去写好关于大学的一个鉴定评语呢?来看看吧!如下是小编给大家整理的大学班级的鉴定评语(精选50条),希望对大家有所作用. 1.性格开朗,待人热情,与同学相处融洽,总 ...

  9. Effective STL中文版:50条有效使用STL的经验(双色)

    <Effective STL中文版:50条有效使用STL的经验(双色)> 基本信息 作者: (美)梅耶(Meyers,S.) 译者: 潘爱民 陈铭 邹开红 出版社:电子工业出版社 ISBN ...

最新文章

  1. python爬虫吧-Python爬虫如何爬取贴吧内容
  2. pat 团体赛练习题集 L2-008. 最长对称子串
  3. 七、数据库技术基础(一)
  4. Linux下导入,导出mysql数据库的命令
  5. 关闭 启动_离心泵启动时为什么要关闭阀门?
  6. 实现AutoCAD和ArcGIS进行并发和互编辑操作
  7. 基于visual Studio2013解决面试题之1109全排列
  8. Common Electrical I/O (CEI)
  9. uc云观媒体服务平台_自媒体平台UC云观开放收益功能,自媒体作者有收入了
  10. Win11无线网络适配器有感叹号不能上网怎么解决
  11. Processing学习笔记
  12. 使用nodejs机器学习进行app流量判别
  13. pdf合并的工具下载
  14. STM32CubeMx使用教程(一)——安装CubeMx
  15. 网站页面代码优化的方法有哪些呢?
  16. Delphi控件-复合控件
  17. 雷德(Rader)算法
  18. Linux笔记----ln -s,>, >>, cat, more, less, head, tail, sed
  19. Mkv转MP4方法集合整理
  20. C语言中的scanf对应java中的,什么是C++中的scanf,memset和一对夫妇在Java中的含义?...

热门文章

  1. C++数据结构与算法 竞赛树, 二叉搜索树
  2. Decision Tree决策树练习题
  3. noteexpress 笔记导出_把笔记还给用户,可以选择自己存储位置的笔记应用#Joplin...
  4. Jmeter系列之接口依赖
  5. Graph Embedding图嵌入
  6. 以太坊上DeFi协议总锁仓量首次突破350亿美元
  7. Blockchain.com将于今日7:59暂停XRP交易
  8. SAP License:值字段更改注意事项
  9. SAP License:进项税的合理管理缩减成本
  10. 如何使用JS来开发室内地图商场停车场车位管理系统