从事浏览器开发已经有一段时间了,逐渐对浏览器有了一些新的认识。在这里记一些我自己的想法吧。
1、浏览器与游戏引擎
在搞浏览器之前,曾经在游戏引擎上投入了很多精力和感情,以至于我现在的博客域名都是wantgame.net。最后阴差阳错,没有去做游戏,而是来到了一个互联网公司搞起了浏览器。
每当“游戏情结”开始在脑海里作乱时,都会用“干啥都是写代码”来安慰自己。但是,在逐渐深入到浏览器开发一段时间后,却渐渐发现其实浏览器其实跟游戏引擎有很多相似之处。从输入输出的角度上讲,游戏引擎输入的是美术资源、逻辑脚本,而浏览器输入的html, css决定了网页的布局,很像游戏中的场景文件;浏览器输入的图片、音视频就相当于游戏中的艺术资源;浏览器中运行JS脚本就相当于游戏引擎中逻辑脚本。浏览器输出的网页也不过是一个更为复杂多变的游戏画面而已。在阅读浏览器内核代码时,有很多概念也似曾相识,因为流程是一致的,读文件,解析,布局,渲染。
后来“游戏情结”就很少作乱了,因为我认识到了,其实我在做的(更确切的说是维护)是一个世界上最大的游戏引擎,全世界数以百万记的web开发者在使用这几个游戏引擎(Trident Gecko Webkit)设计游戏场景(html css),输出艺术资源(img video audio),编写游戏逻辑(javascript)。有数以亿万计的“玩家”在欣赏着这几个游戏引擎渲染的画面,与浏览器中的游戏互动。这种规模是任何一个游戏引擎都无法比拟的。
当然,浏览器有一个很重要的性质,决定了它与游戏引擎的很大不同。那就是开放性。
浏览器以标准的形式将接口公布给全世界的开发者,然后再以捆绑操作系统的方式部署到了全世界所有的智能终端。这样就为信息的输出者和输入者建立起了桥梁。而不是像游戏引擎那样,以授权的方式提供给某一些程序员使用。因该说“开放性”是浏览器最大的价值所在,也是我欣赏Chrome很重要的原因,他们把开放性做到了极致,连源代码都开放出来,这在是最根本的互联网精神。
当然要做到开放性并不是有意愿和决心就行的,要开放就先要意识到开放的后果。世界上的Web开发者五花八门,
有好人,有坏人,所以要考虑到安全性;
有高手,有初学者,所以要考虑到易用性和各种语法容错;
有各种硬件和操作系统,所以要考虑到兼容性;
有小白用户,有高端用户,所以要考虑到突出核心功能和扩展性。
当然,这些游戏引擎也是需要考虑的,但是力度要小得多。例如语法容错,我们在写html时的一些小失误例如漏个>啥的都会被浏览器“大度”的接受,因为这无伤大局。很难想象如果我们的游戏场景文件中出现这种语法错误,我们的游戏引擎也会根据自己的猜测建立出游戏场景。因为总的来说,游戏引擎还是封闭的,他提供专业的工具给专业的开发者,一切按照我的套路来就不会出错。实在搞不定的坑,我可以通过技术支持帮你填平,因为授权规模是可控的。没有必要在开放性这点上动太多的脑筋。
游戏引擎的动人之处在于对速度和美的追求,浏览器的动人之处在于大气。