什么是javascript模板预编译?

时间:2012-11-23 22:08:03

标签: javascript templates optimization precompile

我正在为javascript中的工作进行简单的模板工作..它需要非常简单,所以我没有使用Handlebars,小胡子或任何其他强大的模板引擎。

我一直在阅读“ PRECOMPILE ”或“ COMPILE ”这个词来提升效果。但我不确定那究竟是什么意思。在我的工作中,我将模板html缓存在我的对象中,以避免每次都碰到模板html。

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

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

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

当有人(车把等)说编译模板时,有人可以告诉我它究竟意味着什么。 ?

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:-1)

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

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

有一天, _ ___决定将 _ ____带到 _ ____。

编译模板将填补空白。

当天,约翰决定将SALLY带到BATMAN PREMIER。

希望比喻在这种情况下很有用:)