JavaScript的效率有多高?

5

有时我听到反对使用JavaScript在客户端进行操作的观点。人们会说“JavaScript效率低下...或者很慢”。我想知道是否有实际事实支持这个结论?


5
与哪种其他客户端脚本语言相比,“slow”或“inefficient”? - Joseph
3
“低效”和“慢”是高度主观的词语,因为它们会引发问题:对谁来说是低效或慢?与什么相比较? - Dan Lew
13个回答

12

Javascript性能实际上涉及两个因素:

  1. 你的代码
  2. 运行你的代码的脚本引擎

优化你的代码是最容易解决的问题。在开发时,尽可能地优化你的代码即可。

第二个因素并不总是那么容易。我曾经遇到过一些应用程序,在一个浏览器上的性能非常好,而在另一个浏览器上却比蜗牛还要慢。有些则在各个浏览器上运行得非常顺畅。你所能做的就是不断测试,测试,再测试。如果你想了解更多信息,可以查看以下链接:

Coding Horror: The Great Browser JavaScript Showdown


这是Jeff Atwood写的一篇很棒的文章。谢谢。 - dev.e.loper
6
三个因素!浏览器是其中第三个,并且通常是最慢的。请记住,DOM 不是 JavaScript 的一部分,而是属于浏览器。 - Svante Svenson

2
这很大程度上取决于浏览器的JavaScript引擎。总体而言,它是一种脚本语言,因此它不像C++或其他编译语言那样表现出色。但是,它非常擅长其预期用途,也就是驱动网页。

1
JavaScript如果使用得当,速度非常快。否则它会表现得很糟糕。 例如:无限循环可能会使您的浏览器挂起。(但浏览器会询问您是否停止执行)

笑,嗯,不是所有的东西都是这样吗?如果一个C++程序有一个无限循环,操作系统会询问您是否想要终止该程序。 - Darren Kopp
1
@Darren:如果一个C++应用程序(或任何其他桌面应用程序)有一个无限循环(通常称为“无限”,对吧?),操作系统只会在它以某种方式表现不当时要求你终止它。通常这意味着它没有响应信号。如果没有发送任何信号(包括任何类型的ping信号),它将让您的程序永远运行而不中断。但是,在浏览器中使用JS就不是这样了。 - rmeador

1

在客户端和服务器上执行哪些任务是一个重要的选择,JavaScript作为一种语言的效率并不是唯一需要考虑的因素。

将在客户端上操作的数据必须传输到客户端。如果脚本不需要推送到客户端的所有信息,则页面加载时间将受到影响,并且过滤操作将在链路的较低效端完成(即在用户获取其信息之前,您将支付网络传输时间的费用)。

在客户端运行的业务规则将暴露给好奇的最终用户。

在客户端运行的验证业务规则必须再次在服务器上运行,因为您不能信任在您无法控制的环境中运行的代码。

不同的浏览器甚至在给定浏览器系列内可用的ECMAScript实现之间使得这个问题非常主观,并且存在很多变化。


0

这要看情况。你是在和什么进行比较?在不同的浏览器中,情况会有很大的不同。

它可以表现得非常出色,也可以相反,这取决于编写的代码。

你必须使用JavaScript来完成某些事情,例如操作DOM。


0

我想大多数情况下它比回传要快得多!


如果你要给负评,至少解释一下为什么! - stevehipwell

0

我会说这是个不正确的答案。你如何衡量JavaScript的性能,并用什么进行比较呢?我猜只要JavaScript是客户端网页编程的唯一选择(我不是在说VBScript),你就无法真正对它的效率做出任何评论。


是的,你可以决定将处理推到客户端还是服务器。你还可以确定保留什么和削减什么,有些事情在ie6中根本无法以任何速度完成。 - garrow
可能我误解了问题。我在想JavaScript的使用是否有效。是的,你完全正确,关于在哪里放置不同计算逻辑确实存在各种考虑。根据经验法则,逻辑应该分为以下几个部分:“前端不应有任何业务逻辑”。所以JavaScript的主要目的是创建动态效果和提升用户体验。但我仍然怀疑如何衡量JavaScript在这方面的效率。 - Artem Barger

0

这也取决于你如何编写代码。如果你遵循最佳实践,那么就没问题了,正如之前所说,它比postbacks更好!


0
你只能在解决具体问题的情况下回答这个问题。发一个例子,那么我们可以讨论各种技术的优点......

0
JavaScript 并不低效,效率并不取决于语言。解释器可能是低效的。例如,Firefox 解释器在 Linux 上运行非常缓慢,在 Windows 上的 Firefox 中运行得更好。Chrome 实现了一个更快的解释器。有一些 JavaScript 解释器不需要在浏览器中运行,它们通常更快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接