有没有比较Javascript的性能和Java的测试?
更新:因为每个人都在问为什么地狱这个问题,这里有一些背景:)
众所周知 - 我希望 - 现在的Javascript不仅存在于Web客户端,还存在于node.js的Web服务器中.
它也可以通过appcelerator和phonegap在手机和dekstops中运行.
它也可以在Web浏览器中大量使用,使用户体验与桌面应用程序一样的第一类.
但Java也可以做这些事情,在Web客户端和手机上运行applet.它也是后端语言,有许多框架可供选择.
由于它们中的每一个都可以在上述区域中几乎/完全相互替换,我想知道它们之间的性能差异,对于我描述的每种情况:
客户端:Java Applets vs Javascript
服务器:Java EE与带有Node.js + Express的Javascript
手机:Java ME vs Javascript with Phonegap/Appcelerator
桌面:Java SE vs Javascript with Phonegap/Appcelerator
我希望现在的背景更加明确.
Java和JavaScript都是编程语言.编程语言只是一堆抽象的数学规则.编程语言并不快.或者慢一点.他们只是有.
应用程序的性能与语言无关.最重要的因素是应用程序架构.然后是算法效率.然后微观优化.然后是编译器/解释器的质量.然后是CPU.中间可能还有其他几个步骤.然而,这种语言没有直接发挥作用.(当然,如果你谈论的基准,那么也是特定基准起到了重要作用,以及如何很好地执行基准,它是如何运行的,谁执行基准家伙是否真的知道一些关于标杆,甚至更重要的是统计数据.此外,准确定义你的实际意思"快速"非常重要,因为它也会对基准产生重大影响.)
但是,这种语言可能会间接发挥作用:在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库的问题,因为JavaScript没有I/O库,因此I/O库不能很好地处理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实现速度更快的实现.此外,我可以保留这对,只是使用不同的基准.将计算机语言基准游戏称为"游戏" 是有原因的:他们甚至鼓励你在他们自己的页面上使用基准来使任何语言升到顶端.
我只有一个轶事要补充:我最近在Javascript(nodejs v0.6.8)中重新实现了一个Java calc服务器(财务).在WRT开发时,与原始Java实现相比,Javascript实现轻而易举,而且代码行数要少得多.真的,这是一股清新的空气.
基于Javascript的服务器能够以2.4k交易/秒计算,而Java服务器使用更少的内存在相同的硬件上处理400 + /秒.我不会将速度增加归因于原始V8与Java 7性能,而是实现.Javascript实现使用的数据结构要少得多,方法调用的数量减少了一个数量级,并采用了更直接和简洁的方法.
不用说,我对node.js的性能非常满意.而这一点,来自Java的人很多(9)年.
以下是一些比较Javascript(V8)和编译Java的测试:
32位
64位
它们表明Java通常更快1.但是,如果你仔细研究那些页面和链接的资源,你会发现很难比较像.
有趣的是,对于"regex-dna"基准测试,Javascript确实比Java(在某些条件下)明显更好.我的猜测是,这是因为Javascript正则表达式引擎比Java正则表达式引擎更快.考虑到典型Javascript应用程序中正则表达式的重要性,这并不奇怪.
1 - 严格地说,你不能说语言X比语言Y快.你只能比较各自语言的具体实现.我链接到的网站很明显......如果你想通过头版进入.然而,从具体的数据点推广出来并没有完全不合理......并且显然没有矛盾的数据点......在计算密集型任务中,Java通常比Javascript更快.但另一方面,这种表现通常不是客观重要的标准.
显然是Java.
程序员喜欢将执行速度与某种小便内容进行比较.这只是一个指标,大部分时间,而不是最重要的指标.Java是一种语言,它具有足够快的几乎任何东西,但是足够高的级别,你得到像GC这样的东西,你通常不会用类似的语言.Javascript是一种动态闭包语言,非常适合快速完成任务(对于陷入OO世界的FP程序员而言;-)).在任何一个合适的空间中,没有太多的交叉路口.
我现在停止教诲了
编辑:解决帖子中的编辑问题
由于编写惯用javascript(由函数组成的函数)的方式,它使异步编程出乎意料地好,可能比任何其他类似流行语言更好.当涉及到大量的短连接时,Node.js会闪耀,所以javascript非常适合这种事情.
虽然node.js绝对是令人敬畏的,但真正的新热点并不意味着它在所有事情上都是最好的,无论炒作说什么.如果一个java应用程序可以被节点替换,那么java可能首先不合适.
可能不是,但这并不重要.
在谷歌Chrome的JavaScript JIT之前,只要问题变得足够大以克服加载时间,Java就会赢得JavaScript.
由于整数与浮动数学,Java仍然应该彻底打败JavaScript.无论JIT有多好,它都无法真正弥补这一点.