请选择 进入手机版 | 继续访问电脑版
Mozilla

火狐社区

登录    注册

用新浪微博连接 QQ互联

寻找“刚刚好”的浏览器:为什么Firefox是恰到好处的那一个

yingliu Mozilla员工 发表于 2017-6-20 18:06:12 | 显示全部楼层 [复制链接]
5 2700
本帖最后由 yingliu 于 2017-6-20 18:08 编辑

作者:Firefox 产品营销总监 Ryan Pollock

1fII2MZjyQ.jpeg
多进程的 Firefox 不仅速度丝毫不逊其它浏览器,也不像 Chrome 一样会占用太多内存而拖慢计算机速度

几天前,Mozilla 发布了新的多进程处理架构的 Firefox 。这是 Firefox 浏览器有史以来第一次能使用多个不同的进程来执行网页内容(标签页)。

或许你知道其它的浏览器过去也曾这么做过。也许你认为你了解多进程浏览器,又或许你不曾听过,无论是哪一种情况,请继续读下去。

本文将说明 Firefox 采用多进程架构代表着什么意义,以及为什么 Firefox 的多进程会异于甚至优于别家的浏览器。

当我在思考如何解释其中涉及的技术时,我想起我常常读给女儿听的童话故事:《金发姑娘和三只熊》(《Goldilocks and the Three Bears》)。

Goldilocks 原则」在网页浏览器的展现
在这个童话故事里,Goldilocks觉得熊爸爸的粥太烫了,熊妈妈的粥太冷,只有熊宝宝的粥的温度「刚刚好」。这个凡事必须有度、不能超越极限的概念便是所谓的「金发姑娘原则」(Goldilocksprinciple)

天文学家们在寻找 Goldilocksplanet(适居带星球),Mozilla 则想要打造「Goldilocks 浏览器」。在我看来,在现在既有的浏览器中,还没有一个在速度和内存用量之间达到「刚刚好」的平衡。

浏览器使用了多少内存,不仅会影响到你的浏览器使用体验,也会影响到计算机其他运行中应用程序的使用体验。如果你用的浏览器是内存怪兽,计算机剩下的内存可能就不足以跑其他的应用程序。事实上,如果浏览器吃掉太多内存,计算机可能会慢如牛。

相反的,如果浏览器不占用太多内存,它又可能无法做一些能让浏览体验又快又流畅的事情。若要符合Goldilocks 原则,一个「刚刚好」的浏览器就是使用了适量的内存还能跑得快,但又不至于消耗过多计算机资源。

2zQwuYytO.png
网页浏览器往往比其他应用程序占用更多内存。如果浏览器用掉太多内存空间,计算机剩下的内存就会很少,而拖慢整台计算机运行的速度

应用程序的成分
熊妈妈的粥”里面有两个成分:燕麦和奶粉。应用程序也有两个主要成分:进程(processes)和线程(threads)。

当你开启应用程序,应用会启动一个进程。此进程会启动许多线程,每一个线程都共享同样的内存。进程使用线程来处理具有不同优先级的不同种类的工作。举例来说,高优先级的线程可能负责绘图程序的用户接口,因此,浏览器知道这一点,而会快速响应鼠标的点击或键盘的输入动作。另一个优先级较低的线程则可能在后台计算资料。如果你想了解计算机上正在运行的程序,你可以打开「任务管理器」(Windows)或「活动监视器」(macOS)。

有些时候,在执行需要海量存储器和运算资源的工作时,或基于系统安全和稳定考虑而须隔离处理的工作时,应用程序的处理进程不会启动新的线程,而会启动新的进程。

大部分的应用程序都只执行单一的进程及多个线程。但是,网页浏览器不是大部分的应用程序。

3H23hdXp.png

温暖又美味:适合现代网络的多进程浏览器
自2004年推出 Firefox 后,Mozilla 和社区就一直在推动 Web 功能的发展。在慢慢且稳定的发展中,Web 成为了一个平台——不仅仅是展现静态文件,也是电子邮件、文字处理和社交网络等交互应用的平台。

欢迎来到 Web 2.0 时代!

虽然新的 Web 时代非常美好,但是Firefox 和其它浏览器同时执行多个 Web 应用的速度,却远远落后于 OS 执行原生应用的速度。这个问题如何解决?浏览器的运行方式必须更像 OS ,也就是使用多个进程来执行 Web 应用。

在多进程的架构里,你可以在一个标签页内流畅地使用网页,同时间,其它几个标签页还能执行其它的网页内容。在过去,Mozilla 工程师虽然了解多进程的可行性,但把 Firefox 改为多进程就意味着必须破坏依靠单进程运行的Firefox 附加组件(Add-On)。考虑到许多用户都喜欢运用附加组件定制出个性化的 Firefox ,所以 Mozilla 起初是不愿意踏出这一步的。这样看来,把 Chrome 设计为多进程浏览器的人很值得佩服。

「电解」(Electrolysis)登场:Mozilla 把 Firefox 改为多进程的努力
我们花了很长的时间,才研究出能让Firefox 既支持附加组件,又能让其与多进程运行和平共处的方式。最后,Mozilla 投入两个相关的计划:(1) 把 Firefox 分割为多进程的「电解」(Electrolysis)项目;以及 (2) 把传统的附加组件转为跨浏览器的扩展组件(WebExtensions)。两项计划都是大工程!

2016年8月,Mozilla 推出 Electrolysis 的第一期计划成果,把 Firefox 执行 UI 和网页内容(标签页里的页面)的程序一分为二。现在,Firefox 正式发布 Electrolysis 的下一期成果,大幅度地增加Firefox 执行和保护网页内容时使用到的进程,并同时加强进程的管理,以改善性能、稳定度和内存使用量。这些新增的进程可能跨不同运算核心来运行,所以可以大幅减少网页之间彼此影响或浏览器的整体性能下降的可能性。如果其中一个内容进程真的卡死时,其它内容进程和其所呈现的网页也完全不受影响。

这么做的好处是,现在的Firefox 比过去跑得更快、更稳定。

为什么 Chrome 会过热而 Firefox 不会
通过最新发布的 Firefox54,现在,Firefox 和 Chrome 一样采用了多进程,但两者不同之处在于,Firefox 还多做了一些事,能避免吃掉太多的计算机内存空间。

Chrome 的预设是为你所访问的网站每一个实体(instance)各自分配一个单独的内容处理进程。如果你在 Chrome 开启 10 个标签页上分别访问10 个网站,你就会有 10 个不同的处理进程,而其中的每一个进程都有自己的内存——各自拥有浏览器引擎的独立实体。一般来说,在 Chrome 里面每打开一个标签页,就会占用好几百 MB 的 RAM。这种大手大脚启用新进程的做法,可能导致 Chrome 吃掉非常大的内存空间。

相较之下,Firefox 的做法就比较保守,使得 Firefox 比 Chrome 占用较少的内存。Firefox 的预设是针对网页内容最多开启 4 个处理进程。也就是说,你所打开的前 4 个标签页会分别使用一个处理进程,后面再新增的标签页则会使用这 4 个进程内的线程。每一个进程执行的多个标签页会共享已存在于内存的浏览器引擎,而不是各自启用一个浏览器引擎。

4QGfMhv6QQ.png
Chrome 为每一个网站实体执行独立的进程和引擎;Firefox 则会重复使用进程和引擎,以限制内存的用量

Firefox 和其它浏览器内存用量的对比
Firefox 之所以会使用 4 个进程,因为那是对所有 Firefox 用户来说「刚刚好」的数量。在最多只用到 4 个进程的情况下,你的计算机还能剩下足够的内存来跑 Firefox 以外的程序。

有人做了一个测试,比较Firefox 和其它浏览器的内存用量,指出在几种不同系统上的差异:
5gVbOCsoA.png
  • Windows 10:Chrome 的内存用量是 Firefox 的1.77 倍(64位)和2.44倍(32位)
  • macOS:Chrome 的内存用量是 Firefox 的1.36倍(64位)
  • Linux:Chrome 的内存用量是 Firefox 的1.42倍(64位)

如果你用的是内存 8GB 以下的笔记本电脑,最好谨慎挑选浏览器。Firefox 如此贴心谨慎地使用计算机内存,让你可以更不受限地浏览网站,同时还能在计算机上执行网页浏览以外的更多任务。

如果你的计算机 RAM 超过 8GB,你可能就想让 Firefox 启用更多的处理进程。这会用到更多的内存,但能让 Firefox 跑得更快。若你想更改 Firefox 运行时的处理进程数量,请在地址栏中输入about:config后,调整 dom.ipc.processCount设定的数字(我们会在后续发布的版本中,对此提供可见的默认设置项)。

Firefox 全新的多进程架构是浏览器开发中的一大进步,在速度和内存用量之间取得了绝佳的平衡点。

量子计划:为现代运算催生「最适合」的浏览器
尽管 Mozilla 自豪于 Firefox 54 的推出,但是,Mozilla 认为,包括 Firefox 在内,没有一个浏览器是真正「最适合」现代计算机的——至少目前为止还没有。今日的运算设备与以往已大不相同,然而,浏览器却未同步进展到可充分运用多核 CPU 和 GPU 的优势。因此,Mozilla除了通过「电解」(Electrolysis)项目来建立Firefox 的多进程架构,还致力推展另一项项目——「量子」(Quantum),以优化在进程里面执行的浏览器引擎。

凭借量子计划,Mozilla 正为 Firefox 开创全新的格局。Mozilla 的工程师正运用Rust来编写超高速的平行算法,而这是过去以 C++ 语言所难以安全编写出来的。通过这些演算机制,Firefox引擎的主要部分(如 CSS 样式编程)将能跨多个 CPU 核心来平行执行,而不必再在一个核心上连续执行。还有,在量子项目下,Firefox 将运用线程,锁定正在使用中的标签页来提供运算和网络联机资源。Firefox的执行速度将大幅提升,同时还会体贴地顾及你的内存和计算机使用的需求。

希望最新发布的 Firefox 能令您满意,也希望您能继续关注量子计划的后续进展。Mozilla 的目标是要让 Firefox 成为对每一台计算机和每个人来说,都是「恰到好处」的浏览器。



隐元 老狐狸
发表于 2017-6-20 20:40:50 | 显示全部楼层
mozilla总是给业内树立最高水平之标杆!
kinglong2016 社区新人
发表于 2017-6-21 15:50:10 | 显示全部楼层
310971373 狐狸精
发表于 2017-6-21 16:32:26 | 显示全部楼层
刚刚好的浏览器,支持哦!
FlamingFox 狐狸仔
发表于 2017-6-26 20:06:49 | 显示全部楼层
我也支持这个“刚刚好”的新版火狐,如果能把浏览器内的脚本未响应的问题彻底解决好,再加上这些功能在内,那就更好了。
灵.风 社区新人
发表于 2017-7-3 10:05:23 | 显示全部楼层
还是很期待对于多核cpu甚至是gpu的优化!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发新帖
论坛更多 »
火狐微信
快速回复 返回顶部 返回列表