模板引擎中的“with”和“no with”

时间:2012-06-20 06:24:40

标签: javascript underscore.js template-engine dot.js

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

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

  1. 从我观察到的情况来看,dot.js是一个不错的表演者 渲染速度,但对于大型应用程序是否足够成熟?

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

  3. 在所有的测试中我都看过像小胡子这样的流行模板, 车把,灰尘,hogan等似乎落后于性能 其他模板,所以为什么人们使用它们离开顶部 表演者,是因为这些模板引擎的成熟度?

  4. 提前致谢

1 个答案:

答案 0 :(得分:7)

  

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

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

下划线

  

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

使用方便,性能较慢

_.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,undefined或not given,则template函数返回已编译的模板。所以在覆盖变量的情况下:

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

性能与可读性

  

在所有的测试中,我都看过像小胡子这样的流行模板,   车把,灰尘,霍根等似乎落后于其他性能   模板,所以为什么人们使用它们离开顶部   表演者,是因为这些模板引擎的成熟度?

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

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