2

我正在寻找一个 javascript 模板引擎,它在大型 js 应用程序中使用时性能良好,也非常适合移动应用程序。因此,我已经针对这些进行了各种 jsPerf 测试。似乎有很多显示不同的结果,并且很难找出哪个是标准测试。

有人可以指导我一个我可以参考的标准 jsPerf,它还应该包括以下模板:灰尘、下划线、霍根、小胡子、车把。

  1. 从我观察到的 dot.js 是一个稳定的表现者,具有良好的渲染速度,但它对于大型应用程序是否足够成熟?

  2. jsPerf 测试中显示的“with”和“no with”(特定于underscore.js)是什么?有人可以解释一下。

  3. 在所有测试中,我看到流行的模板,如 mustache、handlebars、dust、hogan 等似乎比其他模板性能落后,那么为什么人们使用它们而忽略了表现最好的模板,是因为这些模板引擎的成熟度吗?

提前致谢

4

1 回答 1

7

有人可以指导我一个我可以参考的标准 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.

于 2013-07-10T01:29:14.287 回答