我们被要求将这个软件迁移到网络上,并使用Javascript重新实现它。
我知道C#会被编译成本地代码,但近年来Javascript的性能也有了巨大的进步。
我想知道是否有任何关于Javascript在原始数据操作方面(包括对象和数组)的性能和内存方面的一般信息或与.NET或其他本地执行语言进行比较的内容?
如果你是一名熟练的C#开发人员和初学者JavaScript开发人员,那么你的C#肯定会更快。如果你两者都熟练掌握,那么你的C#可能会更快,但差别可能没有你想象的那么大 - 这完全取决于具体的程序。
C#
和JavaScript
都是语言,它们本身没有特定的性能特征。 C#
编译为.NET IL并在虚拟机中执行,并且可以进行各种优化(例如您提到的JITing)。JavaScript
不是编译的,而是解释的 - 并且由特定于浏览器的JavaScript引擎执行。每个浏览器可能采用不同的方法来改善执行JavaScript的“性能”- 但是性能优化通常涉及权衡(例如速度和内存之间的权衡)。
除了其他因素等同于(且非微不足道),.NET代码 - JITed或非JITed - 将比在浏览器中运行的类似JavaScript代码表现得更好。性能差异的程度高度具体化到特定的程序。从正在处理的对象的大小和数量到如何以及何时使用循环 - 所有这些都会影响一个运行时与另一个运行时之间的比较。
开发人员有时会对哪种语言是解释的还是编译的感到困惑,许多人认为这两者是互斥的。实际上,情况要复杂一些。
dynamic
和Reflection.Emit()
,使得C#更像脚本语言,同时还“规避”了编译器和它所提供的一些性能好处。在“现实世界”中(非平凡代码、标准编译器和标准设置),编译后的代码将比等效的“纯”解释代码运行得更快。然而,现在的解释代码通常通过JIT编译器运行-这有可能比预编译代码更快(因为JITter可以调整编译以利用特定的指令集,例如)。C#和Java等语言通过将其编译为字节码,然后在执行期间通过JITer来运行,从而利用了编译和“解释-JIT-编译”的优势。
JavaScript面对的性能障碍与编译无关,而是与语言的某些方面以及它的使用方式有关。再次看一下Firefox上的博客文章,您会看到基线编译器如何跟踪类型信息的变化(这比之前的模型丢弃相关的JIT指令要好)。
综上所述,良好编写的JavaScript在现代浏览器上会运行得非常快。它仍然会遭受初次JIT传递的性能损失(相当于在“真正”的JIT之前编译为字节码),但引擎被编写成尽可能将其最小化。