据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?
确实非常的复杂!
首先可以明确的是,浏览器是少有的大型软件系统,其复杂性可以媲美我们每天使用的Windows系统。
微软甚至放弃自家的IE和edge内核,转而使用chrome内核,chrome优秀是一方面,更重要是开发浏览器内核太复杂,太烧钱。当然微软已经不是当年的微软了!
现在微软也在全力拥抱开源,甚至在win10里面支持内置wsl的Linux内核。如果说某一天我们使用的Windows系统,基于Linux内核开发,大家也不要太惊讶。
随着微软加入chrome阵营,chrome实力大增,会加速甩开其他浏览器!说不定某一天苹果也宣布使用chrome内核!
从浏览器的基本功能来看,其核心模块有:
网络请求
我们知道,目前web系统,都是BS模式的,也就是系统相关的页面,发布在服务器端的。
浏览器想要运行,第一件事情就是向服务器请求页面代码。
这就是网络请求,浏览器的最基本功能之一。
页面解析
请求到页面之后,需要对页面进行解析,先认识页面,然后才能进行下一步工作。
页面渲染
解析了页面之后,就可以对页面进行渲染了。渲染完成之后,我们就看到了web系统的界面了。
这些功能,似乎看起来没有那么复杂!那浏览器的几千万行代码,到底在实现了哪些复杂的功能呢?
模块代码量统计
稍后补充。。。
此外,现代浏览器还具备以下特点:
跨平台
这意味着你不能简单调用操作系统的api来实现功能,必须考虑跨平台问题,还有可能要从头实现某些重要功能。
高性能
Google专门为Google chrome打造了高性能的V8引擎,来解释执行JS代码。如今结合nodeJS,V8引擎甚至已经在后端发力。
高标准
也就是各种web标准要支持到位,要做到上图一样,360度无死角,才能成为优秀的浏览器。
- HTML
HTML用来描述网站页面的界面骨架,由一颗树形结构的HTML文档构成,也称为DOM树。
在HTML中,记录了构成页面的各种控件及其位置,参数等等基本结构。页面加载的时候,是最先下载HTML并解析的。
HTML最新版本是HTML5,其中加入了大量新特性,浏览器必须支持这些最新的HTML特性,才能算是一个合格的浏览器。
- CSS
CSS则是负责页面的美化装修。什么前景色,背景色,圆角边框,边框颜色,边框大小等等。基本上你能想到的界面调整参数,CSS里面都应有尽有!这也正是浏览器的一个复杂模块。目前最新版本是CSS3。
- JavaScript
界面骨架有了,也可以做的非常漂亮,尽善尽美了。那页面的逻辑怎么办?
没错,JavaScript就是负责前端页面的逻辑部分的。从最早期的前端输入校验,发展到如今的近乎万能,JavaScript经历了漫长的发展。
其中也经历了各种标准和版本,目前的主流版本是ES6。
浏览器为了支持最新的JavaScript,也需要开发巨量代码。
- WebGL
WebGL是最近几年才火爆起来的一个特性,他将web的渲染性能大幅提升。
因为通过WebGL,我们可以直接调用显卡进行渲染和计算。
这使得在web端实现大型的三维引擎成为可能。比如Three.js,Cesium等等。
为了支持webgl,浏览器又必须进行大量开发工作。
- Web Assembly
前面说到了JavaScript,使用JavaScript我们已经可以在web端实现大型三维引擎了。
尽管如此,还是不能满足我们目前对于web端的更为复杂的应用的效率要求。还是有很多人认为JavaScript的速度慢。
于是人们又起草了Web Assembly的标准。这是一种类似汇编语言的web标准,号称web端的汇编语言。
其目的在于解决JavaScript执行效率低的问题。同时可以使用C++等高级语言,开发Web Assembly模块。
如今已经有很多Web Assembly结合JavaScript的应用案例了。如Google在其Google earth的web版本中就大量使用该技术。
这也会导致浏览器花费大量代码来支持Web Assembly的各种功能。
总结
非常感谢您能够耐心的看到这里。不知道您有没有发现,我们在Windows里面做的很多事情,在浏览器里面,居然也能做了!这说明浏览器已经慢慢发展到和操作系统差不多的功能了,您说他能不复杂吗!
据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?相关推荐
- linux越狱amd卡代码,为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息
原标题:为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息 AMD在不经意间泄露了自家下一代APU的信息,其代号"Van Gogh(梵高)". 据外媒报道称,A ...
- 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO...
当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考.码过十万行代码的程序员,能写一本进阶版技术手册,给陷 ...
- 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO
当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考.码过十万行代码的程序员,能写一本进阶版技术手册,给陷 ...
- linux内核5万行代码,[图]AMD为Linux内核贡献27.5万行代码 确认Van Gogh APU支持DDR5和VCN3...
原标题:[图]AMD为Linux内核贡献27.5万行代码 确认Van Gogh APU支持DDR5和VCN3 在本周五发布的补丁更新中,AMD 为下一代 Van Gogh APU 向 Linux 贡献 ...
- 上千万行,十几G源码,浏览器为什么这么“变态”?
因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0.2T架构师学习资料干货分 ...
- 用浏览器读取图片上的文字信息,这个方法很实用
又到多御安全浏览器安卓版更新的时候了,这一次的android版 1.8.0 更新,带来的更新内容比较少,但依然有值得我们关注的功能.此次更新中,多御新增了长按图片文字读取功能,有了这个功能就不用一个个 ...
- 炉石传说的代码是Java吗,炉石传说:设计师亲儿子,上千行代码写出来的,却天天被玩家怼!...
炉石传说的玩家,总是喜欢把某个职业,当然是暴雪亲儿子亲女儿.哪个登顶了,哪个拥有一套T0级别的卡组了,哪个职业就成了暴雪亲生的了.哪怕这个时间往往不会太长,最多只能维持几个月,但只要有T0卡组,甚至是 ...
- ubuntu内核和主线内核_ubuntu上更新和卸载Linux内核
简介 在调试代码过程中需要用到最新版本内核,上网学习良久,总结并输出这文章,方便自己将来查询. 本文不讲解原理,属于工具文,为方便阅读,尽可能只提示如何操作. 查询当前本机内核版本 $ uname - ...
- 一台微型计算机_Linux的上百万行代码,一台新的微型计算机以及Google和Microsoft的更多产品
一台微型计算机 在本周的开源新闻摘要中,我们介绍了用于Linux的一百万行代码,来自Google和Microsoft的更多开源软件,用于教育的新型微型计算机等等! 开源新闻:2015年7月4日至7月1 ...
最新文章
- ##管家婆项目(service层)
- mysql插入大量数据总结
- oshi.systeminfo 获取cpu的数量_CPU 的基础知识
- oracle jdedward,Oracle JDEdwards EnterpriseOne Tools任意文件上传漏洞(CVE-2011-2317)
- python是干什么的
- java mina 大文件传输_mina 传输java对象
- linux rm -rf 根目录,在linux 根目录rm * -rf以后怎么办?
- Qt5调用VBS脚本
- 教你如何用PS制作iOS端APP应用图标AppIcon.appiconset
- uniapp 微信内置浏览器h5打开app
- 正方教务系统对服务器的要求,正方软件教务系统功能介绍.docx
- 在VMware Update Manager(VUM)里添加HP的补丁源
- Favicon网页收藏图标在线制作PHP网站源码/ICO图片在线生成/支持多种图片格式转换
- 【anaconda】Multiple Errors Encountered与安装包graphviz失败
- 【Cactus仙人掌图】仙人掌DP学习笔记
- 计算机简历800字,我的简历作文800字
- 萨班斯法案:由来、影响及争论
- nvidia显卡的Exclusive Process模式
- 程序人生:起薪13k,兜兜转转还得是软件测试
- 结合CAP理论分析ElasticSearch的分布式实现方式
热门文章
- Overview of HEVC之2 Slices and Tiles
- Spring-context-ConfigurationClassBeanDefinitionReader类
- Java-虚拟机-常量池的表现方式
- pycharm定时运行python脚本_Python脚本用于定时关闭网易云音乐PC客户端
- GnuPG 的PGP使用
- 08-图8 How Long Does It Take
- JetBrains系列WebStorm等中文输入法无法跟随光标的问题的解决办法
- 正整数和小数的正则写成自定义插件
- 打造Android微信朋友圈下拉刷新控件
- layoutSubviews 与 drawRect