【发布时间】:2017-02-08 03:44:56
【问题描述】:
然后,我想,更完整的问题是,“当 Javascript 引擎已知时(基于每个流行的引擎),这些考虑因素如何受到影响。”
我觉得我需要询问“社区”的原因是,像 Strongloop 这样创建 Node.js 之类的东西的人,也编写了 util.inherits 之类的代码,一个函数在其中,而不是:TheConstructorFunction.prototype.constructor = TheConstructorFunction 他们创建了一个属性定义本身有 4 个属性被设置:
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
这对我来说似乎效率低下,但是,与编写此类代码的作者相比,我在 3 年内一直在努力编写更好的 Javascript。有没有解释为什么这有效或无效?
一个答案说 util.inherits 并不是低效的,因为子类操作很少见。但是考虑到一些库处理在构建到测试结果观察之间发生的成百上千的子类操作,如果 Node.js 内部使用 util.inherits 那么这会影响其使用者的开发时间。我认为,在这个级别上,效率确实很重要,我希望 util.inherits 不会在内部使用。我什至不明白 util.inherits 的目的。为什么要拥有它?我认为它促进了复合效率低下。 require('util').inherits(C1,C2); 几乎是同义词,并且可能比 C1.prototype=Object.create(C2.prototype); C1.prototype.constructor=C1; 慢如果它只是为了吸引消费者,我对此很冷静。我担心这些专业人士是否在内部使用该功能,因为更大的库将取决于 Node.js 的效率。至于使.constructor 不可枚举......我认为它的“可枚举性”很重要的情况很少见,应该留给消费者,但如果内部操作取决于 util.inherits,这不是真的留给消费者。
【问题讨论】:
-
您给出的
ctor.prototype的示例与您与之比较的prototype.constructor不同。那是苹果对橘子。 -
"一些库处理在构建到测试结果观察之间发生的成百上千的子类操作" - 真的吗?什么让你有那个想法?不,即使这个规模也无关紧要,例如比较从磁盘读取源文件。 “几乎是同义词,可能更慢” - 实际上两者都不是。如果您对此感到好奇,请自己对它们进行基准测试。不,标准库函数不会导致效率低下,它们会促进简单,这比微优化可以为开发人员节省更多的时间。
-
@Bergi,你可能是对的,我接受你的挑战。我将在不久的将来的某个时候对它们进行基准测试。因为,如果你是对的,那么我只是在浪费更多的时间去思考这些。但如果你错了,那么你和一大群博主/教育者/专业人士正在传播一个相当令人震惊的概念。我编写了一个 PHP 风电场管理 SaaS,它根据请求的类型使用了近 20-50 个不同的类,我正在考虑在 Node.js 中实现该系统,但我计划使用一个类似于 Wordpress 的底层系统作为其引擎。 ..所以有一个例子。
标签: javascript performance memory execution javascript-engine