首页 > 代码库 > 浏览器内核引擎开发工作的主要关注点

浏览器内核引擎开发工作的主要关注点

浏览器内核引擎开发工作的主要关注点

跳转至: 导航、 搜索

目录

  • 1稳定性
  • 2性能
  • 3功能
  • 4其他因素

稳定性

  1. 对Android浏览器这种既有Java代码又有C++代码来说,稳定性意味着:
    1. Java代码不应该有NPE(空指针异常)
    2. C++代码不能出现内存错误,包括:
      1. null deref
      2. 指针越界访问
      3. 重复delete、free后use、循环引用、不对齐访问 等等
  2. 在某些情况下,空指针来自于有线程安全问题的代码(存在竞争条件),这类问题无法稳定再现,必须做好设计、review、编码规范,以小心避免
  3. 空指针也有可能来自于外部模块的错误(如硬件驱动),导致某个输入不应该为空的却在某种情况下变空了
    1. 如果可能的话,对所有外部输入做仔细的校验检查!

性能

  1. 加载速度 主要考虑网络IO的优化,挖掘潜在的并行度(如Chromium引入的多线程html解析)
    1. 通过云服务器转换目标网站数据来压缩流量(称为‘云加速’?)
    2. 在某些可能的情况下,考虑先展示部分加载的数据?
    3. js加载会阻塞html解析,css应用又可能阻塞js加载,<script>可加async,前端应用可考虑优化页面结构
  2. 渲染速度
    1. js引擎(jsc/v8):增量GC、Trace JIT(优化最热执行路径)、类型提示(asm.js)
    2. layout、图形引擎(compositor)等模块的进一步性能改进(总觉得chromium应该做得很好了,而且这个也有难度)
      1. 需要了解GPU的基本原理、CPU+GPU架构的内在瓶颈
      2. Canvas/SVG的硬件加速
    3. Tiling/滚动
  3. 视频播放*
    1. 如何保证在不稳定的3G网络下流畅播放视频?
  4. 内存占用
    1. 浏览器应做到在长时间运行(一个月?)的情况下内存占用稳定,无内存泄漏
    2. 寻找WebKit核心仍然存在的一些可以优化的数据结构

功能

  1. 如果要修改浏览器内核,如何做好源代码管理,使得rebase到更高版本的upstream后,不需要做太多工作?
  2. 修改内核以增加功能的要点:
    1. 遵循W3C规范?
    2. 熟悉通过js binding增加API的方法
    3. webcore模块化?
  3. 有没有可能以插件(plugin/addon)的方式开发对应的功能,不需要修改内核?
    1. ad blocker(广告拦截)
    2. PDF.js
  4. 以user script hack-in的方式解决网站兼容性问题

其他因素

  1. 提高UI交互可用性:Accessbility、手势、语音输入、基于区域的touch事件
  2. 其他:‘夜间模式’ WebRTC WebGL 

浏览器内核引擎开发工作的主要关注点