2011-02-04 85 views
4

我在Python中使用Google App Engine版本的Django模板。速度比較:服務器生成的HTML vs模板?

在將模板放入python頁面處理程序和將模塊放入python頁面處理程序之間有一個主要的性能差異嗎?

例如,我比較是這樣的:

{% for i in items %} 
    <div id="item_{{i.key}}">  
     {{i.text}} 
    </div> 
{% endfor %} 

Vs的像這樣我的Python代碼裏:

def returnHtml(items): 
    item_array = [] 
    for i in items: 
    item_array.append("<div id='item_%s'>%s</div>" % (i.id, i.text) 
    return "".join(item_array) 

...然後把它直接插入到Django模板在標籤如:

{{ item_html }} 

這是一個微不足道的例子,現實,我有更多的比較循環內部的lex循環等。我喜歡將邏輯放在Python代碼中,因爲它更容易維護。但我擔心對績效的影響。

有什麼想法?謝謝。

回答

5

可讀性損失並且代碼的可維護性可能會超過您將獲得的性能收益。你可以找到Python模板引擎的manybenchmarks。所有流行的模板引擎的性能都可以接受。

如果您不喜歡django模板中的缺點,請使用更好的東西。我個人使用(並強烈推薦)Mako,我知道其他幾個人喜歡Jinja2

0

我不這麼認爲。

我唯一能看到的是真正的區別在於,如果一種方法可以將結果流式傳輸到瀏覽器,而不是先在內存中構建完整頁面。這可能會對巨大的頁面產生影響。我對Django不熟悉,不知道模板引擎是否會傳輸部分結果。

+0

甜。謝謝,這是令人鼓舞的。 – Cuga 2011-02-04 05:30:29

+2

您無法在App Engine上傳輸數據。直到處理程序返回後纔會發送響應。 – 2011-02-04 06:59:11

+0

@羅伯特:好點。 – Thilo 2011-02-04 07:08:33

2

如果你對它進行基準測試,我相信你會發現一些差異,但我會說它根本不重要。每個用戶的加載時間差異可能比眨眼少。我不認爲有人會注意到。

另一方面,在部署它之前,沒有什麼能阻止你編譯模板,它應該給你提供與運行時代碼循環相同的性能。

基本上做什麼使得在這種情況下,你的生活更輕鬆......在GAE上的時間將被更好地用於建模數據良好,數量削減到旅行到數據存儲等

+0

謝謝。我會最終基準。現在,我試圖從正確的道路開始。我並不擔心頁面加載速度,因爲我是關於cpu週期等。 – Cuga 2011-02-04 05:30:02

1

請考慮看看基準報告here