笔记:Chrome 对浏览器的改进
最近公司架构师推荐看了一篇文件,觉得写得很好,特做笔记:
http://aosabook.org/en/posa/high-performance-networking-in-chrome.html
过去的浏览器只有一个进程,所有打开的 page 都共用同一个内存地址空间,任何地方发生的错,都回影响整个进程。
chrome 是基于多进程模式,每一个tab都是一个单独进程,由此提供隔离的内存和安全sandbox
web 程序的执行包括3个方面
1)fetching resources (using Blink)
2) page layout and rendering: ( v8 engine)
3) JavaScript executio:
后两个都是单线程的因为 DOM 的修改不能并发;而JS是单线程语言;但尤其现在cpu的强大,它们都不是瓶颈问题。
性能的瓶颈在第1) fetching resources
一个普通 page 包含下面的东西
- 1280KBinsize
- composed of88resources
- connects to15+ distincthosts
所以网络传输在web应用时短和爆发性的
资源请求的过程
给定url, browser 首先判断是否在cache, html header有(Expires
,Cache-Control
, etc.),browser 就访问cache ,否则花费时间的网络访问开始了。
包括
1) proxy 检查
2) dns
3) tcp ( 三次握手 ), 如果是 ssl 增加2遍三次握手
4) 服务处理和相应
- 50 ms forDNS
- 80 ms forTCPhandshake (oneRTT)
- 160 ms forSSLhandshake (twoRTTs)
- 40 ms for request toserver
- 100 ms for serverprocessing
- 40 ms for response from theserver
That’s 470 milliseconds for a single request
再看时间,用户可接受的latency 是1秒,所以必须大量减少,网络访问的开销。
Delay | User Reaction |
---|---|
0 - 100 ms | Instant |
100 - 300 ms | Small perceptible delay |
300 - 1000 ms | Machine is working |
1 s+ | Mental context switch |
10 s+ | I’ll come back later… |
原先以为这个开销是没办法减少的,但 google 的确通过改进 chrome 的 network stack 大大减少了这些开销
通过kernel process 的 network模块给其他模块提供统一的服务
好处是可以做 socket pool, socket resue, 验证, cookie, cache 可以被所有的 render 进程共享,还有利于优化
FYI
对于手机,平板上浏览器,其内存小,用电有限制,但用户开的页面也不多,chrome 根据内存大小来决定 render 进程的数目。如果资源太小,android退化为单线程多进程模式。对于手机需要考略 radio 的耗电, 付费网络的使用等因素
除了构造network stack,chrome 对网络的优化 preXXXX ( 提前做某些事情)
Technique | Description |
---|---|
DNSpre-resolve | Resolve hostnames ahead of time, to avoidDNSlatency |
TCPpre-connect | Connect to destination server ahead of time, to avoidTCPhandshake latency |
Resource prefetching | Fetch critical resources on the page ahead of time, to accelerate rendering of the page |
Page prerendering | Fetch the entire page with all of its resources ahead of time, to enable instant navigation when triggered by the user |
但用户鼠标到某link(还没有点下), 当用户在 url 输入 xxx, 就先去做事情,当然只所以能做这些,是对用户行为进行追踪和统计,防止了无效的 preXXXX.
除了这些 google 还发明一些标签,嵌入在 html 中,明确指示 chrome 做 preXXX 的事情。
看来只要仔细研究,是可以把一些不可能的事情变现实。
笔记:Chrome 对浏览器的改进相关推荐
- linux chrome ui字体,谷歌Chrome 69浏览器标签栏字体模糊的解决方法
谷歌发布的Chrome 69浏览器有了很大的提升,比如新版UI.安全密码.速度提升.画中画功能等许多方面的改进,但是,有一些用户在使用Chrome 69后反馈称标签栏的文字在高分屏上有些模糊不清或者说 ...
- 【工具】部分浏览器截图操作--Edge+Chrome+360浏览器
[工具]部分浏览器截图操作–Edge+Chrome+360浏览器 一.Google浏览器截图 1,进入Google浏览器开发者模式 在网页空白处右击鼠标,选择"检查(N)",打开控 ...
- chrome/chromium浏览器的Enter passwod to unlock your login keyring
简直就跟牛皮癣一样,打开浏览器总是出现这个,困扰我很多年了 sudo apt-fast install seahorse 启动命令 seahorse & 把下面图中左上角Login,右键会出来 ...
- 最新版chrome 70浏览器同步、清除Cookie设置将更改
最新版chrome 70浏览器同步.清除Cookie设置将更改 谷歌在最新的Chrome 69浏览器中引入了一项改动,用户在浏览器上登录任何谷歌旗下的服务时,也将同时在浏览器登录自己的谷歌账号.此举受 ...
- 360浏览器支持ajax吗,请问IE11,chrome,360浏览器7.1极速等这些浏览器不支持ajax技术吗?...
请问IE11,chrome,360浏览器7.1极速等这些浏览器不支持ajax技术吗?0 qdh_water2016.01.12浏览69次分享举报 以下是源代码,下面的代码在IE9,IE8,360浏览器 ...
- 基于.net开发chrome核心浏览器【五】
原文:基于.net开发chrome核心浏览器[五] 一:本篇将解决的问题 本章主要为了解决一下几个问题: 1.JsDialog的按钮错位的问题 我们开发出的浏览器,在有些操系统上调用alert,con ...
- Chrome内核浏览器显示【您的时钟快了,您计算机的日期和时间不正确】解决办法
Chrome内核浏览器显示[您的时钟快了,您计算机的日期和时间不正确]解决办法 出现问题 问题原因 解决办法 综上 [您的时钟快了,您计算机的日期和时间不正确]解决办法 出现问题 这几天我使用[联想浏 ...
- Chrome打开浏览器弹出网页、浏览器被劫持解决方法
Chrome等浏览器,打开浏览器弹出网页.浏览器被劫持 通常有如下几种情况,对照检查: 1.找到浏览器"快捷方式"的文件位置,然后右键打开,选择"属性": 查看 ...
- Chrome 55 浏览器推出 Android 离线下载功能
谷歌已经推出适用于Mac,Windows和Linux的Chrome 55浏览器,其中一项重大更新是默使用HTML5,以便进一步让Flash寿终正寝.现在谷歌又推出Chrome 55浏览器安卓版,增加了 ...
最新文章
- 网站数据分析:基于用户细分的比较分析
- ExtJS学习:MVC模式案例(三)
- 【Android】Android模拟器无法上网问题
- php迭代器作用,PHP迭代器介绍
- densenet网络结构_DenseNet轻量型网络
- Python通过WMI读取主板BIOS信息
- iOS 对付内存泄漏,来说说我的调试方法
- Altium_Designer如何快速寻找元件和封装
- Springboot结合Redis实现分布式定时任务
- 既然选择了编程,只管风雨兼程
- 【礼物】的定义不同所造成的诡异反差感
- halcon轮廓选择
- 用Enterprise Architect画类图和顺序图(一)
- 2014年中款MacBook Pro 更换CPU散热硅脂再战5年
- 7脚spi OLED屏幕改造成IIC屏幕
- 刘德华开抖音了,一键下载华仔所有无水印视频
- Shodan在渗透测试及漏洞挖掘中的一些用法
- 计算机网络期末复习提纲,湖南科技大学《计算机网络微课堂》课题笔记
- #Linux#进程间通信# 管道(pipe)-匿名管道pipe
- Teradata 记事本