2010-11-19 54 views
13

我正在構建一個Django Web應用程序,它有很多由ajax請求動態生成的html。現在,我使用Django的模板語言來構建html,然後將這個新的HTML作爲JSON對象中的字符串傳遞,然後使用jQuery將其注入到頁面中。用Javascript或Django進行模板化?

這工作得很好,但現代瀏覽器中的Javascript速度如此之快,以及如此之多的JavaScript模板庫,我想知道如果我應該推送一切客戶端。

所以我的問題是:鑑於我的平均「頁」與所有的請求和它必須編譯約300模板(每個大約15左右線5代左右替換)在瀏覽器中進行模板生命有沒有顯着的性能優勢?

此外,任何人都可以推薦'快速'Javascript模板庫嗎?我聽說過關於underscore.js,mustache.js和jQuery模板的好消息。

+0

封閉模板速度很快,因爲它們可以通過谷歌編譯器編譯 – Evgeny 2010-11-20 02:49:28

+0

我也有這個問題,但由於涉及的數據量(這是一個圖像庫有很多條目),發回HTML是不合理的。我用客戶端和服務器端鬍子解決了它 - 我喜歡小鬍子。 – 2010-11-20 03:24:24

回答

4

堅持使用Django模板的(巨大的)優勢是您只需要使用一種模板語言,即使您希望生成的頁面都保留相同的功能。如果你發現你有性能問題,那麼你應該考慮調查caching template fragments

+0

s/Django/Jinja2/g使它更加龐大;) – Evgeny 2010-11-20 02:30:39

+0

當然,如果你小心引用,沒有什麼說你的Django模板不能生成JSON ...嵌入HTML ... – 2010-11-20 07:29:30

0

爲什麼您將HTML作爲JSON傳遞?只需發回HTML,並使用jQuery的$.html()函數將其放入<div>或其他任何地方。

至於Javascript中的模板,有Pure。如果你使用jQuery(我推薦它),it already has a template engine

+0

My響應對象包含其他信息(關於在dom和uids中附加元素的位置),我使用$ .html函數,但我只是通過它包含新html的JSON字典的密鑰。 – 2010-11-19 22:45:29

0

可以製作雙重用途的模板 - 以便它們可以呈現爲js替換的佔位符,同時它們可以爲服務器輸出正常渲染。只有少數模板需要具有這樣的雙重用途 - 即將被js替換的片段。

我同意Ignacio,最好只保留每個模板的一個副本,這樣就不必爲JavaScript編寫單獨的副本,但是從方法上我確實有改進的空間上面已經提到過了。

理想情況下,您可能希望將模板編譯爲健壯的javascript函數代碼以及服務器輸出的純字符串。

Closure templates調用Soy,很好地解決了這個問題,但是沒有(可能只是)與python一起工作,但是他們可以使用Java和Javascript。希望有一天會有python支持。

但即使發生這種情況,模板語言可能會受到更多限制,因爲在Python和JavaScript中都會自動生成像.get_absolute_url(),過濾器等工作的東西。

3

我不認爲混合客戶端和服務器模板架構不好。只要你在一個環境中編碼一個模板。

每次生成頁面服務器端時,會消耗大量的處理時間和一些網絡帶寬。如果您使用託管服務器,這就是您付出的代價。
雖然用戶的瀏覽器正等待空閒計算機上的空閒響應。

如果您在客戶端(HTML + JS)上發送模板,那麼可以緩存它們,對於會話甚至幾天,如果用戶不刪除它們。
這會減少網絡流量以不同時間傳遞相同的內容。由於數據通常比其等效呈現的HTML小。

正如你所指出的今天的JavaScript引擎真的很快,以及他們運行它的計算機。每次將渲染工作發送到客戶端時,都可以節省服務器的一些處理時間並提供更快的數據。

我們處於另一個極端,因爲我們在客戶端運行所有內容,這就是爲什麼我們創建了PURE來實現超快客戶端渲染的原因。由於這種分權,我們的應用看起來非常快。

+0

感謝您的建議,我會檢查PURE。 – 2011-03-14 17:14:31