Web 2.0应用客户端性能问题十大根源(转)
Web 2.0应用的推广为用户带来了全新的体验,同时也让开发人员更加关注客户端性能问题。最近,资深Web性能诊断专家、知名工具dynatrace的创始人之一Andreas Grabner根据自己的工作经验,总结了Web 2.0应用客户端性能问题十大根源,InfoQ中文站将这十个问题做了概括整理,供Web开发人员借鉴和思考。
1. IE中的CSS选择器(selector)运行缓慢
Web开发人员通常使用JavaScript框架(如jQuery)提供的CSS选择器来实现查找功能,如var element = $(“.shoppingcart”),但是IE 6和7没有提供这种查找方法的原生实现。所以,JavaScript框架不得不通过遍历整个DOM树来达到目的。这种方式花费的时间比在其他浏览器中的消耗要多得多,而且严重依赖于DOM树的规模。IE 8对CSS查找提供了较好的支持,所以Web人员最好升级相应的JavaScript框架版本以利用这些新特性。
2.针对相同对象重复进行CSS查找
正如第一点所说,单个CSS查找代价高昂,在这种情况下,如果还要对相同的对象进行多次重复查找,那性能问题就可想而知了。下图是一个典型的Web页面中CSS查找功能调用统计结果:
(引自dynatrace博客,中间一列为查找函数总执行时间,单位毫秒,最后一列为函数调用次数)
对于这种问题,Andreas Grabner建议将第一次查找的结果保存到变量中,在以后需要的时候重用即可,不必再重复进行查找。
3.XHR调用太多
JavaScript和XmlHttpRequest是AJAX技术的基础,很多JavaScript框架都提供了非常方便的使用方法,Web开发人员会充分利用其异步通信优势来实现诸如分页加载等效果,避免对整个页面的操作。
Andreas Grabner根据自己的经验指出,他发现这种方式被滥用了——过多的信息通过过多的调用来动态访问。例如,在一个显示10种商品的页面中,开发人员可能想分别加载每种商品的详细信息。这意味着,你需要和服务器端进行10次交流才能得到全部信息,也会对后台系统产生压力。他建议,在这种情况下,把10次调用合并成1次来减少通信压力。
4.代价高昂的DOM操作
操作DOM是网页交互性的必要技术。拿添加DOM元素来说,存在多种实现方式,每种方式因为不同的浏览器类型和元素数量大小带来的性能影响也各不相同。建议大家仔细分析比较不同的方法,采用适合自身情况的技术
。
5.JavaScript文件过多
Andreas Grabner说,对于一个典型的网站来说,存在超过40个单独的JavaScript文件并不少见。他指出,JavaScript文件过多带来两个问题:一是浏览器在加载这些文件时需要通过JavaScript引擎切换上下文运行环境,二是因为下载文件而带来额外的网络通信。解决方法是:减少JavaScript文件数量!
6.DOM规模庞大
DOM规模对页面性能影响很大,具体表现在:
占用的内存
从根节点到子节点的style变化所花费的开销
IE中CSS查找的性能问题
DOM遍历操作的性能问题
所以,警惕你的DOM树!
7.事件处理函数绑定过多
对于Web开发人员来说,绑定事件处理函数是日常工作之一Andreas Grabner提醒大家关注其对性能的影响:
绑定操作本身消耗时间(如查找对象、注册事件管理器等)。
当事件被触发时,事件管理器需要查找注册该事件的元素,并调用正确的事件处理函数。
在切换页面时,要记住对事件解绑,避免DOM相关的内存泄露问题。
8.外部服务执行缓慢
很多网页都嵌入了外部内容(如广告栏等)或者调用外部服务,Web开发人员通常需要在页面中包含由第三方提供商发布的JavaScript文件,而通常这些文件中就存在前面所提到的性能问题,我们需要擦亮眼睛,如果有问题要反馈给第三方供应商让其修改优化。
9.滥用视觉效果
很多JavaScript框架都提供了绚丽的视觉特效,如动态弹出表单等,一些方法在示例代码中运行良好,但是在实际的页面中特别是DOM规模较大时表现不尽人意。Andreas Grabner建议Web开发人员在引入视觉效果时关注其对浏览器CPU、渲染引擎和整个网站性能的负面影响。
10.日志和监控粒度过细
现在存在很多优秀的日志和监控工具,但是如果把粒度设得太细(如记录每次鼠标移动的详情),信息的收集过程会对JavaScript引擎和网络产生额外的负担。
Web 2.0应用客户端性能问题十大根源向大家介绍完了,原文作者Andreas Grabner不仅是Web性能诊断工具dynatrace的创始人之一,而且参与了许多企业级Web应用的性能优化项目,他总结的这些问题相信会对国内Web开发人员带来一定的启示。
分享到:
相关推荐
作为一款基于Web的应用,Bugfree能够支持跨平台的使用,无论你是在Windows、Linux还是Mac OS环境下,只要有Web浏览器,就可以方便地进行Bug跟踪与修复工作。 ### 核心特性 1. **易用性**:Bugfree 2.0 设计简洁,...
它提供了一种高效且方便的方式来捕获、记录以及解析应用程序在运行时可能出现的异常情况,从而帮助开发者更有效地诊断和修复问题。此组件基于官方客户端进行改造,以适应.NET Framework 2.0的兼容性需求,使得老版本...
2. 访问权限:尽管原始程序可以正常运行,但通过IE浏览器访问Web服务仍然可行,这暗示问题可能在于应用程序的配置或认证机制。 3. IIS设置:IIS(Internet Information Services)服务器的配置没有异常,直接通过IIS...
XPages作为IBM Lotus Notes/Domino 8.5推出的用于构建Web 2.0应用程序的新技术,为开发者提供了前所未有的灵活性和对Web内容的精细控制。本文旨在深入探讨XPages的服务器端JavaScript/Java调试技巧,帮助初级开发者...
ASP.NET是一种广泛使用的Web应用程序开发框架,由微软公司推出,它极大地简化了.NET开发者构建动态、数据驱动的网站和Web应用程序的过程。在ASP.NET中,ViewState是一个关键的概念,用于在页面回发期间保持控件的...
在VS2005中,开发者可以利用.NET Framework 2.0的强大功能来构建Web应用。这个IDE提供了丰富的工具集,包括代码编辑器、调试器和项目管理工具,使得开发人员能够高效地编写和管理代码。在这个聊天系统的开发中,VS...
在IT行业中,Web服务是应用程序之间进行通信的一种方式,它允许不同系统间的互操作性。WSDL(Web Services Description Language)文件是定义这些服务接口的关键文档,它使用XML语法来描述服务的位置、使用的消息...
问题的根源可能在于“多次远程调用导致userToken丢失”。在Dubbo框架中,服务调用是基于RPC(Remote Procedure Call)的,每次调用都会携带必要的参数,包括隐式参数`userToken`。然而,如果一个服务调用另一个服务...
*** Ajax "Sys未定义"错误是一个常见的问题,它发生在***应用程序中使用AJAX时,通常会因为不同的原因导致Sys对象无法被正确定义或访问。要解决这个问题,需要根据具体情况进行排查和解决。 1. Web.config配置问题...
特别是在Web应用中,如何正确地处理中文等非英文字符变得尤为重要。Java作为一种广泛使用的编程语言,提供了多种机制来处理不同语言编码的问题。本文将详细探讨JSP和Servlet技术在处理中文乱码问题时的方法和技巧。 ...
日志记录在软件开发中至关重要,因为它可以帮助开发者理解应用程序的运行状态,尤其是在遇到错误或性能问题时。通过分析日志,开发人员可以定位问题的根源,进行调试,优化代码,以及确保系统的稳定性和安全性。...