现在做浏览器的大概有下面几个方向吧
1. 从事浏览器外壳的工作,开发基于浏览器的各种应用和扩展;
2. 做浏览器内核优化的,大概又分为几个部分:
a. 渲染模块优化;
b. Webgl硬件加速优化;
c. 符合ECMAScript5.1 规范的JS引擎的优化;
d. 针对特定的行业进行优化,比如游戏,社区,社交等;
e. 现在andriod很火,专门针对andriod的webkit和chromium的优化;
3. 基于浏览器的内核开发相关的产品;比如CEF3,Node-webkit等,目前主要是进行桌面端产品的开发;
4. 浏览器安全方面,好像没发现有什么公司对外招人;
5. 浏览器的基本移植和定制;目前来看这个很难有好的发展;
6. 浏览器游戏引擎开发与优化,感觉主要是webgl的优化;
那么浏览器内核的优化怎么入手呢?我们先来看下页面的加载显示过程:
其实从上面列出的一个完整的过程可以看出,
在数据记载过程中,可以充分考虑并发性,同时采用线程池的方式来避免线程的创建和销毁的开销;
在数据的解析过程中,可以考虑利用解析顺序的限制来做一些预解析和预加载的事情;
在对数据的编码处理过程中,可以考虑编解码的效率;
在对页面的布局过程中,可以考虑layout算法的优化,比如dirty bit,dirty area的方式;
在对图形绘制的过程中,可以考虑采用GPU的方式;
在插件处理方面,考虑采用PPAPI机制来替换NPAPI机制;
这些过程有些是可以并行处理的,考虑不同阶段采用单独的线程的模式来提高效率,现在的cpu基本上是多核的;
以上这些都存在对内存的以依赖,那么可以考虑对内存管理模块的优化;
对于系统来说,I/O的效率相对其他来说很有可能会是瓶颈,那么可以设法减少I/O的读写,采用共享内存、利用缓存的方式来优化;
对css3的的动画以及一些绚丽的UI等进行优化,包括算法和硬件加速方面;
对于视频来说,同样采用硬件加速的方式来优化;
对于指令系统来说,可以把某些关键的模块针对不同的指令系统来进行优化;
也可以对用户的行为分析了解到,用户用的比较多的功能是前进后退,那么可以考虑pagecache方式的优化;
对于页面来说,可以通过建立浏览器服务器端的方式来减少客户端的工作,比如比较流行的页面在服务端的缓存,资源的压缩,资源的转码,甚至是页面针对不同分辨率的设备的重新布局等;
对于开发者来说,可以吸收同类内核的一些优雅实现方式来优化;
上面说的都是性能的问题,那么接下来看看稳定性方面。
浏览器的支持的方式:
1. 多页面、插件:稳定吗,主要就是减少依赖性,那么就采用多进程的方式;
2. 本地能力的访问;本地能力往往具备很大的破坏性,比如文件操作等,因此采用某种策略对本地能力的访问加以控制,那么NACL就是不错的选择;
对于一个基于开源项目的产品来说
1. 在利用开源带来的优点的同时也要考虑开源项目的缺点:不稳定性,对于跟新比较快的项目,如何选择代码同步的策略和自家代码的合并方式也很重要。
2. 简化浏览器的界面,在UI方面对用户的行为做出适当的引导,减少用户的稀有操作,从而降低奔溃率;
3. 从目前chromium的发展来看,把chromium当成从桌面系统和web系统的过度了,免得直接上chromium os让大家接受不了。说白了以后浏览器就是一个平台了,所有的应用就在这个平台上运行到了,从UC+,轻应用的发展来看也可以看出一二。那么开发者就不得不重视这套应用的运行机制和扩展机制了。
4. 通过沙箱模型我们也可以延生来看,浏览器在兼容传统的客户端时是否也可以建立一套沙箱模型呢?这个对于有历史包袱的企业来说很有参考意义。看了下360比较早的实现了。