谁在调用运行时间最长的方法? 衡量一个 Web 2.0 应用是否成功的一条关键准则是客户对于应用页面装载时间的感受和满意度。用户对于一个应用的第一感受来自于他访问您的第一个页面,通常是应用的主页。从技术上讲,我们认为“浏览器响应时间”是指用户感受到的,在浏览器上做出动作(通常是鼠标点击或者键盘敲击)开始到新页面(或者部分页面)显示完整的这段时间。 “浏览器响应时间” 包含三个主要的部分: 对于“页面装载时间”的性能分析与优化,我们在?前面的文章中?已经进行了讨论。在这篇文章中,我们着重讨论页面渲染时间,以及如何剖析和分析浏览器页面渲染时间,并通过找到其存在的性能问题与瓶颈来提高应用的性能。 页面渲染时间主要包含两个部分: 其中: Web 2.0 应用中,越来越多的逻辑层和表现层的实现被转移到浏览器端。对应用本身,这样不仅可以减轻服务器的负担,并且能提供非常丰富的用户体验,使应用有非常好的可用性。浏览器端的页面聚合特性,也使得服务器的架构设计更加灵活,使应用有更大的可扩展性。而从应用的性能角度来看,这势必加重了页面的渲染时间,过于差的页面显示延时,会严重影响用户的体验。所以我们应该认识到应用里面的脚本已经变的很重要,而且可能成为应用的性能瓶颈。为了提升脚本的执行性能,首先需要开发者在设计和实现的时候把性能考虑进去,同时也有一些成熟的 JavaScript 脚本编程的性能建议可供开发者作为参考(参见?参考资源),这可以帮助开发者在程序实现或者从服务器端迁移代码的时候避免调用一些在脚本执行中性能比较差的方法或算法。有些时候,开发者并不能预测到代码中可能存在的性能问题,这时候性能分析技术能提供一些性能剖析的方法和工具,帮助我们对一些方法或者代码片段做性能剖析,从而分析内部潜在的性能问题。 在脚本语言中,主要的性能剖析方法有时间片剖析和调用流程剖析: 这两个性能剖析方法包含两个相同的步骤:数据搜集与数据后处理与分析,通过合适的工具,我们可以同时得到这两个剖析结果。 这个结果能帮我们回答我们最想知道的问题:”谁在调用运行时间最长的方法?“,这将毫无疑问的帮我们定位到应用中存在的性能问题。 JavaScript 性能剖析工具 目前许多浏览器都提供了适用于自身的性能剖析工具或者插件,不同的工具提供了不同的功能,能帮助我们在不同浏览器上进行脚本执行性能的分析。这里我们以 Mozilla Firefox FireBug 插件、MicroSoft Internet Exporlor 8 与 Webkit(Safari)Web Inspector 三个工具为例子比较他们在功能上的区别,见?表 1。 ? ? 功能描述 : 相对于基于 Java 语言上的各类性能剖析工具,基于 JavaScript 的性能剖析工具目前还不是很丰富,而且不同浏览器提供的功能也各不相同。从上面的功能对比表中,我们可以看到目前的 JavaScript 性能工具对于后期的离线分析、无关过滤以及快速检索的支持还不完善。但这已经可以帮助我们查找与解决 JavaScript 执行上的性能问题。对于特定的浏览器上的 JavaScript 性能问题,我们可以选择其中最合适的工具进行性能剖析。 ? 剖析 IBM Mashups Center 的 JavaScript 执行性能 接下来,我们将逐步展示一个典型的脚本剖析过程。示例将使用 Developer Tools for Internet Explorer 8(IE8)来对 IBM Mashups Center 的应用做一个 JavaScript 执行的剖析。对于其它浏览器上的性能剖析工具,其基本步骤基本类似,就不再重复叙述。这里,我们准备剖析 IBM Mashups Center 在用户登录的动作,在用户输入用户名和密码做登录后,IBM Mashups Center 会显示该用户的默认主页。下面是主要的步骤: 当剖析动作结束以后,“开发者工具”界面会显示此次剖析的结果。它可以有两种显示方式剖析结果:调用流程树视图?或者?函数列表视图。 分析剖析结果 前面我们通过 Developer Tools for Internet Explorer 8(IE8)对 IBM Mashups Center 的登录动作进行了 JavaScript 性能剖析,下面我们来分析一下这个结果。通过“函数列表视图”,我们很容易找到那个方法调用占用了最多的时间,或者被调用的次数最多。通过“调用流程树视图”,我们可以查找是哪些方法调用了那些最重的函数。 在我们对 IBM Mashups Center 的登录动作的性能剖析结果中,我们可以发现: 通过以上的性能剖析,已经能够帮助我们找到页面 JavaScript 脚本执行在各个函数中的分布以及它们的上下文关系。对于比较复杂的 JavaScript 脚本性能问题,通常需要结合源码源码阅读,添加日志输出等方法来定位问题,所有这些可以帮助我们快速定位、分析、验证脚本中的性能问题。 ? 总结 本文我们主要讨论了如何对于页面渲染时间的性能分析,首先介绍了几个主要浏览器的性能剖析工具,然后结合对 IBM Mashups Center 的性能剖析示例,介绍了如何利用工具来进行性能剖析与问题定位。 参考资料 学习浏览器响应时间 = 服务器响应时间 + 页面装载时间 + 页面渲染时间
页面渲染时间 = 脚本执行时间 + 浏览器引擎渲染时间
表 1. JavaScript 性能分析工具功能对比
功能
Mozilla Firefox Firebug
Internet Explorer Developer Tools
Webkit (Safari) Web Inspector
时间片剖析
支持
支持
支持
调用流程剖析
不支持
支持
支持
无关过滤
不支持
不支持
不支持
父子节点统计分析
不支持
不支持
不支持
离线分析
不支持
不支持
不支持
快速检索
不支持
不支持
不支持
匹配匿名函数名
部分支持
支持
不支持
包含程序源代码
支持
不支持
不支持
图 1. 调用流程树视图
?
图 2. 函数列表视图
?
图 3. 示例:changePageContent 函数在调用流程树视图中的位置
?
详细解决方案
全面擢升 Web 2.0 应用程序的性能,第 3 部分: 浏览器渲染时间分析
热度:457 发布时间:2012-11-01 11:11:32.0
相关解决方案
- windows 2003服务器-事件查看器-应用程序-复核失败-SA
- 应用程序“DEFAULT WEB SITE”中的服务器异常有关问题,好烦的
- c#应用程序,一个简单的有关问题
- 会导致 asp.net 应用程序 重启 的所有 可能原因,该如何处理
- 小弟我的websphere 应用程序 正常启动 但 访问小弟我的页面全是空白
- 配置 IIS在64位Windows下运行 32 位 ASP.NET 应用程序
- windows 2003 64位系统php运作报错:1% 不是有效的 win32 应用程序
- [转]面临 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
- 面临 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序
- 运用 Continuations 和 Reverse Ajax 创建事件驱动 Web 应用程序
- 施用 HTML 5 创建移动 Web 应用程序,第 1 部分: 联合使用 HTML 5、地理定位 API 和 Web 服务来创建移动混搭程序
- 传统下,网页中不会有大量的脚本,至少脚本很少会影响网页的性能。但随着网页越来越像 Web 应用程序,脚本的效率对网页性能影响越来越大。而且使用 Web 技术开发
- JavaScript:运用面向对象的技术创建高级 Web 应用程序
- 施用面向对象的技术创建高级 Web 应用程序(JavaScript)
- 【转】施用缓存构建更快的 Web 应用程序
- zz:运用面向对象的技术创建高级 Web 应用程序
- 施用 Grails 快速开发 Web 应用程序
- VS2008中新建网站(ASP.NET 网站)和新建项目(ASP.NET Web 应用程序)的区别
- 用 HTML 五 构建 Web 应用程序
- 【转载添批注】使用面向对象的技术创建高级 Web 应用程序
- 在 Android 下使用 XML 和 JSON,第 2 部分: 交付混合了 JSON 的 Android 应用程序
- 用 Sencha Touch 构建腾挪 web 应用程序
- 施用 TSAM 扩展来管理 J2EE 应用程序
- 使用 TSAM 扩展来管理 J2EE 应用程序
- 应用 Eclipse 远程调试 Java 应用程序
- 运用 Eclipse 远程调试 Java 应用程序
- 不能运行Java 应用程序?解决办法
- 怎么从WindosXP中将日志(应用程序、安全性和系统日志)提取出来,转换成EXCEL格式存储到一个数据库中
- C#应用程序 怎么使用html界面(不使用WebBrowser控件;不采用WPF项目)
- 应用程序(C#)怎样设置可以让存储过程的变量使用默认值,该怎么解决