我正在处理一个使用本地模板系统的Web应用程序,该系统可以将Perl代码嵌入到HTML中。这些语句由模板解析器在运行时使用eval EXPR
执行。eval的更快选择?
这是非常灵活的,但是这些语句分散到处,并得到执行很多。 eval EXPR
(而不是eval BLOCK
)要求Perl每次启动解释器,并且我的配置文件显示它们是相当重要的放缓来源。
许多嵌入式Perl语句非常简单。例如,一个模板可能有这样一行:
<p>Welcome, <!--E: $user->query('name') -->.
或者:
<p>Ticket number <!--E: $user->generate_ticket_number() --> has been generated.
也就是说,他们只是调用对象的方法。但是,也有更复杂的。
我希望能够优化这个,到目前为止有两个想法,两者都很糟糕。第一种方法是重写所有模板,以便使用USER:NAME
和USER:GENERATETICKETNUMBER
之类的标记替换简单的调用,然后解析器可以扫描并调用适当的对象方法。但是,不用处理混合HTML和Perl的模板,我可以使用混合HTML,Perl和令牌的模板。
第二个想法是尝试解析嵌入式Perl,找出语句想要做什么,如果足够简单,可以通过符号引用调用适当的对象方法。这显然是疯了。
我忽略了一些合乎逻辑的解决方案吗?
+1“这显然是疯了。” – 2011-12-28 05:56:16