您的位置:首页 > 其它

【翻译】性能探索(5)--优化IPhone缓存

2010-12-29 23:20 225 查看
IPhone改变了用户在移动终端上浏览网页的方式,IPhone给web开发者带来了新的机会的同时,也带来了一些性能的挑战。

IPhone上面存储着有限的信息,知道其上面的cache属性对创建高性能的站点是很有必要的。在前几篇文章中,我们分析了80%的(或者更多)响应时间是如何被前端占据的,分析了为什么cache很重要,针对本文的主题,Yahoo!的性能团队研究了Iphone的cache属性以及性能相关,我们对于IPhone以下的几个cache属性特别感兴趣:

对于单一的组件其最大的cache容量是多少

对于多个组件其最大的cache容量是多少

压缩的组件对于其cache容量的影响

机器重启后cache是否还存在

我同时在IPhone和IPod Touch上面做了实验,得出的结论是一直的。

使用Cache还是跳过Cache

在前面,我们讨论了区分空缓存的用户体验和全缓存用户体验的重要性.当有一个外部的组件(脚本,样式,图片)被引用到一个HTNL页面时,当HTML页面会发的浏览器发送HTTP请求并且把组件存入浏览器内存,尽管在挥发的过程中组件是存储在缓存中,但是它可能会存入浏览器缓存,也可能不存入浏览器缓存,“跳过缓存”是指浏览器绕过缓存直接向服务器发HTTP请求来请求需要的组件,“使用缓存”是指在浏览器缓存中找到了需要的组件那么相应的HTTP请求则免掉了。

当组件的HTTP头中包含过期时间或者cache_control时,它是可以可以被缓存的。


Expires: [Expiration time in GMT Format]

Cache-Control: max-age=[Expiration time in seconds]


如果组件不包含任何一个上面的头,则不会被浏览器缓存的。为了测试IPhone浏览器的缓存能力并使其使用缓存,我们在服务器设置了以下头信息:


Expires: Thu, 15 Apr 2010 20:00:00 GMT


最大化cache容量

在我们的实验中,我们为了检测对于单个组件的最大缓存一直在变化着不同组件(脚本,样式,图片)的大小,我们发现如果一个组件大于25KB,IPhone浏览器将不会再缓存这个组件,所以专门对于IPhone的网页,为了更好的利用缓存,我们应该将每一个组件设置在25kb以下。

好消息是,如果浏览器下载的一个组件大于25KB,这个对于已经在缓存中的组件是不会产生影响的。已经从在在缓存中组件只能被新的小于25KB的组件按照LRU(least recently used)算法替换。

Apple的网站对于单个组件有10M的缓存容量,这个是指浏览器可以存储在内存中的容量(不是硬盘),然而IPhone的实际容量是更小的,这个取决于内存以及当前正在运行的程序,没有被缓存的组件将会在页面unload的时候被回收。

为了检测IPhone对于多个组件的最大容量,我们在页面中增加了一些25KB的组件,我们测试了不同类型的组件最后发现IPhone浏览器可以缓存最多19个25KB的组件,所以IPhone的最大缓存容量是475-500KB

压缩组件

我们也分析了压缩组件和非压缩组件对于缓存特性的影响,我很惊奇的发现,25KB的最大容量与一个组件是否压缩是没有关系的,IPhone的Safari浏览器会将组件在保存的缓存之前进行编码,只有组件的大小是主要的,因此,再一次强调将组件变小的重要性

重启

IPhone和IPad用户经常需要重启机器,假设在重启之前用户正在浏览网站,当机器重启之后,图片,样式等组件是不是还继续留在浏览器的缓存之中,我们通过实验发现IPhone浏览器不会再重启之后还保持之前的信息,这说明IPhone的Safari浏览器是通过系统的内存来缓存组件的,而不是通过硬盘来存储。

要点

专门为IPhone用户设计网页,为了提高可用性,你也需要降低页面的体积去增加前端性能。IPhone缓存实验建议对于IPhone的网页:为了更好的利用缓存,将每一个组件的体积减少到25KB以下.

原文链接

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: