Chrome高性能的秘密:对Mobile平台的优化
2014-05-14 00:00
916 查看
跨平台的资源加载
跨平台也是 Chrome 网络模块的一个主要考量,包括 Linux, Windows, OS X, Chrome OS, Android, 和 iOS。 为此,网络模块尽量实现成了单进程模式(只分出了独立的 cache 和 proxy 进程)的跨平台函数库, 这样就可以在平台间共用基础组件(infrastructure)并分享相同的性能优化,更有机会做到同时为所有平台进行优化。了解一下代码结构可以帮助我们理解它的能力结构。比如:
net/android 绑定到 Android 运行时(runtime) [译注(Horky):运行时真是一个很烂的术语,翻和没翻一样。]
net/base 公共的网络工具函数。比如,主机解析, cookies, 网络转换侦测(network change detection),以及 SSL 认证管理
net/cookies 实现了 Cookie 的存储、管理及获取
net/disk_cache 磁盘和内存缓存的实现 net/dns 实现了一个异步的 DNS 解析器(DNS resolver)
net/http 实现了 HTTP 协议 net/proxy 代理(SOCKS 和 HTTP)配置、解析(resolution) 、脚本抓取(script fetching), …
net/socket TCP sockets,SSL streams 和 socket pools 的跨平台实现
net/spdy 实现了 SPDY 协议
net/url_request URLRequest, URLRequestContext 和 URLRequestJob 的实现
net/websockets 实现了 WebSockets 协议上面每一项都值得好好读读,代码组织的很好,你还会发现大量的单元测试。
Mobile 平台上的架构和性能
移动浏览器正在大发展,Chrome 团队也视优化移动端的体验为最高优先级。先要说明的是移动版的 Chrome 的并不是其桌面版本的直接移植,因为那样根本不会带来好的用户体验。移动端的先天特性就决定了它是一个资源严重受限的环境,在运行参数有一些基本的不同:桌面用户使用鼠标操作,可以有重叠的窗口,大的屏幕,也不用担心电池。网络也非常稳定,有大量的存储空间和内存。 移动端的用户则是触摸和手势操作,屏幕小,电池电量有限,通过只能用龟速且昂贵的网络,存储空间和内存也是相当受限。
再者,不但没有典型的样板移动设备,反而是有一大批各色硬件的设备。Chrome 要做的,只能是设法兼容这些设备。好在 Chrome 有不同的运行模式(execution models),面对这些问题,游刃有余。
在 Android 版本上,Chrome 同样运用了桌面版本的多进程架构——一个浏览器内核进程,以及一个或多个渲染进程。但因为内存的限制,移动版的 Chrome 无法为每一个 tab 运行一个特定的渲染进程,而是根据内存情况等条件决定一个最佳的渲染进程个数,然后就会在多个 tab 间共享这些渲染进程。
如果内存实在不足,或其它原因导致 Chrome 无法运行多进程,它就会切到单进程、多线程的模式。比如在 iOS 设备上,因为其沙箱机制的限制,Chrome 只能运行在这种模式下。
关于网络性能,首先 Chrome 在 Android 和 iOS 使用的是各其它平台相同的网络模块。这可以做到跨平台的网络优化,这也是 Chrome 明显领先的优势之一。所不同的是需要经常根据网络情况和设备能力进行些调整, 包括推测优化(speculative optimization)的优先级、socket 的超时设置和管理逻辑、缓存大小等。
比如,为了延长电池寿命,移动端的 Chrome 会倾向于延迟关闭空闲的 sockets (lazy closing of idle sockets), 通常是为了减少信号(radio)的使用而在打开新的 socket 时关闭旧的。另外因为预渲染(pre-rendering,稍后会介绍)会使用一定的网络和处理资源,它通常只在 WiFi 才会使用。
关于移动浏览体验会独立一章,也许就在 POSA 系列的下一期。
相关文章推荐
- 高性能Node.js:来自LinkedIn Mobile的10条优化建议
- Chrome高性能的秘密:预连接、预加载与预渲染
- Chrome高性能的秘密:DNS预解析
- Chrome高性能的秘密:Chrome的网络模块
- Chrome高性能的秘密:Web应用面对的性能问题
- Chrome高性能网络 -- Chrome内部的各种优化
- 高性能网站建设指南——网站优化的14条建议
- Android最佳性能实践(三)——高性能编码优化
- 高性能CPU的秘密—新技术篇
- 高性能Javascript笔记 数据的存储与访问性能优化
- 高性能JavaScript--字符串加(+)和加等(+=)操作符优化方法
- Spark性能优化——高性能序列化类库
- 网站开发WEB前端高性能优化之JavaScript优化细节
- 网站开发WEB前端高性能优化之JavaScript优化细节
- 高性能ASP.NET站点构建之简单的优化措施
- Android最佳性能实践(三)——高性能编码优化
- Web前端,高性能优化
- Hadoop平台优化综述
- 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施
- 构建高性能ASP.NET站点 网站优化需要考虑的方面