【问题标题】:How fast is parseFloat Vs. float ints in JavaScript?parseFloat 的速度有多快。 JavaScript中的浮点整数?
【发布时间】:2011-07-18 18:19:52
【问题描述】:

我从客户的内部 API 获得了一个庞大的数据集。它将包含一堆价格的数字数据,例如:31.23 美元。他将它们以{"spend":"21.23"} 的形式提供给我,这很好,但我担心在 1000 多个项目之后并在所有这些值上运行 parseFloat()(在绘制它们的顶部)可能会占用客户端浏览器的大量资源。

有人做过吗?

==更新==

对不起。我的问题太模糊了。我担心它是一个字符串,我正在解析它。我的问题是 parseFloat 比 int 快。 IE。将 parseFloat("12.12") 附加到 div 比仅附加 12.12 更快,如果是这样,要快多少。

【问题讨论】:

  • 配置它!进行 1,000 次 parseFloat 调用并计时。超过 100,000。
  • @Oscar:你说“只是一个 int”,然后你说 12.12;是哪一个?你的意思是解析 string "12.12" (to 12) 还是完全跳过解析?

标签: javascript json api parsing parsefloat


【解决方案1】:

在我的工作机器(Mac OS X,Intel 2 GHz Core i7)上,我看到了the following results on jsperf.com

Browser    | parseFloat calls per second
----------------------------------------
Chrome 12  | 5.3 million
Firefox 6  | 21.7 million
IE 8       | 666.9 thousand <- totally unfair, ran on virtual machine
Opera 11   | 5.2 million

这远非详尽的调查;但粗略最少每秒超过 600,000 个调用(以及 在虚拟机上),我认为你应该很好。

【讨论】:

  • 酷,谢谢。到目前为止,这最好地回答了我的问题。不过,我担心的是使用 parseFloat 比使用 12.12 之类的原始 int 而不是 parseFloat("12.12") 更快。请参阅我更新的问题。无论哪种方式,这是每秒 60 万次调用,所以应该没问题。谢谢!
【解决方案2】:

关于 parseFloat 或 parseInt 的速度 MDN 建议使用一元运算符 + 代替,如

+"12.12"
=> 12.12    

MDN Link

一元加号运算符位于其操作数之前并计算其操作数,但如果尚未转换为数字,则尝试将其转换为数字。虽然一元否定 (-) 也可以转换非数字,但一元加法是将某物转换为数字的最快和首选方法,因为它不对数字执行任何其他操作。

【讨论】:

  • 使用+而不是parseFloat的唯一副作用是它不适用于以文本开头的数字作为后缀的字符串,例如+"22blah"结果为NaNparseFloat(22blah) 结果为22... 顺便说一句,我刚刚测试了它,因为我不确定输出,我更愿意使用+,但在我的使用中我不能因为这个副作用
【解决方案3】:

你知道parseFloat()是基于浏览器的。据我所知,浏览器在 200 个值之后可能会崩溃,在 10.000 个值之后可以正常工作。

这取决于浏览器有多少标签页、正在运行的其他脚本、有多少 CPU 可用于处理,当然还有什么浏览器

如果您的客户使用带有 1000 个插件的 firefox,它将永远无法顺利运行您的脚本。

只是我的意见。如果你想做得很好,你应该在服务器上预处理然后显示。

【讨论】:

  • 当然是基于浏览器的,因为所有的JS都是基于浏览器的。我担心的是只处理像 12.12 或 parseFloat("12.12") 这样的整数会更快,并且它们之间是否存在差异。
【解决方案4】:

类型

javascript:a = +新日期; x = 100000; while (--x) parseFloat("21.23"); alert(+new Date - a);

进入你的网址栏。

这是唯一确定的方法。

老实说,你无法回答这个问题。这取决于浏览器,例如firefox 8应该比6快,等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多