移动Web应用的性能及其未来趋势

简介: 转自:http://www.infoq.com/cn/news/2013/07/mobile-web-performance在一篇深入的实质性文章中,某iOS开发公司的老板Drew Crawford表示他认为目前移动Web应用运行迟缓,而且并不指望能在不久的将来看到重大改善,并列出了以上观点的全部原因。

转自:http://www.infoq.com/cn/news/2013/07/mobile-web-performance

在一篇深入的实质性文章中,某iOS开发公司的老板Drew Crawford表示他认为目前移动Web应用运行迟缓,而且并不指望能在不久的将来看到重大改善,并列出了以上观点的全部原因。该文章是此前某篇博客文章的后续之作——在那篇文章中,他指出:与桌面系统中的表现相比,JavaScript在移动设备上的性能有着量级上的差距。由于那篇文章遭到了严重的批评,因此Drew撰写了这篇更详细的文章以作为回应。对于糟糕的性能和缺乏改善由此归为以下三类:

1.      处理器性能差异:移动设备ARM处理器vs.桌面x86处理器

2.      JavaScript引擎的性能趋势

3.      垃圾回收方面的内存消耗

Drew所列出的两个瓶颈在于CPU和内存。其中,CPU密集型任务涉及两方面:CPU的能力和执行效率。Drew指出,现阶段x86处理器比iPhone和高端Android设备使用的ARM处理器快十倍

虽然不是硬件工程师,但我曾经为一家主流半导体公司工作,那里的人们告诉我,现在性能主要依赖于工艺水平(例如,他们用“纳米”来衡量的那些东西)。iPhone5能够具有令人瞩目的性能,很大程度是由于工艺水平从45纳米提升到32纳米——接近1/3的提升。不过要想再次获得这样的效果,苹果必须将其工艺水平进一步提升到22纳米。

由于大部分缩减晶体管尺寸方面的知识和投入都掌握在Intel手中,Drew认为:在可以预见的未来,ARM不大可能迎头赶上;实际上,更大的可能是Intel生产一款x86处理器,并杀入低能耗市场与ARM进行竞争,而不是ARM弥补性能差距。

有关性能的第二个方面是效率。CPU周期的利用率如何,也即是,机器指令获得JavaScript代码生成指令的效率如何?

这也正是许多能干的软件工程师马失前蹄的地方。其思维过程类似于这样:JavaScript已经变快了,而它将继续变快!

这句话的前半部分正确。JavaScript的速度确实得到了显著提升。但是对后半句来说,我们已经身处JavaScript的顶峰,从今以后它的速度将不会再有大幅提升了。

下面是Chrome v8在我的Mac上(能够运行的最早版本,来自2010年12月),与现在的v26进行对比的结果。


看不出什么区别?这是因为本来就没有多少差别。对于CPU密集型JavaScript程序来说,近来没有任何重大进步。

而如果说有人觉得现在访问Web比2010年快多了,那很可能是因为电脑性能的进步,而与Chrome的改进无关。

在Drew看来,近期JavaScript的性能没有显著提升的原因非常明显:

问题在于,JavaScript的JIT化是一个有着60年历史、并经历了长达60年研究的理念,期间人们使用各种可以想象的编程语言进行了成千上万次实现,以验证这是一个好的想法。但是现在我们已经完成了这一工作,并且榨干了它的价值。兄弟们,就是这样,演出结束了。或许我们可以开始寻找适用于下个60年的另一条妙计。

移动Web的第二条制约因素是内存。内存使用方面也有两大因素:可用的内存总量,与内存使用效率

尽管现代移动设备拥有相当数量的内容(一般为512MB或1GB),然而操作系统限制每个应用的使用量。操作系统自身消耗了许多内存,此外还有许多同时运行的应用(多任务)也在消耗内存:

基本上,当iPhone4S上的应用使用40MB内存时会出现警告,而消耗213MB内存时应用进程会被杀死。在iPad 3上,警告出现在应用消耗400MB内存时,而当消耗量达到550MB时系统将杀死应用进程。

Drew提到,以iPhone 4S的分辨率,单张照片包含的位图数据将达到30MB。这意味着最多在内存里存放7张照片,超过这一数量操,作系统就会因为应用耗尽了它所享有的内存而杀死它的进程。因此,如果某个应用用来处理图形或视频等多媒体文件,那么它必须非常谨慎地规划在内存中存放哪些内容,以及存放多长时间——因为内存是非常有限的

内存方面的第二个因素在于效率。JavaScript带有垃圾回收机制,因此开发者无需手动管理内存——这一特性正是为了减轻开发者的工作。然而,内存回收是有其代价的,而且这种代价在内存受限的环境下呈指数增长。


这张图意味着“如果我们拥有的内存是我们真正需要的6倍,那么一切安好。但如果少于需要的4倍那可就惨了。”

实际上,在内存受限环境中,垃圾回收机制的性能呈指数下降。如果我们编写Python、Ruby或JS应用并在桌面计算机中运行,那么很可能整个体验都处在图表右侧,而永远不会遇到缓慢的垃圾回收器。不过,让我们在图表左侧花些时间,看看我们需要面对的其他问题。

这一表现或许可以解释,为何苹果永远不会让iOS上的Objective-C带有垃圾回收器,而是用ARC(同时在iOS和MAC中出现)来代替它。

虽然Drew在文章中列出了一些有趣的内容,但就像Brendan EichTweeter所说的一样,不是所有的应用都是CPU/内存密集型的。只有一些特定类型的应用会遇到这些问题,例如游戏和多媒体应用。尽管如此,对任何有兴趣了解移动Web性能的人来说,Drew万言书依旧值得一读。

查看英文原文:The Current and FuturePerformance of the Mobile Web

目录
相关文章
|
26天前
|
存储 监控 安全
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
|
1月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
54 3
|
29天前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
7天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
29 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
19天前
|
缓存 JSON 监控
如何在项目中保证 Web 组件化的性能
保证 Web 组件化的性能需要从多个方面入手,综合运用各种优化方法和策略。通过持续的优化和改进,能够提高组件化的整体性能,为用户提供更好的体验,同时也有助于提高项目的开发效率和质量。
28 8
|
20天前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
25 5
|
23天前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
37 4
|
1月前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
26天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
25天前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
66 1