回归正题,今天听下来,也就大概 3 个大的主题:正常的网站性能优化、无线方向的网站性能实践和数据监控。
正常的网站性能优化,似乎这个主题里面没有听到新鲜的知识点和实践。感觉还是书中的那些知识,最终在自己的产品上的实践大同小异。这里推荐几本书,值得一读:
- 《高性能JavaScript》
- 《Web性能优化》
- 《高性能网站建设进阶指南》
- 《网站性能监测与优化》
恩,这基本选「O'REILLY」的还是挺不错。
最让我觉得不错的,就是无线方面性能优化的分享。因演讲内容、演讲者所在的公司不同等缘故,演讲的效果成度其实也是大有不同的。
简单来说,我就只听了《Taobao移动网页性能优化之路》和《Qzone touch性能优化实践》,感觉很不错。为了对我吸收的知识进行梳理,下面先理清几个概念。
应用缓存
HTML5 提供一种「应用缓存」机制,使得基于 web 的应用程序可以离线运行。 在处于离线状态时,即使用户点击刷新按钮,应用也能正常加载与工作。
使用起来应该很容易,如下:
在应用页面的
<html>
元素上添加manifast
属性,入下列写法:<html manifest="example.manifest"> ... </html>
在服务器中添加文件类型为
text/cache-manifest
的「声明」(不知道能不能这样叫)。- 在 example.manifest 文件中,列出需要缓存的内容,以及其他版本信息,例如:
CACHE MANIFEST # VERSION 0.1 CACHE: index.html images/test.png js/main.js css/layout.css # 替代方案 FALLBACK: /ajax/ ajax.html
使用了「应用缓存 manifest」,可以有下面好处:
- 用户可以在离线情况下浏览网页内容
- 由于把需要重新请求的内容缓存起来,所以速度变快了
- 减轻服务器的负载
WebView
虽然我还没真正做过无线方面的一些应用。但可以这样来理解,WebView 就是 web 应用的一种方式。一般有两种方式开发 web 应用,一个是原生的 native,一个是嵌入 wap 版本的网页的 WebView。
理解上面的概念之后,下面是对今天这 2 个演讲的一些总结。
Taobao移动网页性能优化之路
通过对客户端网速的检测、用户终端的像素渲染比例,来给予用户不同的展示方式和资源。主要有几个方面值得学习:
- 为了解决多终端下显示样式一致,需要通过终端像素渲染比例来给予不同的资源。特别是图片。
- 背景图片使用 base64 位字符串来代替请求链接。
- css 和 js 内联,组件 combo 服务。
- web 单页面和 app 化组件。
- MIX 框架。
Qzone touch性能优化实践
个人觉得,这场分享和最后的提问环节都很精彩。一下子填充了我脑子里的很多空白。
- Qzone touch 的框架和模板选择及原因。
- 缓存策略。
- 使用 NodeJs 来组装模板并渲染出 HTML。
- 拍照压缩上传的最佳实践。
- JS 和 WebView 通讯的最佳实践。
简单总结
这两场下来,感觉在无线这个新的领域,这种探索和实践的精神真的值得学习。特别是 Qzone touch 团队,分享的最佳实践在我们的无线产品中都可以借鉴的。
对于数据这一块,下午去参加了《携程客户端网站性能及用户行为数据采集分享》,感触也蛮深的。
采集数据的一个丢失率的问题
对于一个页面,可能有几种情况:静态页面,表单页面,高交互页面,跳转页面等。而一套完整的用户行为监控方案,理论上应该包含这些页面的。而在这几类页面中,表单页面和跳转页面是很容易在「打点」的时候丢失数据。
特别是在跳转页面,假设去监控浏览器关闭再发送一个请求给服务器,这样的取得「打点」信息也是不靠谱的。浏览器是会阻止掉这样的请求的。
携程的这套数据采集方案,能把丢失率将到 2%,表示很想知道怎么做的。(恩,后续研究下)
数据展示
获取到这些用户行为数据之后,怎么样才能把我们需要的信息展示出来呢?恩,可以通过关键的几个条件来监控,例如 DomReady, pageLoad, 页面停留时间等。
也许听完这次携程的演讲,我心中已经有一个数据采集及错误警报的方案了,恩,不错的感觉。
直到现在,印象最深的,还是 Google 的 Doodle 上对 HTML5 的激情使用。恩,这里有所有的案例,先记下来,以后慢慢研究。
再发一个感叹,那些动画的 sprite 图片,前端固然 OK,但还要一个视觉!
好吧。很晚了。留点精神明天继续去听,希望不会太普通的分享。
晚安 @北京。