谷歌 Chromium 博客 6 月 3 日发布博文,表示通过调整请求 cookie 的方式,早期测试显示所有平台的性能都有所提高。
~qA\u5sB9@ IFF1wfC
问题所在
/|v
b)J kidv^`.H$w 浏览器在单进程时代,由于相关数据都保存在内存中,可以较为轻松地管理 cookie。而现在包括 Chrome 在内的主流浏览器都使用多进程来提高性能和安全性。
iE
,"YCK A- #c1KU! Chrome 浏览器会为每个窗口、其他一些功能运行一个新进程,意味着处理 cookie 的方法必须调用更多的查询,从而减慢运行速度。
G{a_\'7 ySlGqR1H 谷歌表示在 Chrome 浏览器中,重复请求 cookie 是导致很多交互变慢的原因。翻译谷歌博文内容如下:
JY D\VaW eFQz G+/ 我们通过对缓慢交互的现场跟踪发现,一些网站正在触发连续多次获取 cookie 的低效场景。
@.QuIm8, +KP&D.wIo 我们采用了额外的指标来衡量 GetCookieString () IPC 在所有导航中出现冗余(返回的值与上次相同)的频率。
y]ya.YG 3X`N~_+ 我们惊讶地发现,87% 的 cookie 访问是多余的,在某些情况下,这种情况每秒可能发生数百次。
-e+im(2D= ]^QO^{Sz 在某些情况下,特别是当多个网站同时发出快速请求时,这些请求每秒会发生数百次,造成严重的延迟。最终,从网络服务同步(一次一个)获取 cookie 的旧方法造成了瓶颈。
IfCa6g<&( Bthp_cSmLs 解决方案
R]S!PSoL RAxp2uif 谷歌表示 Chrome 浏览器不再重复检查网络服务,而是保存 cookie 数据及其版本号的本地副本,这样,Chrome 浏览器就可以检查 cookie 是否拥有最新数据,而无需重复请求。
0y;1Dk! Dv=pX.Z+ 根据谷歌工程师的说法,这一改变让 cookie 相关信息的数量减少了 80%,cookie 访问速度加快了 60%。
AnBD~h h [O3)s] | 谷歌官方在博文中表示:
yV)9KGV+: Xh*NuHH 我们的想法是,document.cookie 的每个值现在配对单调递增的版本。每个 renderer 都会将上次读取的 document.cookie 与该版本缓存在一起。
A=wh&X <EuS6Pg 网络服务将每个 document.cookie 的版本保存在共享内存中。因此,渲染器无需向网络服务发送进程间查询,就能知道自己是否拥有最新版本。
(+bt{Ma ,#(k|Zztc -JdNA2P
在早期测试中,谷歌观察到所有平台部署该更新之后,性能最多提高 5%。
90a!_8o :-T[)Q+-3