是否有任何测试可以将Javascript的性能与Java相比较?
更新:因为每个人都在问这个问题到底为什么,这里有一些背景:)
众所周知 - 我希望 - 现在的Javascript不仅存在于Web客户端,还存在于node.js的Web服务器中。
它也可以在appcelerator和phonegap的手机和dekstops中运行。
它也可以在Web浏览器中大量使用,使用户体验与桌面应用程序一样的第一类。
但Java也可以做这些事情,在网络客户端和手机上运行applet。它也是后端语言,有许多框架可供选择。
由于他们中的每一个都可以在上述区域中几乎/完全互相替换,我想知道它们之间的性能差异,对于我描述的每一种情况:
我希望现在的情况更加明确。
答案 0 :(得分:117)
Java和JavaScript都是编程语言。编程语言只是一堆抽象的数学规则。编程语言并不快。或者慢一点。他们只是 。
应用程序的性能与语言无关。最重要的因素是应用程序架构。然后是算法效率。然后微观优化。然后是编译器/解释器的质量。然后是CPU。中间可能还有其他几个步骤。然而,这种语言没有直接发挥作用。 (当然,如果你正在谈论基准测试,那么特定的基准测试也会发挥作用,以及基准测试的实施情况,运行情况如何,实际执行基准测试的人是否知道< / em>关于基准测试,甚至更重要的是统计数据。另外,精确定义你实际上意味着什么通过“快速”是非常重要的,因为它也可以有对基准的重大影响。)
但是,语言可能会间接发挥作用:在10行高度表达,清晰,简洁,可读,精心设计,隔离,高级别的Lisp代码中查找和修复性能瓶颈要比在100行纠结,低级别C.(请注意,这两种语言仅仅是示例。我并不是要将任何一种语言单独出来。)例如,Twitter表示用比Ruby更少表达的语言,他们他们无法在如此短的时间内对其架构进行如此彻底的改变,以解决其可扩展性问题。 Node.js能够提供如此良好的I / O性能的原因是因为JavaScript的标准库非常糟糕。 (这样,Node.js必须自己提供所有I / O,因此他们可以从头开始优化它以进行优化的I / O.例如,Ruby和Python已经使I / O库工作得很好Node.js更加成熟......但是,Ruby和Python已经拥有大型标准库,包括I / O库,所有这些库都是同步的,并且不适合使用偶像库.JavaScript没有问题I / O库不能很好地处理事件I / O,因为JavaScript根本没有I / O库。
但如果真的想要比较两者,那么这里有一个有趣的数据点:HotSpot是一个比较流行的,也是性能更高的JVM实现,是由一个创建的包括其他人在内的一群名叫Lars Bak的家伙。但实际上,HotSpot并没有凭空出现,而是基于Anamorphic Smalltalk VM的源代码,该代码由一群人组成,其中包括一个名叫Lars Bak的人。
V8是一个比较受欢迎的,也是性能更高的JavaScript实现之一,由一群人组成,其中包括一个名叫Lars Bak的人。但实际上,V8并没有凭空出现,而是基于Anamorphic Smalltalk VM的源代码,该代码由一群人组成,其中包括一个名叫Lars Bak的人。
鉴于这两者或多或少相同,我们可以期待类似的表现。唯一的区别是HotSpot有超过一百名工程师工作了15年,而V8有十几名工程师工作不到5年。 那只是 的性能差异。它不是关于静态与动态类型(Java 是静态类型,但大多数JVM,当然HotSpot不做任何静态优化,所有优化都是纯动态的),编译与解释(HotSpot实际上是用一个额外的JIT编译器,而V8是纯编译的),高级与低级。这纯粹是关于金钱的。
但我敢打赌,对于Java实现速度更快的每一对Java和JavaScript实现,我都可以找到另一对JavaScript实现速度更快的实现。此外,我可能保持对,只是使用不同的基准。有一个原因将计算机语言基准游戏称为“游戏”:他们甚至鼓励你在他们自己的页面上使用基准来使任何语言上升到顶部。
答案 1 :(得分:34)
我只有一个轶事要补充:我最近在Javascript(nodejs v0.6.8)中重新实现了一个Java calc服务器(财务)。在WRT开发时,与原始Java实现相比,Javascript实现轻而易举,而且代码行数要少得多。真的,这是一股清新的空气。
基于Javascript的服务器能够以2.4k交易/秒计算,而Java服务器使用更少的内存在同一硬件上处理400 + /秒。我不会将速度增加归因于原始V8与Java 7性能,而是实现。 Javascript实现使用的数据结构要少得多,方法调用的数量减少了一个数量级,并采用了更直接和简洁的方法。
毋庸置疑,我对node.js的性能非常满意。而这一点,来自Java的人只有很多(9)年。
答案 2 :(得分:30)
以下是一些比较Javascript(V8)和编译Java的测试:
他们表明Java通常更快 1 。但是,如果你仔细研究那些页面和链接的资源,你会发现很难比较像。
有趣的是,对于“regex-dna”基准测试,Javascript确实比Java(在某些条件下)明显更好。我的猜测是,这是因为Javascript正则表达式引擎比Java正则表达式引擎更快。考虑到典型Javascript应用程序中正则表达式的重要性,这并不奇怪。
1 - 严格来说,您不能说语言X比语言Y快。您只能比较各个语言的特定实现。我链接到的网站很明显......如果你想通过头版进入。然而,从具体的数据点推广出来并没有完全不合理......并且显然没有矛盾的数据点......在计算密集型任务中,Java通常比Javascript更快。但另一方面,这种表现往往不是客观重要的标准。
答案 3 :(得分:10)
程序员喜欢将执行速度与某种小便内容进行比较。这只是一个指标,大部分时间,而不是最重要的指标。 Java是一种语言,它具有足够快的几乎任何东西,但是足够高的级别,你得到像GC这样的东西,你通常不会用类似的语言。 Javascript是一种动态闭包语言,非常适合快速完成任务(对于陷入OO世界的FP程序员而言;-))。在适当的空间中没有太多的交叉方式。
我现在会停止教唆
编辑:解决帖子中的编辑
由于编写惯用javascript(由函数组成的函数)的方式,它非常适合异步编程,可能比任何其他类似流行语言更好。当涉及到大量的短连接时,Node.js会闪耀,所以javascript非常适合这类事情。
虽然node.js绝对是令人敬畏的,但真正的新热点并不意味着它在所有事情上都是最好的,无论炒作说什么。如果一个java应用程序可以被节点替换,那么java的可能性首先是不合适的。
答案 4 :(得分:6)
可能不是,但这并不重要。
在谷歌Chrome的JavaScript JIT之前,只要问题变得足够大以克服加载时间,Java就会赢得JavaScript。
由于整数与浮动数学,Java仍然应该彻底打败JavaScript。无论JIT有多好,它都无法弥补这一点。
答案 5 :(得分:3)
http://benchmarksgame.alioth.debian.org/u64q/javascript.html
(请记住将cpu列视为经过的秒数。)
根据上面的链接JavaScript现在的情况对于几乎所有事情都要慢得多。
答案 6 :(得分:-8)
他们只是名字相似,就是这样。编译Java时(主要是)解释JavaScript。即使使用V8及时编译器,Java在所有方面都更快。