构建高效的移动终端 Web应用程序(Building High Performance Mobile Web Applications)

视频及实例地址:
http://youtu.be/jD_-r6y558o
 
目录:
    1. 概述
    2. 配置调试环境
    3. 受关注的页面加载性能指标
    4. 页面优化前性能分析
    5. 图片优化
    6. 压缩JS
    7. CSS优化
    8. 延迟加载
    9. 手机web页面点击事件优化
    
 
1. 概述:

Ryan Fioravanti 在 2012年7月Google IO 上做了“Building High Performance Mobile Web Applications” 的讲演,该讲座主要以网站http://www.html5rocks.com/en/ 为案例,应用Chrome PC Mobile联调功能对其现有性能进行分析,然后逐步对其优化,对比网页优化前后在性能上的提升。本文主要对其视频进行些翻译并转述,内容较浅,只适合初、中级开发了解。

2. 配置调试环境(只支持android4及以上版本,中国访问Google会有一定限制可能影响其正确调试):

  • PC上安装Chrome Canary并安装插件PageSpeed插件(方便调试和分析)
  • 上安装java SDK并添加其bin路径到系统Path下
  • PC上安装Android SDK, 安装后打开SDK Manager.exe,勾选tools项更新
  • 在手机设置->开发人员工具中启用USB网页调试功能
  • 使用USB连接手机,然后在PC命令行下进入android sdk\platform-tools下,输入命令adb forward tcp:9222 localabstract:chrome_devtools_remote.
  • 确认设置成功后,使用PC上的 Chrome访问 http://localhost:9222 就可以开始对手机上chrome所访问的网站进行Debug了
3. 受关注的页面加载性能指标:
  • navigationStart
    • 页面加载完所需时间
  • responseStart
    • 浏览器即将开始接受页面内容的时间
  • domContentLoadedEventStart
    • 页面交互即将开始的时间
  • loadEventStart
    • 即DOM书和资源下载完毕时间
 
 
4. 页面优化前性能分析
 
    初始化所需时间:
 
 
  使用PageSpeed分析:
 
分析结果:
 
5. 图片优化
 
5.1 使用按比例缩放图片(即依据浏览器尺寸进行不同大小图片的请求,该处理为RESS 设计的一个要点)
优化前后对比:
 
5.2 替换PNG格式图片为JPEG格式(注意透明背景图片或图标不可进行替换,否则透明会变为白底)
优化前后对比:
 
 
6. 压缩JS
使用PageSpeed 插件分析时,会对未压缩js进行提示:
 
查看JS大小并分析是否被压缩
 
使用压缩后的jQuery库性能对比(注意:此处需要清空缓存后才可看出性能提升)
 
提升网站响应速度,可使用如下压缩工具对所有JS进行压缩,
  • Closure compiler
  • YUI compressor
  • Online JavaScript compression
7. CSS 优化
7.1 使用Profiling 查找最耗时CSS:
 
手机Web常见CSS问题:
  • 效率低下的CSS
    • 使用常用关键字后代选择器作为 选择器  (Descendant  selectors with common keys)。该种行为在定位该选择器时耗时且嵌套多为冗余.
body *{...}
ul li a{....}
#footer h3 {...}
  • 复杂选择器
ul mtop.blue_na{}
 
 7.2 CSS 优化建议
  • 避免通用标签作为 选择器
    • 最好可以通过继承获取样式
  • 让 选择器 规则尽可能具体
    • 最好使用标签class(伪类名)和ID做为选择器
  • 使用class(伪类)替代 后代选择器
   
 
7.3 使用压缩后的CSS(未提及)
 
8. 延迟加载
8.1 js延迟加载。选择将一些页面加载前不需执行的脚本推迟加载(后面会有文章对js延时加载进行介绍)。
    如:将下述脚本延迟加载
 
加载方法:
 
 
优化后:
 
 
8.2 DOM延时加载
 
 
 
9. 手机web页面点击事件优化
Android手机Chrome在处理页面点击事件时会有300ms的延时用以判断是否是双击等操作。
 
规避该300ms方式:
注销点击对象的onclick事件,并将该onclick事件处理逻辑绑定到触摸touchend事件中。
posted @ 2013-02-07 10:00  Mr 88  阅读(1386)  评论(0编辑  收藏  举报