我有一个在Movable Type 5.2上运行的网站,我正在尝试简化我的一些模板,其中涉及根据属于另一个类别的当前类别中的条目进行过滤。
这个模板片段(作为索引模板构建,只打印出每个类别中第一个条目的标题,也是漫画类别中),构建速度非常快(1-2秒),尽管它有点缺憾:
<mt:Categories>
<mt:SetVar name="show" value="1">
<mt:Entries sort_order="ascend" limit="3">
<mt:IfCategory label="Comic">
<mt:If var="show" eq="1">
Hello, <$mt:EntryTitle$>
<mt:SetVar name="show" value="0">
</mt:If>
</mt:IfCategory>
</mt:Entries>
</mt:Categories>
我决定使用变量插值来简化它,最终需要142秒来构建:
<mt:Categories>
<$mt:CategoryLabel setvar="topCat"$>
<mt:Entries sort_order="ascend" limit="1" category="$topCat AND Comic">
Hello, <$mt:EntryTitle$>
</mt:Entries>
</mt:Categories>
如果我使用<mt:SetVarBlock name="allCats"><$mt:EntryCategory$> AND Comic</mt:SetVarBlock>
并在category="$allCats"
代码上使用<mt:Entries>
,那么构建也需要很长时间。
有谁知道这里发生了什么,以及如何让事情变得更快?我还有一些其他模板,理论上可以从这些代码简化中受益(特别是,我希望进一步限制到仅在一个附加类别中的条目的类别模板)但最终花费太长时间来构建它们到位
有没有一种很好的方法来分析MT以找出问题在其代码中的位置?我并不害怕Perl,但我也不知道它有哪些分析工具。
答案 0 :(得分:2)
你可以查看这篇文章:http://www.movabletype.org/2008/10/making_it_easier_to_debug_and_test_your_templates.html
我没有用5.X,所以我不能告诉你它是否仍然有用,但我很想知道。
使用包含15,000个条目和20个类别的测试博客,我无法让您的第一个代码块正常工作。首先,我希望您需要测试所有条目,而不仅仅是最后3条,以确保结果是严格的。也许真正的旧条目是第一个共享这两个类别的条目。
我修改这两个代码块有点让我觉得什么是你想要的,列出还共享一个给定的类别中的每个类别中的最后一个条目(在你的情况下输出,“漫画”,但在我的测试中,“顶故事“)。
在我的5.13安装,我发现有之间的差mt:EntryIfCategory
和mt:IfCategory
{尽管{3}},说明前者以有利于后者的已弃用。
当我运行此代码时:
<mt:Categories>
<mt:Var name="show" value="1">
<mt:Entries lastn="99999">
<mt:If var="show" eq="1">
<mt:IfCategory label="Top Story">
Hello, <$mt:EntryTitle$>
<mt:Var name="show" value="0">
</mt:IfCategory>
</mt:If>
</mt:Entries>
</mt:Categories>
我只获得Categories
次迭代之一的输出,其中外部类别与内部类别匹配。我在想IfCategory
正在测试外部Category
循环的类别而不是内部Entries
循环的类别。当我改为EntryIfCategory
时,它按预期工作。
所以我的最终代码就是这个(包括我用于计时的一堆代码):
<mt:Section regex_replace="/^[\s]*$/mg","" regex_replace="/\n\n/mg","\n">
<mt:SetVarTemplate name="timingstart">
<$mt:Date format="%H" setvar="hours"$>
<$mt:Date format="%M" setvar="minutes"$>
<$mt:Date format="%S" setvar="seconds"$>
<$mt:Var name="hours" op="*" value="3600" setvar="hourseconds"$>
<$mt:Var name="minutes" op="*" value="60" setvar="minuteseconds"$>
<$mt:Var name="totalseconds" value="$hourseconds"$>
<$mt:Var name="totalseconds" op="+" value="$minuteseconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" op="+" value="$seconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" setvar="startseconds"$>
</mt:SetVarTemplate>
<mt:SetVarTemplate name="timingstop">
<$mt:Date format="%H" setvar="hours"$>
<$mt:Date format="%M" setvar="minutes"$>
<$mt:Date format="%S" setvar="seconds"$>
<$mt:Var name="hours" op="*" value="3600" setvar="hourseconds"$>
<$mt:Var name="minutes" op="*" value="60" setvar="minuteseconds"$>
<$mt:Var name="totalseconds" value="$hourseconds"$>
<$mt:Var name="totalseconds" op="+" value="$minuteseconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" op="+" value="$seconds" setvar="totalseconds"$>
<$mt:Var name="totalseconds" setvar="finishseconds"$>
<$mt:Var name="finishseconds" op="-" value="$startseconds" setvar="elapsedseconds">
This code block completed in <mt:If name="elapsedseconds" eq="0">less than 1 second<mt:Else name="elapsedseconds" eq="1">1 second<mt:Else><$mt:Var name="elapsedseconds"$> seconds</mt:If>.
</mt:SetVarTemplate>
++++++++++++++++++++++++++++++++++++++++++
<$mt:Var name="timingstart"$>
<mt:Categories>
<mt:Var name="show" value="1">
<mt:Entries lastn="99999">
<mt:If var="show" eq="1">
<mt:EntryIfCategory label="Top Story">
Hello, <$mt:EntryTitle$>
<mt:Var name="show" value="0">
</mt:EntryIfCategory>
</mt:If>
</mt:Entries>
</mt:Categories>
<$mt:Var name="timingstop"$>
++++++++++++++++++++++++++++++++++++++++++
<$mt:Var name="timingstart"$>
<mt:Categories>
<mt:SetVarBlock name="cats"><$mt:CategoryLabel$> AND Top Story</mt:SetVarBlock>
<mt:Entries lastn="1" category="$cats">
Hello, <$mt:EntryTitle$>
</mt:Entries>
</mt:Categories>
<$mt:Var name="timingstop"$>
++++++++++++++++++++++++++++++++++++++++++
</mt:Section>
我的输出在两个块中匹配:
++++++++++++++++++++++++++++++++++++++++++
你好,曲棍球溜冰场得到绿灯
你好,法官打击集体谈判法 你好,ALRC探索市中心的酒吧 你好,法官打击集体谈判法 您好,无证学生:州内学费对1名学生来说意味着什么 你好,为了一个好的结果冻结了 你好,Dems推动沃克在医疗保健计划上 你好,学生会接受WISPIRG立法 您好,UW校园选民身份证可能带来的好处和弊端 你好,Rally激起人群重新夺回Wis 你好,主要的冬季风暴席卷了麦迪逊 您好,照片:毕业,2011级 你好,奥巴马星期一访问麦迪逊 您好,ASM准备承担最终的MCSC申诉 你好,奥巴马星期一访问麦迪逊 你好,共和党领导任命约翰逊为3个主要委员会 您好,Jamie Thomson获得全球胚胎研究奖 您好,特遣部队推荐新板坯 你好,学院权衡人力资源重新设计计划
你好,Rally激起人群重新夺回Wis 此代码块在18秒内完成 ++++++++++++++++++++++++++++++++++++++++++
你好,曲棍球溜冰场得到绿灯
你好,法官打击集体谈判法 你好,ALRC探索市中心的酒吧 你好,法官打击集体谈判法 您好,无证学生:州内学费对1名学生来说意味着什么 你好,为了一个好的结果冻结了 你好,Dems推动沃克在医疗保健计划上 你好,学生会接受WISPIRG立法 您好,UW校园选民身份证可能带来的好处和弊端 你好,Rally激起人群重新夺回Wis 你好,主要的冬季风暴席卷了麦迪逊 您好,照片:毕业,2011级 你好,奥巴马星期一访问麦迪逊 您好,ASM准备承担最终的MCSC申诉 你好,奥巴马星期一访问麦迪逊 你好,共和党领导任命约翰逊为3个主要委员会 您好,Jamie Thomson获得全球胚胎研究奖 您好,特遣部队推荐新板坯 你好,学院权衡人力资源重新设计计划
你好,Rally激起人群重新夺回Wis 此代码块在12秒内完成 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
注意,在此安装中,第二个块比第一个块快了大约三分之一。为了与你的152秒的价值进行比较,这是20个类别和15,000个条目的10倍,我需要更多地了解你有多少类别和条目。