6

我正在为我的 javascript 工作开发简单的模板工程。它需要非常简单,所以我不使用 Handlebars、musache 或任何其他可用的强大模板引擎。

我一直在阅读“编译”或“编译”模板来提高性能。但我不确定那到底是什么意思。在我的工作中,我将模板 html 缓存在我的对象中,以避免每次都碰到模板 html。

这是一个非常简单的功能,主要执行以下操作

_template = _template.replace(/\{(.+?)\}/g, function(token, match, number, txt) {
                    return item[match];
                });

item是保存要替换的值的对象。

有人可以告诉我当他们(车把等)说编译模板时究竟是什么意思。?

4

3 回答 3

11

Underscore、Handlebars 和大多数其他 JS 模板从模板字符串中创建一个函数。然后,您可以使用不同的参数多次调用该函数并获取相应的 HTML 字符串。(我相信 Underscore 和 Handlebars 都是通过将模板字符串解析为 JS 代码,然后调用Function构造函数使编译后的模板函数来实现的。)

当这些库谈论“预编译”时,它们意味着将模板字符串转换为可重用函数的初始步骤。这可能是一个繁重的步骤,但它使渲染模板更快(在大多数情况下比简单的正则表达式替换更快),因此从模板代码创建函数然后多次使用它更有效,而不是重新编译和渲染每次调用模板时。

于 2012-11-23T22:17:43.627 回答
7

通常模板使用解析regex然后转换为function使用eval。这称为预编译模板

使用一些作为参数传递的数据调用此类函数,称为渲染模板。因此,模板不会在您每次调用它时都被解析——它已经以连接并返回字符串的函数形式存在。

于 2012-11-23T22:16:40.637 回答
-1

更新:我在这里不正确,请参阅下面的评论。

好吧,假设我的模板是一个填空的句子:

一天,_ ___ 决定要带_ ____ 去_ ____。

编译模板将填补空白。

那天,JOHN 决定要带 SALLY 一起去看 BATMAN PREMIER。

希望隐喻在这种情况下会有所帮助:)

于 2012-11-23T22:16:19.587 回答