2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Web 2.0 应用客户端性能问题十大根源

  • 2010-08-27
  • 本文字数:1838 字

    阅读完需:约 6 分钟

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 analysis how often a CSS Selector got executed on a single page

(引自 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 开发人员带来一定的启示。

关心服务器端性能的读者朋友请参考本站编辑张龙撰写的《服务器端编程的十大性能问题》, InfoQ 中文站也会继续关注业界的最新进展。

2010-08-27 01:451158
用户头像

发布了 501 篇内容, 共 282.5 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

强大的FTP(文件传输协议)客户端:Transmit 5 for Mac

Rose

使用Redis时不可原谅的几个低级错误

江南一点雨

从Milvus迁移DashVector

DashVector

数据库 向量检索 大模型 #人工智能

专业实用的CAD软件:CorelCAD 2021中文直装版

Rose

一文读懂Ethervista:以太坊的新代币启动器DEX

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

附送试听地址!OpenAI ChatGPT被曝将新增8种语音!英特尔酷睿Ultra 200V正式发布|AI日报

可信AI进展

Flink CDC 在货拉拉的落地与实践

Apache Flink

大数据 flink 流计算 Flink CDC

重磅活动!南开大学赵宏教授倾情分享AI挑战下的教育教学新理念与新方法

ModelWhale

Python 人工智能 通识课程

流式细胞分析:flowjo10破解版软件安装方法

Rose

索尼的Web3蓝图:从技术创新到现实应用的全方位布局

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

活动在即,不容错过丨亚信安慧AntDB诚邀您参加“PostgreSQL数据库技术峰会”

亚信AntDB数据库

AntDB 月PK

通义灵码最全使用指南,一键收藏

阿里巴巴云原生

阿里云 云原生 通义灵码

苹果电脑效率工具:Magnet pro for mac窗口分屏管理工具

Rose

【转载】golang内存分配

京东科技开发者

自增主键去哪了?---一次开发过程中的思考

京东科技开发者

AI数字实时互动新探索,打造高拟真专属AI智能体

阿里云CloudImagine

云计算 音视频 视频云 实时互动 AI 智能体

LED显示屏厂家如何提升LED产品技术

Dylan

产品 技术 LED显示屏 led显示屏厂家 市场

如何处理 MySQL 主从延迟?

伤感汤姆布利柏

天猫商品评论API返回值中的虚假评价识别策略

代码忍者

api 网关 API 策略

Mac专业项目管理软件:Project Office X Pro v1.1.11

Rose

公开课 | 测试工程师的质量体系构建指南

测吧(北京)科技有限公司

测试

万界星空科技MES系统中的排班排产功能

万界星空科技

mes 万界星空科技 生产管理 车间管理 生产排班排产

通过ModelScope开源多模态Embedding模型进行向量生成

DashVector

数据库 向量检索 大模型

Bettertouchtool for Mac 功能强大的触摸板辅助工具

Rose

业务复杂度治理方法论--十年系统设计经验总结

京东科技开发者

SD-WAN解决企业远程服务难题

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

易于使用的图形化 PostgreSQL 数据库开发工具:Navicat for PostgreSQL

Rose

易于使用的专业屏幕测量工具:PixelStick for mac已激活版

Rose

探索魔乐社区:GLM-4V-9B模型微调之旅

天翼云开发者社区

人工智能 大模型

通义灵码最全使用指南,一键收藏

阿里云云效

阿里云 云原生 通义灵码

Web 2.0应用客户端性能问题十大根源_Java_崔康_InfoQ精选文章