简单有效的 chromium 内存优化

Chromium浏览器内核是内存大户。为此我们进行了一些内存优化的预研工作。

首先我们先对源码无入侵的进行内存优化。

经过都命令行参数的一轮浏览,List of Chromium Command Line Switches « Peter Beverloo

我们找到以下命令行具有内存优化效果:

enable-low-end-device-mode 以低性能设备模式运行

in-process-gpu:避免创建GPU进程

disable-gpu:关闭GPU加速(如果没有用到webgl,复杂的canvas绘制,可以考虑关闭)

enable-features="NetworkServiceInProcess,StorageServiceInProcess,AudioServiceInProcess,TracingServiceInProcess":只保留渲染进程

js-flags=“--jitless,--optimize_for_size":减少js执行内存消耗

以上命令对降低内存使用有明显的效果,至少能减少30%以上内存耗用。

不过enable-low-end-device-mode有坑,会导致浏览器颜色数量从32位降低到16位。因此我们不能用这个。

但是enable-low-end-device-mode对内存控制很有效果,接下来我们对源码进行修改,尝试继续减少内存耗用。

然后我们通过修改源码进行内存优化:

1.修改可用内存检测逻辑:找到enable-low-end-device-mode的原理,发现在enable-low-end-device-mode模式下,

AmountOfPhysicalMemory返回内存数为512MB;在代码其他地方也针对512MB有一些特殊处理。因此我们修改此处源码,返回513MB,避免陷入16色以及其他一些低内存设备的特殊逻辑,但是又严格限制了各项缓存的最大大小。

2.继续探索,发现render消耗内存严重。经过分析,找到

src\third_party\swiftshader\src\Device

发现Renderer.hpp直接申请了很大的buffer以支持并行渲染。

改小,改小。

这里要是能改成按需申请就最好了,不过改动太大。我们尽可能对源码保持最小更改。

还有一些边边角角渲染内存的,优化一下。

3.继续探索,发现在创建浏览器进程比较消耗cpu和内存的又一大户,和3D有关的glsLang解析引擎:

其在初始化的时候会调用warmup,看上去是为了修复什么bug而直接跑一段glslang,要是用不上赶紧屏蔽掉。

因此新增eef-disable-glslang命令支持disable glslang模块。

优化效果

这是最简单快速有效的内存优化。经过这一轮折腾,我们测试了一下:

使用原生chromuim引擎运行Typora:

使用优化后的eef引擎运行Typora:

总内存从119MB降到78MB,进程数也大大减少。

除了优化引擎本身,对html,js的优化也是非常重要的。chromuim提供的强大的trace-config-file命令,可以了解引擎各个部分的内存消耗情况。更多的针对资源cache等策略的优化,也能大大降低内存使用。

  • 42
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值