模板引擎中的"with"和"no with"

bha*_*gav 2 javascript template-engine underscore.js dot.js

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

有人可以指导我一个标准的jsPerf,我可以参考,还应该包括以下模板灰尘,下划线,hogan,胡子,把手.

  1. 根据我的观察,dot.js是一个具有良好渲染速度的常量表演者,但它对于大型应用程序是否足够成熟?

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

  3. 在所有的测试中,我看到流行的模板,如小胡子,把手,灰尘,hogan等似乎落后于其他模板的性能,所以为什么人们使用它们而忽略了最佳表现者,是因为这些模板引擎的成熟度?

提前致谢

Suk*_*ima 7

有人可以指导我一个标准的jsPerf,我可以参考,还应该包括以下模板灰尘,下划线,hogan,胡子,把手.

我知道非手.这需要吗?为什么?

下划线

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

随着,方便,性能较慢

_.template("<%= myvar %>", { myvar: "foo" });
Run Code Online (Sandbox Code Playgroud)

不带,不方便,性能更快

_.template("<%= data.myvar %>", { myvar: "foo" }, { variable: "data" });
Run Code Online (Sandbox Code Playgroud)

两全其美

_.extend( _.templateSettings, { variable: "data" } ); // Do this once.
_.template("<%= data.myvar %>", { myvar: "foo" });
_.template("<%= data %>", "foo");
_.template("<%= override.myvar %>", { myvar: "foo" }, { variable: "override" });
Run Code Online (Sandbox Code Playgroud)

另请注意,如果第二个参数为null,undefined或未给出,则template函数返回已编译的模板.所以在override变量的情况下:

var renderFn = _.template("<%= override.myvar %>", null, { variable: "override" });
renderFn({ myvar: "foo" });
Run Code Online (Sandbox Code Playgroud)

性能与可读性

在所有的测试中,我看到流行的模板,如小胡子,把手,灰尘,hogan等似乎落后于其他模板的性能,所以为什么人们使用它们而忽略了最佳表现者,是因为这些模板引擎的成熟度?

并非JavaScript中的所有内容都与性能有关.在可伸缩性,可维护性,可读性和便利性之间必须保持平衡.经验法则是代码的可读性和便利性,然后只在需要时优化性能.有一个SO线程,对该主题进行了很好的讨论.

因此,为了回答,通常选择其他模板方法,其性能优先于其他模板.