【问题标题】:How do Javascript optimizations compare to C optimizationsJavascript 优化与 C 优化相比如何
【发布时间】:2012-09-27 09:22:27
【问题描述】:

我目前正在学习低级 C 课程,但我的工作是编写 Javascript。

到目前为止,我的书已经介绍了几个 C 优化/问题领域(刚刚开始,所以我没有太多):

  • 过程开销(恢复寄存器、创建堆栈等)
  • 有时会创建临时变量,而不是在循环中读取/写入内存。

另外还有多少时间可以用来“优化”Javascript? C 被编译为机器代码,并且可以花费更多时间来编译可执行文件。一个典型的 JS 编译器优化花费了多少时间?

Javascript 是一种比 C 更高级别的语言,因此我实际上并不“知道”下面发生了什么。我应该担心哪些优化?我现在在 C 中学习的内容是否也适用于 Javascript?

【问题讨论】:

  • 嗯,没有像“典型的 JS 编译器”这样的想法,所以 .. Chrome/V8 恰好是一个非常优化的 JS 实现,虽然 FF 不是也不是狗。我相信两者都使用不同的方法,但我没有研究过两者的内部结构。 ActionScript 基于 JavaScript,但可以利用静态类型注释;动态类型可能是 JS 优化的最终限制(同样的“问题”困扰着其他动态语言)。
  • 我认为你应该看看实际的 Javascript 引擎,至少 V8SpiderMonkey。我倾向于说“不”,因为 C 中有一些低级操作在 Javascript 中是不可能的(例如 GC 和 malloc)。
  • @JaredFarrish 但是 Java/C# 表明 GC 与 malloc 在许多用例中可以支持 GC。与 JavaScript 的区别在于 Java/C# 也是强类型的..
  • 还有Native Client in Chromium,它提供 Pepper C 和 Pepper C++。这将是一个更有趣的比较。
  • @pst - 重点是“我正在学习的 C 优化技术在 Javascript 中是否有效”。该评论并不意味着一种方法比另一种更好或更差,只是不同

标签: javascript c optimization


【解决方案1】:

Javascript 和 C 有如此截然不同的表达方式,我怀疑甚至可以比较优化技术。

对于这篇文章,我将只看程序员可以进行的优化:

C:

  • 选择最合适的数据类型。 (int/long/float/double)
  • 位域和字边界对齐。
  • 使用malloc 并选择何时释放内存以及何时重用它。
  • 中间计算

Javascript:

  • 避免在需要时创建无意义的对象。对象重用
  • 中间计算
  • 避免过于频繁地刷新 DOM
  • 将未使用的大引用设置为null

作为一个简单的例子。这两者真的是天壤之别,所以我必须将优化技术简化为:

  • 尽可能重复使用
  • 不要做不必要的事情。
  • 如果您做了一些计算成本很高的事情并且您再次需要它 - 保存它。
  • 选择合适的算法。

就我而言,列表中的最后一项是任何编码人员都可以学习如何做的最重要的优化。

  • 如果您有更好的排序方式,请不要使用BogoSort。 (提示,你知道。)
  • 看看您的标准库是否有快速的方法来做您想做的事情。在证明旧轮子不起作用之前,不要重新发明轮子。
  • 在分析表明您值得付出努力之前,不要太担心进行微优化。

免责声明:是的,我知道“过早的优化是万恶之源”这句老话。选择一种聪明的,或者至少不是非常愚蠢的方法来解决问题是不是为时过早..

【讨论】:

  • Setting big unused references to null 究竟指的是什么?
  • 如果你有一个大的全局数组,也许它包含某种用于制作表的初始化数据,只要有对该数据的引用,就不会释放内存。将变量设置为null 将允许释放该值。同样,有时大字符串可以在闭包中捕获,并将该变量设置为null 将释放空间。在手持设备上,即使是几 K 的 RAM 有时也很重要。
  • 它应该是“设置null的大未使用引用”。你所拥有的听起来像是惩罚性案件。
猜你喜欢
  • 2021-04-19
  • 2021-12-27
  • 2015-12-28
  • 2011-08-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2013-03-24
  • 2023-03-13
相关资源
最近更新 更多