有人可以指导我一个我可以参考的标准 jsPerf,它还应该包括以下模板:灰尘、下划线、霍根、小胡子、车把。
我知道非手无寸铁。这是必需的吗?为什么?
下划线
jsPerf 测试中显示的“with”和“no with”(特定于 underscore.js)是什么?有人可以解释一下。
有,方便,性能慢
_.template("<%= myvar %>", { myvar: "foo" });
不带,不方便,性能更快
_.template("<%= data.myvar %>", { myvar: "foo" }, { variable: "data" });
两全其美
_.extend( _.templateSettings, { variable: "data" } ); // Do this once.
_.template("<%= data.myvar %>", { myvar: "foo" });
_.template("<%= data %>", "foo");
_.template("<%= override.myvar %>", { myvar: "foo" }, { variable: "override" });
另请注意,如果第二个参数为 null、未定义或未给出,则模板函数将返回已编译的模板。所以在覆盖变量的情况下:
var renderFn = _.template("<%= override.myvar %>", null, { variable: "override" });
renderFn({ myvar: "foo" });
性能与可读性
在所有测试中,我看到流行的模板,如 mustache、handlebars、dust、hogan 等似乎比其他模板性能落后,那么为什么人们使用它们而忽略了表现最好的模板,是因为这些模板引擎的成熟度吗?
并非 JavaScript 中的所有内容都与性能有关。必须在可扩展性、可维护性、可读性和便利性之间取得平衡。经验法则是代码的可读性和便利性,然后只在需要时优化性能。有一个SO 线程对此主题进行了很好的讨论。
So to answer, other template methods are often chosen with performance at a lower priority then others.