开篇词,深入了解浏览器的工作原理,能帮助您在性能优化和解决日常的工作难题上,提升效率和思想。
您好,我是丁陆超是一名普通的前端开发从业者,本着对底层知识的渴望与意愿准备写一些的浏览器底层和v8底层的原理,经过对大神的文章解读加上自己对问题的理解汇总,即作为笔记也作为分享。
下面对浏览器的发展史做一下了解
1995 年,美国网景公司因“网景浏览器”的发布而快速崛起,之后网景试图开发一个依靠浏览器的网络操作系统。这引起了微软的注意和警惕,于是同年微软发布 Windows 95,并捆绑了 IE,大获成功,到 2002 年,微软就已经占据了浏览器市场 80% 的份额。
直到 2008 年 Chrome 浏览器横空出世,这种垄断局面才算被打破。Chrome 浏览器完全颠覆了之前浏览器的架构设计,在速度和安全性上占据了绝对优势,市场份额占比剧增(据 StatCounter 2019 年的统计数据显示,Chrome 占据了 63% 市场份额)。在 2010 年底,Google 还推出了一款网络操作系统——ChromeOS。
可以看到,浏览器自诞生之日起,其地位就一直很重要,而且这种重要性还在不断加强。
三个大的进化路线,希望能让你了解目前的 Web 应用到底能做什么,以及未来能适用于那些新领域。
第一个是应用程序 Web 化。随着云计算的普及和 HTML5 技术的快速发展,越来越多的应用转向了浏览器 / 服务器(B/S)架构,这种改变让浏览器的重要性与日俱增,视频、音频、游戏几大核心场景也都在往 Web 的使用场景切换。在 webassembly 的出现更是使得应用更加强大和强悍。
第二个是 Web 应用移动化。对于移动设备应用,Web 天生具有开放的基因,虽然在技术层面还有问题尚待解决(比如,渲染流程过于复杂且性能不及原生应用、离线时用户无法使用、无法接收消息推送、移动端没有一级入口),但 Google 推出了 PWA 方案来整合 Web 和本地程序各自的优势。但是pwd现在不温不火的情况期待更好的方案出现。
第三个是 Web 操作系统化。在我看来,Web 操作系统有两层含义:一是利用 Web 技术构建一个纯粹的操作系统,如 ChromeOS;二是浏览器的底层结构往操作系统架构方向发展,在整个架构演化的大背景下会牵涉诸多改变,下面列举一些我认为相对重要的改变。
第三个是 Web 操作系统化。 Web 操作系统有两层含义:一是利用 Web 技术构建一个纯粹的操作系统,如 ChromeOS;二是浏览器的底层结构往操作系统架构方向发展,在整个架构演化的大背景下会牵涉诸多改变,下面列举一些我认为相对重要的改变 Chrome 朝着 SOA 的方向演化,未来很多模块都会以服务的形式提供给上层应用使用;在浏览器中引入多种编程语言的支持,比如新支持的 WebAssembly;简化渲染流程,使得渲染过程更加直接高效;加大对系统设备特性的支持;提供对复杂 Web 项目开发的支持。 也就是说,浏览器已经逐步演化成了操作系统之上的“操作系统”。
为什么学习浏览器工作原理?
-
准确评估 Web 开发项目的可行性 比如在一个多规格的场景如果直接用js处理505050*50的分类,直接在主线程上操作是不是会造成丢帧阻塞后面的执行任务? 这个时候是不是可以借助worker独立于主线程来操作? 我认为我所做的最正确的事就是选对了方案
-
从更高维度审视页面 要能站在用户体验角度来考虑页面性能,提升用户体验。 当用户请求一个网站时,如果在 1 秒内看不到关键内容,用户会产生任务被中断的感觉。 当用户点击某些按钮时,如果 100ms 内无法响应,用户会感受到延迟。 如果 Web 中的动画没有达到 60fps,用户会感受到动画的卡顿。
如果你理解了比如,首屏的显示就涉及了 DNS、HTTP、DOM 解析、CSS 阻塞、JavaScript 阻塞等技术因素,其中一项没处理好就可能导致整个页面的延时。
更加可以把这些知识点串成线,连成网,最终形成自己的知识体系,练就像专家一样思考问题、解决问题的能力。
如果理解浏览器的渲染流程,那么你应该知道目前页面的渲染依然存在很大缺陷,然后你就清楚如何避开这些问题,从而开发出更加高效的 Web 应用。与此同时,Chrome 团队也在着手改善这些缺陷,比如正在开发的下一代布局方案 LayoutNG,还有渲染瘦身方案 Slim Paint,其目的都是让渲染变得更加简单和高效。
综上可以看出,触发这些改变的背后因素是当前技术制约了现实的需求,所以了解浏览器是如何工作的,能让你站在更高维度去理解前端。