You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中长字符串相等比较耗时更长的原因是什么

该现象的核心原因
  • 你对V8引擎的字符串驻留(string interning)机制适用范围存在误解:V8不会对所有动态生成的字符串自动做驻留优化,仅字符串字面量、用作对象属性键的字符串、高频重复使用的短字符串才会触发自动驻留。你代码中通过循环拼接UUID生成的随机长字符串属于一次性动态生成的非复用内容,不会被驻留,自然享受不到「仅比较指针/驻留ID即可判断相等」的优化。
  • 未驻留的字符串执行===全等比较的逻辑为:
    1. 先对比两个字符串的长度,长度不同直接返回false
    2. 长度一致时,逐字符对比字符串的全部内容,所有字符匹配才返回true
      你的两次测试中,待比较的字符串长度为3倍关系,且数组内所有字符串和目标查找字符串长度完全一致,跳过了第一步快速返回的逻辑,只能逐字符对比;同时你使用filter会遍历全部100万条数据,所有比较都需要执行完成,总耗时自然和字符串长度成正比,和你实测的3倍耗时完全吻合。
驻留效果验证方式

如果想要验证驻留优化的效果,可以在生成每个字符串后手动触发驻留逻辑,比如新增一行void {}[id](将字符串作为对象属性键使用时,V8会对这类字符串自动驻留),再执行比较测试,此时两次运行的耗时差异会基本消失。

内容的提问来源于stack exchange,提问作者user7858768

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:54:04