【问题标题】:"with" and "no with" in template engines模板引擎中的“with”和“no with”
【发布时间】:2014-11-16 09:18:14
【问题描述】:

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

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

  1. 据我观察,dot.js 表现稳定 渲染速度,但对于大型应用程序是否足够成熟?

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

  3. 在所有测试中,我都看到了一些流行的模板,比如 mustache, 车把、灰尘、霍根等似乎比性能落后 其他模板,那么为什么人们使用它们而忽略了顶部 表演者,是不是因为这些模板引擎的成熟?

提前致谢

【问题讨论】:

  • 你介意列出你经历过的jsPerfs以供参考吗?
  • 关于问题 2:»默认情况下,模板通过文档中的 with 语句将数据中的值放置在本地范围内。见developer.mozilla.org/en/JavaScript/Reference/Statements/with
  • 嗨,这是我已经解决的性能测试..jsperf.com/dom-vs-innerhtml-based-templating/473
  • @rodneyrehm 我已经了解下划线特有的 with 和 no 之间的区别,但我确实有一个问题是否总是可以使用 no with 来实现下划线,我的意思是在预编译和缓存的情况下...?
  • @bhargav 我讨厌“with”,所以我将下划线设置设置为全局使用对象:_.extend( _.templateSettings, { variable: "data" } ); 现在我可以编译/渲染模板,而不必每次都附加{ variable: "data" }

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


【解决方案1】:

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

我知道非副手。这是必需的吗?为什么?

下划线

显示的“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、未定义或未给出,则模板函数将返回已编译的模板。所以在覆盖变量的情况下:

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

性能与可读性

在所有的测试中,我都看到了一些流行的模板,比如 mustache, 车把、灰尘、霍根等似乎比其他性能落后 模板,所以为什么人们使用它们而忽略了顶部 表演者,是不是因为这些模板引擎的成熟?

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

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

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2012-03-31
    • 2015-01-18
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多