我把翡翠和车把混合在一起,这样我就不用写HTML了,可以为数据相关的东西提供很好的语法。
例如,这可能是header的模板,header.handlebars.jade
html
{{#with user}}
{{if user.username}}
header Welcome back, {{username}}
{{/if}}
{{/with}}
我想知道我是否应该用jade预编译这个模板,然后当我在node.js上使用它的服务器端把手?如果我不这样做,我基本上在每个请求上编译这个模板2次(首先是jade,然后是handlebars)。
我不完全确定这是否起任何作用,但似乎jade.compile
和Handlebars.compile
都是同步函数,这意味着只要编译发生,它们就会阻塞其他请求。
是的,预编译模板是个好主意。原因是使用模板通常包括两个步骤:
- 从数据和解析模板生成字符串
{{#with author}}
<h2>By {{firstName}} {{lastName}}</h2>
{{/with}}
这个块可以被认为是一个父with
语句和几个子"<h2>By "
, firstname
, lastName
和"</h2>"
的树。
当你预编译一个模板时,你所做的是生成代码,这是解析和生成树结构的结果,所以每次使用该代码时,你不需要解析和生成树。你节省了很多CPU周期
逻辑与是否应该在服务器启动时同步读取某些文件或每次读取它们相同。如果您在开始时读取模板文件,您将执行较少的IO操作,但是您将使用更多的内存来存储这些模板的内容。解析也是如此。
我们中的许多人所做的是确定哪些资产将被大量使用(模板通常在这一类别中),将它们缓存在内存中,并留下其余的按需读取。这意味着你不能仅仅改变一个模板和更新你的网站。您需要修改站点的版本,为了进行更新,您必须终止Node进程并重新启动它。这对你的网站来说是否是个好主意取决于你如何组织你的部署。
至于结合Jade和Handlebars,这看起来不像是一个好主意,因为呈现两个不同的模板是一个更昂贵的操作,因为你只能预编译其中一个。您不能同时预编译它们,因为一个模板依赖于另一个模板的结果。在您的例子中,Jade模板的"源代码"取决于应用Handlebars模板的结果。