JavaScript 微观性能测试、历史和局限性

javascript 微观性能测试、历史和局限性

我认为性能优化对许多开发人员感兴趣,因为他们更多地了解完成任务的不同方法。一些内心的声音问道:“哪种方式最好?”虽然“最佳”指标有很多变化,例如 douglas crockford 的 2008 年 javascript:the good parts,但性能是容易获得的,因为我们可以自己测试它。

然而,测试和证明性能并不总是那么容易做到。

一点历史

浏览器大战

到 2000 年代初期,internet explorer 赢得了第一次浏览器战争。 ie 甚至一度成为 mac 上的默认浏览器。曾经占据主导地位的网景公司被出售给美国在线并最终关闭。他们的衍生产品 mozilla 对其新的独立浏览器 phoenix firebird firefox 进行了长达数年的测试。

2003 年,opera 7 推出了 presto,这是一种新的、更快的渲染引擎。 apple 还发布了 safari,这是一款基于鲜为人知的 konqueror khtml 引擎构建的 mac 性能浏览器。 firefox于2004年正式推出。微软于2006年发布了ie 7,opera 9发布了更快的javascript引擎。 2007 年,safari 出现在 windows 和新 iphone 上。 2008 年出现了 google chrome 和 android 浏览器。

立即学习“Java免费学习笔记(深入)”;

随着更多的浏览器和更多的平台,性能成为这一时期的关键部分。新的浏览器版本定期宣布它们是新的最快的浏览器。 apple 的 sunspider 和 mozilla 的 kraken 等基准测试经常在版本中被引用,而 google 则维护着自己的 octane 测试套件。 2010年chrome团队甚至做了一系列“速度测试”实验来展示浏览器的性能。

高性能 javascript

微性能测试在 2010 年代受到了广泛关注。 web 正在从有限的页面交互性转向完整的客户端单页应用程序。 nicholas zakas 的 2010 年高性能 javascript 等书籍展示了看似微小的设计选择和编码实践如何能够产生有意义的性能影响。

不断变化

不久前,javascript 引擎竞赛就致力于解决高性能 javascript 中的一些关键性能问题,引擎的快速变化使得很难知道什么是最好的现在。随着新的浏览器版本和移动设备的出现,微性能测试成为一个热门话题。到 2015 年,现已关闭的性能测试网站 jsperf.com 非常受欢迎,它开始因垃圾邮件而出现性能问题。

测试正确的事情

随着 javascript 引擎的发展,编写测试很容易,但很难确保你的测试公平甚至有效。如果您的测试消耗了大量内存,则后续测试可能会看到垃圾收集造成的延迟。设置时间是否被计入或排除在所有测试之外?测试是否产生相同的输出?测试的背景重要吗?如果我们测试 !~arr.indexof(val) 与 arr.indexof(val) === -1 ,如果我们只是运行表达式或在 if 条件下使用它,会有什么不同吗?

编译器优化

随着脚本解释器被各种编译器取代,我们开始看到编译代码的一些好处和副作用:优化。例如,在没有副作用的循环中运行的代码可能会被完全优化。

// Testing the speed of different comparison operatorsfor (let i = 0; i < 10000; i += 1) {  a === 10;} 

因为这是执行 10000 次操作而没有输出或副作用,所以优化可能会完全丢弃它。但这并不能保证。

移动目标

此外,微优化在不同版本之间可能会发生显着变化。 jsperf.com 的不幸关闭意味着不同浏览器版本的数百万历史测试比较丢失,但这仍然是我们今天可以看到的。

重要的是要记住,微优化性能测试有很多注意事项。

随着性能改进开始趋于平稳,我们看到测试结果出现反弹。其中一部分是引擎的改进,但我们也看到引擎针对常见模式优化代码。即使存在更好的编码解决方案,优化通用代码模式对用户来说也有真正的好处,而不是期望每个站点都进行更改。

变化的景观

比不断变化的浏览器性能更糟糕的是,2018 年计时器的准确性和精度发生了变化,以减轻 spectre 和 meltdown 等推测执行攻击。如果您感兴趣的话,我写了一篇关于这些时间问题的单独文章。

分焦

让事情变得复杂的是,您是否针对最新的浏览器或项目支持的最低浏览器进行测试和优化?同样,随着智能手机的普及,处理能力明显较低的手持设备成为重要的考虑因素。知道在哪里分配时间以获得最佳结果或最有影响力结果变得更加困难。

过早优化?

过早的优化是万恶之源。 ——唐纳德·高德纳

这句话经常被引用。人们用它来暗示,每当我们考虑优化时,我们可能会为了虚幻的或微不足道的收益而浪费时间并使代码变得更糟。在很多情况下这可能是正确的。但这句话还有更多内容:

我们应该忘记小的效率,大约 97% 的情况下:过早的优化是万恶之源。但我们不应该放弃这关键的 3% 的机会。

更完整的引用添加了关键上下文。如果我们允许自己这样做,我们可以在小效率上花费大量时间。这通常会花费时间来实现项目目标,但无法提供太多价值。

收益递减

我个人在这些优化上花了很多时间,目前看来并不算浪费。但回想起来,并不清楚这些工作有多少是值得的。我确信我当时写的一些代码将执行时间缩短了几毫秒,但我真的不能说节省的时间是否重要

google 甚至谈到了 2017 年 octane 测试套件退役的回报递减。我强烈建议您阅读这篇文章,深入了解致力于这项工作的团队在性能优化方面遇到的限制和问题。

那么我们如何聚焦那“关键的3%”呢?

应用而非操作

了解代码的使用方式和时间有助于我们更好地决定关注点。

工具而非规则

不久之后,新浏览器的性能提升和变化就开始将我们从这些类型的微观测试推向更广泛的工具,例如火焰图。
如果您有 30 分钟时间,我推荐这个关于 v8 引擎的 2015 chrome devsummit 演示。它讨论的正是这些问题……浏览器不断变化,跟上这些细节可能很困难。

对正在运行的应用程序进行性能监控和分析可以帮助您快速识别代码的哪些部分运行缓慢或运行频繁。这使您能够处于有利的位置来考虑优化。

重点

使用性能监控工具和库可以让您了解代码如何运行以及哪些部分需要工作。它们还让我们有机会了解不同的领域是否需要在不同的平台或浏览器上工作。也许 localstorage 在内存和 emmc 存储有限的 chromebook 上要慢得多。也许您需要缓存更多信息来应对缓慢或不稳定的蜂窝服务。我们可以猜测哪里出了问题,但测量是更好的解决方案。

如果您的客户群足够大,您可能会发现真实用户监控 (rum) 工具的好处,它可以让您了解实际的客户体验。这些超出了本文的范围,但我已经在几家公司使用它们来了解客户体验的范围,并将重点放在实际性能和错误处理上。

替代方案

深入思考“我如何改进这件事”很容易,但这并不总是最好的答案。您可以退后一步并询问“这是解决此问题的正确解决方案吗?”来节省大量时间

在 dom 上加载非常大的元素列表时出现问题?也许仅在页面上加载可见元素的虚拟化列表可以解决性能问题。

在客户端执行许多复杂的操作?在服务器上计算部分或全部这些会更快吗?部分工作可以缓存吗?

退一步:这是执行此任务的正确用户界面吗?如果您设计的下拉列表预计有 20 个条目,而现在有 3000 个条目,那么您可能需要不同的组件或体验来进行选择。

够好了吗?

对于任何表演作品,都存在一个次要问题:“什么才足够”?有一个来自 stand-up maths 的 matt parker 的精彩视频,讲述了他编写的一些代码以及他的社区如何将其从运行时间改进到毫秒。虽然令人难以置信的是,这样的优化是可能的,但几乎所有项目都有一个达到“足够好”的点。

对于只运行一次的程序,几周可能是可以接受的,几个小时会更好,但你快速花费多少时间就成为一个重要的考虑因素。

您可能会认为它就像工程中的公差。我们有一个目标,我们有一个接受范围。我们可以追求完美,同时明白成功和完美并不相同。

确定绩效目标

目标是优化的关键部分。如果你只知道当前状态不好,“让它变得更好”就是一个开放式目标。如果没有优化之旅的目标,当您可以处理更重要的事情时,您可能会浪费时间尝试寻找更高的性能或更多的优化。

我对此没有一个好的衡量标准,因为性能优化可能会有很大差异,但尽量不要迷失在杂草中。这实际上与项目管理和规划有关,而不仅仅是编码解决方案,但在定义优化目标时,开发人员的输入非常重要。正如“替代方案”部分中所建议的,解决方案可能不是“使其更快”。

设定限制

就马特·帕克的情况而言,他最终需要答案,并且不需要将该设备用于其他任何用途。在我们的世界中,我们经常衡量访问者表现及其可能的财务影响开发人员/团队时间以及您的机会成本,所以措施没那么简单。

假设我们知道将添加到购物车的时间减少 50% 将使我们的收入增加 10%,但完成这项工作需要两个月的时间。有什么比两个月的优化工作产生更大的财务影响吗?你能在更短的时间内实现一些效益吗?再说一次,这是关于项目管理而不是代码。

隔离复杂性

当您确实发现自己需要优化代码时,也是看看是否可以将该代码与项目的其他部分分开的好时机。如果您知道必须编写复杂的优化,这将使代码难以理解,那么将其提取到实用程序或库可以使其更容易重用,并允许您在需要随时间变化时在一个地方更新该优化。

结论

表演是一个复杂的话题,有很多曲折。如果你不小心的话,你可能会投入大量的精力却收效甚微。好奇心可以是一位好老师,但它并不总是能取得成果。玩弄代码性能是有好处的,但也有时间分析项目中缓慢的实际来源并使用可用的工具来帮助解决它们。

资源

addy osmani – 使用 devtools flame charts 可视化 js 处理随时间的变化站立数学 – 有人将我的代码改进了 40,832,277,770%使用 microsoft copilot 制作的标题图像

以上就是JavaScript 微观性能测试、历史和局限性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
自定义 Babel 插件简介
上一篇 2025年12月19日 13:48:56
加密货币 API 中实时数据对开发人员的重要性
下一篇 2025年12月19日 13:49:08

相关推荐

  • 曝苹果iPhone 17 Air将主打蓝色 秋季发布 颜值稳了?

    据海外媒体报道,苹果即将推出的iphone 17 air在配色方面或将带来全新选择。这款机型或将主打一种前所未有的浅蓝色,成为苹果历史上最具辨识度的蓝色版本。 根据爆料信息,这种蓝色调非常淡雅,呈现出接近白灰色的视觉效果,在较暗环境下甚至可能被误认为是白色。如果消息属实,这将是继iPhone 13 …

    2026年8月29日
    200
  • 橙光阅读器如何购买作品章节_橙光阅读器章节解锁详细教程

    橙光阅读器如何购买作品章节_橙光阅读器章节解锁详细教程橙光阅读器如何购买作品章节_橙光阅读器章节解锁详细教程橙光阅读器如何购买作品章节_橙光阅读器章节解锁详细教程橙光阅读器如何购买作品章节_橙光阅读器章节解锁详细教程

    首先确认是否缺少花币或未完成购买流程,1.通过作品页面提示用花币解锁章节;2.花币不足时选择充值档位并支付获取;3.参与签到、任务等活动免费领取花币;4.订阅月卡/季卡每日领取花币,适用于高频阅读用户。 如果您在使用橙光阅读器时遇到无法解锁作品章节的情况,通常是因为缺少相应的花币或未完成购买流程。以…

    2026年8月29日 用户投稿
    000
  • 企查查怎么查分支机构_企查查App查询企业下属分支机构详细方法

    首先打开企查查App搜索目标企业进入主页,向下滑动查找“分支机构”或“企业关系”栏目并点击,可查看分公司、子公司等关联企业的名称、法人、成立日期及状态等信息;如需精确查找,可进入“企业关系”或“投资持股”页面点击右上角“筛选”按钮,选择“分支机构”类型,并按地区、时间或状态进一步过滤,确认后即可显示…

    2026年8月29日
    100
  • iPhone SE如何录制屏幕带声音

    先开启麦克风权限才能录制声音,1. 添加录屏到控制中心:设置→控制中心→自定控制→添加屏幕录制;2. 长按录屏图标开启红色麦克风状态并开始录制;3. 结束后视频自动保存至照片App。 iPhone SE录制屏幕并带上声音,操作其实很简单,关键在于开启麦克风权限。只要设置正确,无论是讲解操作、录制游戏…

    2026年8月29日
    000
  • 硬件保修政策:各大品牌售后服务对比

    选硬件需重视保修政策,苹果提供一年标准保修,国产品牌如零刻科技推出5年核心部件保修;空调领域格力、小米等推行十年整机包修;康佳冰箱压缩机享12年延保;新能源汽车核心部件普遍享有长期甚至终身保修,降低使用成本。 现在买硬件,除了看性能和价格,售后服务尤其是保修政策也越来越重要。不同品牌、不同品类的保修…

    2026年8月29日
    300
  • 清除系统垃圾文件在哪里(手机清理垃圾一键全清除方法)

    php小编子墨为您带来手机清理垃圾文件的一键全清除方法。随着手机使用时间的增长,系统中会积累大量垃圾文件,影响手机运行速度。通过简单操作,您可以轻松清理手机中的无用文件,释放更多存储空间,提升手机性能,让您的手机保持快速流畅的使用体验。继续阅读了解详细操作步骤! 建议可以点赞收藏加关注,下面小编给大…

    2026年8月29日
    200
  • 指纹浏览器手机版本是什么 移动端防关联浏览器特点说明

    答案:指纹浏览器手机版通过模拟不同设备指纹和网络环境,实现移动端多账号独立运行,防止平台关联。它伪装User-Agent、Canvas、WebGL、字体、分辨率等信息,并支持代理IP隔离,确保每个账号呈现为独立访客,适用于运营多社交或电商账号场景。选择时需关注稳定性、指纹真实度、IP集成、多账号管理…

    2026年8月29日
    100
  • 微信如何设置锁屏时显示消息详情_微信通知内容显示隐私管理

    可通过调整微信设置、系统通知及应用锁来保护隐私。首先在微信【设置】-【新消息通知】中关闭“通知显示消息详情”,使锁屏时不显示内容;其次在手机系统中设置锁屏隐藏通知,如安卓用户在【通知】中选择【隐藏通知内容】,iOS用户将【显示预览】设为“从不”;最后启用【应用锁】功能,通过密码或生物识别限制微信访问…

    2026年8月28日
    100
  • 抖音同城怎么定位自己想要的位置?位置定位怎么显示自己的店铺

    抖音已成为人们日常生活中不可或缺的平台。抖音同城功能为商家提供了一个精准定位目标客户的机会。如何利用抖音同城功能来定位自己想要的位置呢?本文将为您提供详细指南。 一、抖音同城定位的优势 精准触达目标客户 抖音同城功能能够根据用户的位置,推荐附近的相关内容,帮助商家精准触达目标客户,提升营销效果。 提…

    2026年8月28日
    000
  • iPhone 储存空间系统数据占用过大?尝试这样修复

    php小编草莓指出,iphone 储存空间系统数据占用过大是常见问题。尝试这样修复:首先检查照片、视频、应用等占用空间情况,清理不需要的文件;其次删除缓存和临时文件;最后升级系统和应用程序,修复系统错误。如仍有问题,可以考虑重置手机或联系苹果官方客服。记得备份重要数据哦! 根据苹果官方论坛用户及其它…

    2026年8月28日
    300
  • 悟空浏览器七日签到没有怎么办 签到活动异常问题处理方案

    悟空浏览器七日签到没反应,或者签到活动出现异常,通常不是什么大问题,多半是客户端缓存、网络连接或者服务器临时抽风导致的。别急,我们有几招能帮你搞定这事儿。 如果悟空浏览器的七日签到活动突然“隐身”了,或者你明明签了却没看到奖励,这事儿确实挺让人摸不着头脑的。我个人的经验是,这种小毛病大多出在应用本身…

    2026年8月28日
    100
  • 铁路12306的“铁路畅行”会员怎么注册_铁路12306铁路畅行会员注册方法

    要享受铁路12306购票积分和兑换服务,需先注册“铁路畅行”常旅客会员。可通过三种方式完成:一是使用铁路12306手机APP,在“我的”页面点击“铁路会员”,填写信息并完成人脸核验即可;二是登录12306官网进入会员中心注册,提交身份信息后需到车站窗口或自动售票机完成线下核验;三是直接前往支持该服务…

    2026年8月28日
    000
  • 抖音橱窗带货怎么做入门教学?什么叫橱窗带货

    抖音平台因其庞大的用户基础和高效的流量转化,成为了众多商家和创业者的新宠。抖音橱窗带货作为一种新兴的电商模式,以其独特的优势吸引了大量用户。本文将为您详细解读如何入门抖音橱窗带货。 一、抖音橱窗带货简介 1. 什么是橱窗带货? 抖音橱窗带货是通过在抖音平台上展示商品,吸引用户点击并购买的一种电商模式…

    2026年8月28日
    000
  • 抖音粉丝怎么增加亲密度?抖音亲密值怎么涨得快

    抖音,这个充满活力的短视频平台,已经成为众多用户展示自我、交流互动的舞台。粉丝亲密度成为衡量用户影响力的重要指标。如何提升抖音粉丝亲密度呢?本文将从多个角度为您解析,助您在抖音平台上脱颖而出。 一、了解粉丝亲密度 1. 粉丝亲密度是什么? 粉丝亲密度是指用户与粉丝之间的互动程度,包括点赞、评论、转发…

    2026年8月28日
    000
  • Soul聊天字体大小怎么调整_Soul聊天字体大小调整教程

    可通过系统辅助功能调整Soul聊天字体大小,进入iPhone“设置-辅助功能-显示与文字大小”,开启更大字体并调节滑块,重启Soul生效;同时检查应用内“聊天设置”是否有字体选项,并更新至最新版本以获取新功能。 如果您在使用Soul进行聊天时觉得默认字体大小不合适,影响阅读体验,可以通过以下方法调整…

    2026年8月28日
    000
  • 跑腿骑手取走万元手机后失联 后续怎么处理

    一部价值过万元的手机,一名接单后失联的跑腿骑手,让贵阳一家手机店的店主王先生在近日备受关注。这起事件并非孤例,它折射出在跑腿服务日益普及的今天,高价值物品配送背后的法律风险与监管漏洞。 万元手机在配送途中离奇丢失 2025年10月11日,贵州贵阳一家手机店的店主王先生通过货拉拉跑腿服务,配送一部价值…

    2026年8月28日
    200
  • 高德地图怎么设置躲避拥堵最快的路线_高德地图躲避拥堵路线设置

    首先在高德地图中设置躲避拥堵偏好,进入【我的】-【设置】-【导航设置】-【路线偏好】选择【躲避拥堵】;其次可在路线规划时点击【偏好设置】选择【躲避拥堵】重新计算路线;最后导航途中可点击【更多】-【路线偏好】切换为【躲避拥堵】模式,系统将动态调整路径避开拥堵。 如果您正在使用高德地图进行导航,但发现路…

    2026年8月28日
    000
  • 拼多多退货时间有限制吗_拼多多退货时间限制详细说明

    拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明

    签收次日起7天内可申请无理由退货,15天内可因质量问题退货,生鲜商品需在2小时内提交变质证据,申请通过后须7天内寄出商品,换货商品签收后7天内可再次退货。 如果您在拼多多平台购物后需要申请退货,平台对不同类型的订单和商品都设定了明确的时间节点。了解这些时间限制能有效保障您的权益。以下是关于退货申请、…

    2026年8月28日 用户投稿
    600
  • 懂车帝怎样搜索特定车型资讯_懂车帝车型信息精准搜索

    捷途纵横G700豪华电混越野SUV将于10月19日上市,预售价34.99万-42.99万元,定位中大型“全领域”车型,现已开启预售并提供4种配置。 如果您想在懂车帝上查找某款特定车型的最新资讯或详细信息,但面对海量内容感到无从下手,可以通过平台提供的多种精准搜索功能来快速定位目标。以下是实现高效查询…

    2026年8月28日
    000
  • 无痕浏览模式苹果手机如何设置

    苹果手机开启无痕浏览的详细操作 1. 启动Safari浏览器:在您的iPhone上找到Safari浏览器并点击打开。该应用为系统默认浏览器,图标为蓝色背景搭配白色桑葚状图案。 2. 进入标签管理页面:在浏览器界面的底部中央位置,会看到一个由多个方块叠加组成的图标,这就是标签页按钮。轻触它,即可进入当…

    2026年8月28日
    100

发表回复

登录后才能评论
关注微信