【专业技术第四讲】如何检测浏览器的快慢?

现在做浏览器的大概有下面几个方向吧

1. 从事浏览器外壳的工作,开发基于浏览器的各种应用和扩展;

2. 做浏览器内核优化的,大概又分为几个部分:

a. 渲染模块优化;

b. Webgl硬件加速优化;

c. 符合ECMAScript5.1 规范的JS引擎的优化;

d. 针对特定的行业进行优化,比如游戏,社区,社交等;

e. 现在andriod很火,专门针对andriod的webkit和chromium的优化;

3. 基于浏览器的内核开发相关的产品;比如CEF3,Node-webkit等,目前主要是进行桌面端产品的开发;

4. 浏览器安全方面,好像没发现有什么公司对外招人;

5. 浏览器的基本移植和定制;目前来看这个很难有好的发展;

6. 浏览器游戏引擎开发与优化,感觉主要是webgl的优化;

那么浏览器内核的优化怎么入手呢?我们先来看下页面的加载显示过程:

  1. 用户发出指令,需要加载某个页面;
  2. FrameLoader开始调用loader模块进行数据的加载;进而调用网络模块进行主资源下载;
  3. 主资源的编码以及编码转换;
  4. 主资源数据的解析;
  5. 主页面中涉及的外部的子资源的加载以及对解析的影响:a> js文件是否暂停主资源的解析;b> css文件是否暂停主页面的解析策略; c>其它资源文件,比如字体库图片等;
  6. 子资源的解析和缓存memorycache;
  7. js代码的解析;
  8. 解析的过程中遇到主资源解析暂停的情况下,虚拟继续解析主资源进行子资源的预加载;
  9. 插件的加载与解析;
  10. Dom树的构建以及Render 树的构建;
  11. 对Box模型进行定位的layout过程;
  12. 页面的绘制过程,包括通过无效区域的标记、共享内存,cpu与gpu的协同分工等。
  13. 用户下一次行为的预测以及预测页面的与解析等;
  14. DNS的缓存以及预解析;
  15. 等待用户的下一次指令或者别的事件通知;

其实从上面列出的一个完整的过程可以看出,在数据记载过程中,可以充分考虑并发性,同时采用线程池的方式来避免线程的创建和销毁的开销.

在数据的解析过程中,可以考虑利用解析顺序的限制来做一些预解析和预加载的事情,在对数据的编码处理过程中,可以考虑编解码的效率;

在对页面的布局过程中,可以考虑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比较早的实现了。

转自:http://blog.csdn.net/talking12391239/article/details/21463703

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯移动品质中心TMQ的专栏

【穿山甲系列】找出后台偷偷耗电的元凶

如图所示,在浏览器用户反馈中,耗电一直是头部问题之一,用户对于电量是非常敏感的,特别是那种类似“我明明就没用,怎么还在耗电?”的后台耗电问题,更容易引起用户的抱...

28460
来自专栏顶级程序员

Flask 1.0 终于发布,放弃支持 Python 2.6 和 Python 3.3

源 | 开源中国、Flask 官方 综合整理 | Python 开发者(PythonCoder)

15140
来自专栏CSDN技术头条

如何处理变慢的API?

在开始时表现良好的API会随着时间的推移而导致性能降低。学习如何管理和解决这些性能问题是开发者必须具备的技能之一。 作为一名工程师,你花了很多时间在API上——...

24470
来自专栏java一日一条

Java开发的几个注意点

比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置。那么你的程序无论在DEV环境中,还是TEST环境中,都可以顺畅无阻地运行,但是一旦部署在PR...

10610
来自专栏架构师之路

换IP的是你,凭啥重启的却是我?

一、缘起 很多公司,技术经常遇到这样的场景: 1)硬件升级,要换一台高配机器 2)网络重新规划,若干服务器要调整机架 3)服务器当机,要重新部署恢复服务 … ?...

41070
来自专栏企鹅号快讯

Java开发的几个注意点

将一些需要变动的配置写在属性文件中 比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置。那么你的程序无论在DEV环境中,还是TEST环境中,都可...

18460
来自专栏CSDN技术头条

Hybris平台Web架构模式演变:前后端分离

深度技术文章,第一时间送达! “前后端分离”显然已不是什么新鲜的话题,表面上看是一场架构模式的变革,但实质上是为了解决以往传统的服务端MVC设计模式的一些诟病和...

50960
来自专栏杨建荣的学习笔记

数据库无响应问题的紧急处理和分析 (r10笔记第42天)

黄金周里处理了一起紧急的问题,在外面幸亏有同事帮忙协助,等我赶回家去,赶紧继续处理。 首先问题是在晚饭时间左右开始发生,但是过了没多久又恢复了,所以这个问题暂时...

340120
来自专栏假装我会写代码

用 Algolia DocSearch 轻松实现文档全站搜索

46730
来自专栏WeTest质量开放平台团队的专栏

浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略

服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题...

31640

扫码关注云+社区

领取腾讯云代金券