【问题标题】:Difference between compile(), parse(), and render() in mustache.jsmustache.js 中 compile()、parse() 和 render() 之间的区别
【发布时间】:2012-02-21 20:27:54
【问题描述】:

有什么区别:

Mustache.compile() , Mustache.parse(),和 Mustache.render()

在新的mustache.js 0.5.0 版中,也许您可​​以告诉我们解析和编译之间的一般区别是什么。

【问题讨论】:

  • 阅读源代码,我有,但仍然看不出来。

标签: javascript templates mustache


【解决方案1】:

编辑

通过API change introduced in version 0.8.0compile() 方法已集成到parse()。不再需要手动编译模板。


Mustache.parse()

从语法上解析模板并从中创建一个 JavaScript 函数体(一个字符串)。在该过程中,它会通知模板中遇到的任何语法错误。

Mustache.compile()

使用从成功的parse() 返回的函数体来创建一个实际的 JavaScript 函数。创建的函数被放置在缓存中以供重复使用。

Mustache.render()

为给定模板(由compile() 创建的模板)获取适当的函数并将其应用于实际数据。这将创建要在屏幕上显示的结果。

【讨论】:

  • 感谢托马拉克!我可以看到在渲染之前进行编译有时可能对性能有意义吗?但我想不出使用解析有意义的情况。你能举个例子吗?
  • @alnafie 解析始终是将任意字符串(恰好符合 Mustache 语法的字符串)转换为计算机可以操作的字符串的第一步。这正是浏览器读取 JavaScript 源代码文件时发生的情况。如果不解析你给它的输入,没有计算机可以做任何事情。 mustache.js 将模板编译成一个 JavaScript 函数,该函数被定制为完全按照模板所说的,而不是别的。最后,这将比每次调用(“渲染”)模板时解释模板快得多。
  • 公开一个解析阶段也可以让一些东西留在内存缓存中并在您的前端使用。
【解决方案2】:

提示Mustache.parse(template) 是可选的,可加快模板的未来使用速度。当您想将模板与一组(大)数据一起使用时,这很有用。如果不是这种情况,调用Mustache.render()(生成最终结果)就足够了。

【讨论】:

    【解决方案3】:

    一点额外的: 如果您使用自定义分隔符(而不是 {{}}),您可以在使用自定义分隔符作为参数调用 Mustache.render 之前使用 Mustache.parse

    例子:

    var template = "<h1>Hello {{$name$}}</h1>"
    var customTags = [ '{{$', '$}}' ];
    Mustache.parse(template, cutomTags);
    var result = Mustache.render(template, { name: "John" };
    console.log(result);
    

    将导致:

    Hello John
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2021-07-23
      • 1970-01-01
      • 2012-03-15
      • 2015-07-01
      • 1970-01-01
      • 2014-12-14
      • 2016-06-27
      • 1970-01-01
      相关资源
      最近更新 更多