2016-03-05 60 views
-1

我使用dustjs來渲染我的郵件內容,並且發現渲染一些更大的模板時速度很慢。有什麼提示的時候寫dustjs模板來提高渲染速度還是一些很好的做法?這是一些技巧,寫更快的渲染dustjs模板? node.js

細節: 我的模板由幾個部分組成(超過5),如果跟別人不一樣的每個組件,還有組件如下的一個例子:

<tr> 
    <td align="center" valign="top" bgcolor="#FFFFFF"> 
    <table cellpadding="0" cellspacing="0" width="650"> 
     <tr> 
     <td align="center"> 
      <table width="590" border="0" cellspacing="0" cellpadding="0"> 
      {@eq key=haveBanner value=1} 
      <tr> 
       <td height="105" align="center" valign="middle"> 
       <a href="{edm_monitor_server}/api/clickRecord?{.|sellerPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank"><img src="{bannerUrl|pictureUrl}" width="590" border="0"></a> 
       </td> 
      </tr> 
      {:else} 
      <tr> 
       <td align="center"> 
       <table cellpadding="0" cellspacing="0" width="590" height="75" style="border-top:solid 3px #343434"> 
        <tr> 
        <td width="130" align="left" valign="middle"> 
         <table border="0" cellspacing="0" cellpadding="0"> 
         <tr> 
          <td align="left" height="55"> 
          <a href="{edm_monitor_server}/api/clickRecord?{.|sellerPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank"><img src="{sellerLogo|pictureUrl}" width="110" height="55"></a> 
          </td> 
         </tr> 
         </table> 
        </td> 
        <td width="460" align="left"> 
         <table border="0" cellspacing="0" cellpadding="0"> 
         <tr> 
          <td align="left"><a href="{edm_monitor_server}/api/clickRecord?{.|sellerPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank" style="text-decoration:none"><font style="font-family:arial;font-size:16px;color:#292929">{compName}</strong></a></td> 
         </tr> 
         </table> 
        </td> 
        </tr> 

       </table> 
       </td> 
      </tr> 
      {/eq} 

      <tr> 
       <td> 
       <table border="0" cellpadding="0" cellspacing="0" style="border:solid 1px #dbdbdb" width="594"> 
        <tr> 
        <td width="149" valign="top" style="border-right:solid 1px #dbdbdb"> 
         <table width="146" cellspacing="0" cellpadding="0"> 
         <tr> 
          {@eq key=selectedProductFlag value=1} 
          <td height="80" style="padding:20px 20px"><a href="{edm_monitor_server}/api/clickRecord?{.|sellerPromoteProdListPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank" style="text-decoration:none"><font style="font-family:arial;font-size:18px;color:#333333"><b>Promotion Products</b></font></a></td> 
          {:else} 
          <td height="80" style="padding:20px 20px"><a href="{edm_monitor_server}/api/clickRecord?{.|sellerProdListPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank" style="text-decoration:none"><font style="font-family:arial;font-size:18px;color:#333333"><b>Promotion Products</b></font></a></td> 
          {/eq} 
         </tr> 

         <tr> 
          <td align="center" height="26" valign="top"> 
          <table width="119" border="0" cellspacing="0" cellpadding="0"> 
           <tr> 
           <td style="border-top:solid 1px #e5e5e5"><img src="http://newimg.globalmarket.com/PA/edm/images/spacer.gif" height="1" width="1"></td> 
           </tr> 
          </table> 
          </td> 
         </tr> 

         {#finalProdGroupList} 
         <tr> 
          <td height="35" valign="top"> 
          <table width="146" cellspacing="0" cellpadding="0"> 
           <tr> 
           <td style="padding-left:25px"><a href="{edm_monitor_server}/api/clickRecord?{.|sellerGroupProdListPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank" style="text-decoration:none"><font style="font-family:arial;font-size:12px;color:#484848">{prodGroupName}</font></a></td> 
           </tr> 
          </table> 
          </td> 
         </tr> 
         {/finalProdGroupList} 
         </table> 
        </td> 

        <td width="443" valign="top"> 
         <table width="442" border="0" cellspacing="0" cellpadding="0"> 
         <tr> 
          <td> 
          <table width="442" border="0" cellspacing="0" cellpadding="0" height="255"> 
           <tr> 
           {#secondaryProducts} 
           {#productList spIdx=$idx} 
           {@eq key=$idx value=2} 
           <td align="center" valign="top" width="147"> 
           {:else} 
           <td align="center" valign="top" style="border-right:solid 1px #dbdbdb" width="147"> 
           {/eq} 
            <table border="0" cellspacing="0" cellpadding="0"> 
            <tr> 
             <td height="146" align="center"> 
             <a href="{edm_monitor_server}/api/clickRecord?{.|sellerProductPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank"><img src="{photoUrl|pictureUrl}" border="0" width="126" height="126" alt="{fullProdName}"></a> 
             </td> 
            </tr> 
            <tr> 
             <td align="center"> 
             <table width="126" border="0" cellspacing="0" cellpadding="0"> 
              <tr> 
              <td align="center"> 
               <table cellpadding="0" cellspacing="0" width="126"> 
               <tr> 
                <td align="left" height="33" valign="top" style="line-height:15px"> 
                <a href="{edm_monitor_server}/api/clickRecord?{.|sellerProductPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final}" target="_blank" style="text-decoration:none"><font style="font-family:Arial;font-size:12px;color:#333333">{productName}</font></a> 
                </td> 
               </tr> 
               <tr> 
                <td align="left" height="20" valign="middle"><font style="font-family:Arial;font-size:12px;color:#999999">{certification}</font></td> 
               </tr> 
               <tr> 
                {@eq key=payForInqFlag value=1} 
                <td align="left" height="35" valign="middle"><a href="{edm_monitor_server}/api/clickRecord?{.|addInquiryPage}&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|taskId|edmpid|recId|userId|token|final}" title="Get Latest Price" style="color: #555555; text-decoration: none;" target="_blank"><img src="http://newimg.globalmarket.com/PA/edm/images/getprice2.png" width="128" height="25"></a></td> 
                {:else} 
                <td align="left" height="35" valign="middle"><a href="{edm_monitor_server}/api/clickRecord?{.|m2bProductPage}&type=getPrice&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|taskId|edmpid|recId|userId|token|final}" title="Get Latest Price" style="color: #555555; text-decoration: none;" target="_blank"><img src="http://newimg.globalmarket.com/PA/edm/images/getprice2.png" width="128" height="25"></a></td> 
                {/eq} 
               </tr> 

               <tr> 
                <td height="7"></td> 
               </tr> 
               </table> 
              </td> 
              </tr> 
             </table> 
             </td> 
            </tr> 
            </table> 
           </td> 
           {/productList} 
           {/secondaryProducts} 
           </tr> 
          </table> 
          </td> 
         </tr> 
         </table> 
        </td> 
        </tr> 
       </table> 
       </td> 
      </tr> 
      </table> 
     </td> 
     </tr> 
    </table> 
    </td> 
</tr> 
+1

這個問題不適合Stack Overflow的格式。你能分享一個緩慢的特定模板嗎? – Interrobang

回答

0

你的問題很可能大您正在使用的灰塵過濾器數量。

實施例:

&{trackCodeData|gaTrackCode|dbTrackCode|entityId|entityType|edmpid|recId|userId|token|final} 

一些這些濾波器的甚至被在一個循環中運行。您看起來每個渲染模板的運行狀況都超過100個。濾鏡同步並連續執行,所以塵埃無法繼續渲染模板直到濾鏡完成。

不知道這些過濾器是幹什麼的,很難對過濾器本身提出具體的建議。但是,您似乎多次使用相同的濾鏡來輸出相同的數據。如果可能,您應該預生成這些數據並將其添加到上下文中,而不是動態生成它。

您可以通過打開空白壓縮獲得了幾個週期,如果您有它關閉:

dust.config.whitespace = false; 

不過是塵土本質是非常快的。沒有你的過濾器,你的模板在3毫秒左右呈現給我。

+0

我嘗試沒有過濾器的測試模板,它花費了同一時間,也許它不是渲染問題,我會再次檢查它,非常感謝 – simonchan

+0

你好,如果你渲染一個模板,它包含十個模板,是否減速? – simonchan