我决定花些力气从头开始构建Web浏览器。在开始之前,我应该了解现代Web浏览器的常见功能,体系结构和功能是什么?
任何建议都受到高度赞赏!
我决定花些力气从头开始构建Web浏览器。在开始之前,我应该了解现代Web浏览器的常见功能,体系结构和功能是什么?
任何建议都受到高度赞赏!
Answers:
好把它分解成碎片。什么是网络浏览器?它有什么作用?它:
简而言之,这基本上就是Web浏览器。现在,其中一些任务非常复杂。即使听起来容易,也可能很难。获取外部内容。您需要处理以下用例:
我和其他人齐心协力的原因是渲染引擎很难(而且正如有人指出的那样,开发人员已经花了很多年的时间)。周围的主要渲染引擎是:
前三名必须被视为当今使用的主要渲染引擎。
JavaScript引擎也很难。其中有一些倾向于与特定的渲染引擎相关联:
当然,还有所有用户界面内容:页面之间的导航,页面历史记录,清除临时文件,键入URL,自动填充URL等。
那是很多工作。
听起来这是一个非常有趣的项目,但需要您付出巨大的努力。
这不是一件容易的事,但是从学术角度来看,您可以从中学到很多。
您可以检查一些资源:
但是从现实的角度来看,从头开始编写代码需要付出巨大的努力,这使我想起了这部漫画:
(来源:geekherocomic.com)
祝好运 :-)
大多数现代Web浏览器都是巨大的野兽,并且可能设计得很差,因为它们(以及Web本身)以一种相当随意的方式发展。
您首先需要非常明确地说明项目目标(以及您希望实现的目标)。这是您只是为了娱乐而做的事情,还是希望其他人使用您的浏览器?如果您期望其他人使用它,那么对他们的激励将是什么?期望您从头开始开发一个新的浏览器,使每个人都可以替代Chrome,Safari,Firefox,IE,Opera等,这是不切实际的。所有这些项目都需要10-15年的开发时间您,当您赶上他们时,他们将比您再领先10至15年。另外,他们背后还有很多人力资源,因此,如果您希望您的项目成功,那么在某个时候就需要这种人力资源。
这就是拥有大量资源的苹果和谷歌没有从头开始的原因。甚至没有微软从头开始。原始的IE基于Mosaic。至今仍是从零开始的唯一重要浏览器是Opera,Konqueror和Lynx,不幸的是,它们的市场份额都很小。现在让我们忘掉Lynx,因为它是一个纯文本浏览器,大概它仍然存在的唯一原因是因为它服务于特定的利基市场。Opera可以说是有史以来最好的浏览器之一,但是它从来没有占有很大的市场份额,因此请记住,成功和创新不是一回事。KHTML是Konqueror背后的引擎,Konqueror从未成功,但它是Apple和Google都使用的WebKit的基础。我认为可以肯定地说,如果从未制作过KHTML,就不会存在Safari或Chrome。有趣的是,KHTML和Opera基本上都是由在奥斯陆同一座大楼工作的挪威程序员制作的。
您需要像构建操作系统那样看待构建Web浏览器,因为本质上这就是浏览器-它是用于运行Web应用程序的操作系统。就像操作系统一样,Web浏览器是一个非常复杂的软件,包含许多组件。当然,人们已经成功地从头开始创建了新的操作系统。莱纳斯·托瓦尔兹(Linus Torvalds)浮现在脑海。他使Linux成为有史以来最成功的操作系统之一。
当然,您还面临其他挑战,这使得构建新的成功浏览器比构建新的成功操作系统更加困难。期望浏览器能够完美地运行所有漂浮在网络上的旧代码。现在,假设Linus Torvalds被告知,除非与UNIX或某些现有操作系统完全向后兼容,否则他的新操作系统就无关紧要。我怀疑他会烦恼,而Linux可能今天不会存在。当然,实际上,使Linux流行的唯一原因是因为它设计合理,并且GNU项目能够提供将大量现有代码移植到Linux的工具。没有GNU对Linux的意识形态支持,它永远不会有机会。
因此,假设您确实有足够的雄心勃勃(或很顽强)尝试创建一个成功的新浏览器,那么您应该重点关注的是体系结构和设计。除非您确定可以以某种方式改进现有浏览器的设计,否则没有从头开始构建新浏览器的实际理由。这意味着您需要足够熟悉WebKit和Gecko的代码以了解他们的设计决策,但是您不应该尝试复制他们的设计,因为否则您可能只使用他们的代码。
我个人的想法(没有做足够的研究)是当今的浏览器不够模块化。如果我要创建一个新的浏览器,我将找到一种方法,使输入和输出的交换变得容易(例如用另一个JavaScript引擎替换),并为用户提供比现有浏览器更多的控制权。现代的浏览器和网页设计师几乎将所有控制权从用户手中夺走了。用户为什么不能告诉Web浏览器我希望它如何呈现在计算机上显示的内容?原始的HTML仅提供了有关如何组织内容的指南,并且随着时间的流逝,更新的标准变得越来越教条化,以至于用户现在完全可以由Web设计师决定。Linux的吸引力在于它可以将控制权交还给用户,而且
如果您是我,我还要花时间研究的另一件事是操作系统设计原则。设计一个好的浏览器,至少在理论上应该与设计一个好的OS要求相同的原理,尤其是在并发过程,安全模型等方面。
最后,在进行了很多研究之后,我认为这是您应该开始编码的地方:
重新设计马赛克,但有您自己的设计思路。如果您只是出于娱乐目的或自己的教育目的,这也是我的建议。阅读原始的HTML 1.0和HTML 2.0规范,以及HTTP 1.1规范和当前URI规范,并确保您的浏览器遵守所有这些规范。当然,您可以下载已经可以处理传输协议,URI约定等的现有软件。但是,如果您认真设计自己的浏览器,那么我认为从头开始做这些事情也是不错的练习,因此您可以很好地了解所有拼图块如何组合在一起。在第0步结束时,您应该拥有一个至少与90年代最先进的浏览器相当的浏览器。这是一个很好的第一个里程碑。您实际上可以从以下位置下载原始的Mosaic:ftp://ftp.ncsa.uiuc.edu/Mosaic/,并查看它与浏览器的比较。查看当前网站如何在Mosaic之类的古代浏览器中呈现也是一个很好的练习。
在浏览器中添加对DOM的支持。首先关注W3C DOM 1级和2级,因为几乎所有当前的浏览器都完全支持它们。然后看3级和4级。DOM是Web编程的基础,因此,如果您要实际构建现代Web浏览器,则整个设计都必须考虑到这一点。由于您使用C#编写浏览器,因此您可能需要考虑如何利用现有的.NET对象模型来发挥自己的优势。
查看现有的脚本引擎,看看是否可以将其移植到您的项目中。我不鼓励您编写自己的JavaScript解释器,这不仅是因为它本身是一个非常大的项目,而且还因为优化JS编译器(例如V8)已经投入了很多工作。因此,除非您是编译器设计的专家,否则您手工构建的JS解释器可能会逊色于现有的JS解释器,即使它完美地遵循了EMCAScript规范。同样,我认为脚本引擎应该是与实际浏览器完全独立的模块,因此,我认为拥有一个框架来替代任何脚本引擎而不是构建脚本引擎会更加有用。仅适用于您的浏览器。
查看北美排名前10-20的网站(Google,Facebook,YouTube,Twitter,Wikipedia,亚马逊,流行的博客平台等)的HTML / CSS / JS源代码,并设计您的浏览器以使其与这些网站兼容。与使浏览器符合所有现有标准(当前的浏览器仍不能完美运行)相比,这要解决的问题要棘手得多。去做)。人们会抱怨您的浏览器不符合标准,因此,这并不像人们抱怨他们无法使用您的浏览器访问Google或Facebook那样大。我想不到任何浏览器在其第一版中就正确地遵循了所有(甚至大多数)标准,因此我说甚至都不必尝试。
您是说编写自己的渲染引擎?
我只能说好运。当今的各种浏览器已经投入了很多年的时间。如果您想做得更好,那么您将需要一些认真的技能。如果您不得不问从哪里开始,那么您可能需要进行数年的研究,才可以尝试执行此任务。
也就是说,这里有一些(显而易见的)指针:
在这里编辑
我并不是说要激励别人或激励别人,只是想向您展示浏览器是一个非常大的项目,而真正的大项目则需要很多思考。坦率的诚实洒上幽默。
我从事编程工作已经超过了我三分之二的时间,我想认为自己是一个相当不错的程序员,但是认为我有一半的机会从头开始编写一个不错的Web浏览器是很愚蠢的事。 。
当然,如果这是您要执行的操作,请不要妨碍我的评论。您可能比Internet Explorer做得更好。
正如其他人已经说过的那样,Web浏览器是一个巨大的项目。您必须担心tcp / ip&sockets,渲染html,使用CSS,创建DOM模型,执行javascript,处理格式错误的标记和代码以及处理所有类型的文件,然后才可以考虑人们的所有期望。浏览器(即书签,历史记录,私人浏览,安全性等),这是一个巨大的项目。
话虽如此,它可以做到。我的建议是去看看Firefox的来源。我知道您说过要从头开始构建浏览器,但是首先从开源项目中学习将非常有帮助。
我将下载Firefox源,然后慢慢将其剥离。换句话说,我将采用源代码并删除所有书签功能。然后,我将删除处理插件的功能。然后,我将删除有关保存文件的所有代码。我将继续此过程,直到获得一个非常基本的Web浏览器。我会看一下这段代码。
然后,我将开始构建自己的。我将利用拆解Firefox所获得的知识,并将其用于构建新的浏览器。
一个全部的运气给你!
exe
文件,安装后得到一个包含很多dll
文件的源文件夹。我如何研究执行此操作的实际代码以及此操作背后的逻辑?
Udacity现在有一个名为“构建Web浏览器”过程- https://www.udacity.com/course/programming-languages--cs262