确实非常的复杂!

首先可以明确的是,浏览器是少有的大型软件系统,其复杂性可以媲美我们每天使用的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里面做的很多事情,在浏览器里面,居然也能做了!这说明浏览器已经慢慢发展到和操作系统差不多的功能了,您说他能不复杂吗!

据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?相关推荐

  1. linux越狱amd卡代码,为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息

    原标题:为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息 AMD在不经意间泄露了自家下一代APU的信息,其代号"Van Gogh(梵高)". 据外媒报道称,A ...

  2. 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO...

    当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考.码过十万行代码的程序员,能写一本进阶版技术手册,给陷 ...

  3. 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO

    当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考.码过十万行代码的程序员,能写一本进阶版技术手册,给陷 ...

  4. 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 贡献 ...

  5. 上千万行,十几G源码,浏览器为什么这么“变态”?

    因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0.2T架构师学习资料干货分 ...

  6. 用浏览器读取图片上的文字信息,这个方法很实用

    又到多御安全浏览器安卓版更新的时候了,这一次的android版 1.8.0 更新,带来的更新内容比较少,但依然有值得我们关注的功能.此次更新中,多御新增了长按图片文字读取功能,有了这个功能就不用一个个 ...

  7. 炉石传说的代码是Java吗,炉石传说:设计师亲儿子,上千行代码写出来的,却天天被玩家怼!...

    炉石传说的玩家,总是喜欢把某个职业,当然是暴雪亲儿子亲女儿.哪个登顶了,哪个拥有一套T0级别的卡组了,哪个职业就成了暴雪亲生的了.哪怕这个时间往往不会太长,最多只能维持几个月,但只要有T0卡组,甚至是 ...

  8. ubuntu内核和主线内核_ubuntu上更新和卸载Linux内核

    简介 在调试代码过程中需要用到最新版本内核,上网学习良久,总结并输出这文章,方便自己将来查询. 本文不讲解原理,属于工具文,为方便阅读,尽可能只提示如何操作. 查询当前本机内核版本 $ uname - ...

  9. 一台微型计算机_Linux的上百万行代码,一台新的微型计算机以及Google和Microsoft的更多产品

    一台微型计算机 在本周的开源新闻摘要中,我们介绍了用于Linux的一百万行代码,来自Google和Microsoft的更多开源软件,用于教育的新型微型计算机等等! 开源新闻:2015年7月4日至7月1 ...

最新文章

  1. ##管家婆项目(service层)
  2. mysql插入大量数据总结
  3. oshi.systeminfo 获取cpu的数量_CPU 的基础知识
  4. oracle jdedward,Oracle JDEdwards EnterpriseOne Tools任意文件上传漏洞(CVE-2011-2317)
  5. python是干什么的
  6. java mina 大文件传输_mina 传输java对象
  7. linux rm -rf 根目录,在linux 根目录rm * -rf以后怎么办?
  8. Qt5调用VBS脚本
  9. 教你如何用PS制作iOS端APP应用图标AppIcon.appiconset
  10. uniapp 微信内置浏览器h5打开app
  11. 正方教务系统对服务器的要求,正方软件教务系统功能介绍.docx
  12. 在VMware Update Manager(VUM)里添加HP的补丁源
  13. Favicon网页收藏图标在线制作PHP网站源码/ICO图片在线生成/支持多种图片格式转换
  14. 【anaconda】Multiple Errors Encountered与安装包graphviz失败
  15. 【Cactus仙人掌图】仙人掌DP学习笔记
  16. 计算机简历800字,我的简历作文800字
  17. 萨班斯法案:由来、影响及争论
  18. nvidia显卡的Exclusive Process模式
  19. 程序人生:起薪13k,兜兜转转还得是软件测试
  20. 结合CAP理论分析ElasticSearch的分布式实现方式

热门文章

  1. Overview of HEVC之2 Slices and Tiles
  2. Spring-context-ConfigurationClassBeanDefinitionReader类
  3. Java-虚拟机-常量池的表现方式
  4. pycharm定时运行python脚本_Python脚本用于定时关闭网易云音乐PC客户端
  5. GnuPG 的PGP使用
  6. 08-图8 How Long Does It Take
  7. JetBrains系列WebStorm等中文输入法无法跟随光标的问题的解决办法
  8. 正整数和小数的正则写成自定义插件
  9. 打造Android微信朋友圈下拉刷新控件
  10. layoutSubviews 与 drawRect