這實際上是一個非常有趣的問題,因爲它暴露了一些有趣的設計決策。
我更喜歡渲染部分模板,因爲它使我的應用程序能夠隨時間變化。如果我需要使用圖表從<table>
更改爲<div>
,可以很容易地將其封裝在模板中。考慮到這一點,我幾乎將每個頁面視爲許多小模板的集合,這些小模板可能會發生變化。 Grails 2.0的默認腳手架已經轉向這種類型的方法,這是一個好主意。
問題是它們應該是客戶端模板還是服務器端是問題的關鍵。
服務器端模板使初始頁面加載時標記更清晰。即使你使用類似的ICanHazJS,你也有點兒需要在頁面中有一個空的元素(與你的模板有關),適當地設計它,然後在Javascript中使用它來更新你的信息。
缺點
通過線路
- 「健談的」 應用
- 較大信封(應答包括HTML,其可被認爲是靜態的)
- 較慢UI響應時間
優點
- 好fo r有很多服務器端語言體驗的人
- 也許更容易在服務器端環境中進行操作或修改(例如,返回嵌有多個模板,這是程序加載幷包含一個網頁)
- 保留了大部分應用的東西「在一個地方」
客戶端模板可以真正降低服務器負載,但是。他們使應用程序「less-chatty」,因爲你可以通過發送更大的JSON集合(以相同的字節數或更少的數量,將被HTML佔用一個服務器端模板方案)。他們還爲用戶提供真正快速的UI體驗,因爲點擊「更新」鏈接無需進行AJAX往返。有人說:
安東尼·艾登@aeden 12月10日回覆轉推收藏·打開 Web應用的未來:請求由函數處理,邏輯始終是異步的,HTML是從來沒有在服務器上生成。
缺點
- 沒有偉大的搜索引擎優化(在初始頁面加載未語義無關的UI元素)
- 需要一些JavaScript富(操縱元素)
優勢 - 響應 - 較小的信封
趨勢s似乎正在轉向客戶端模板,尤其是隨着HTML5新增功能(如<canvas>
)所暴露的威力......但如果利用它們,則需要您依賴您不太熟悉的技術,並且您對Grails感到更加舒適部分,可能值得從這些開始,然後根據性能和其他問題調查對客戶端模板的重構。
我想你已經在用戶與頁面的第一次聯繫時呈現類似的內容,就像你打算使用「加載更多鏈接」一樣。在以相同的方式點擊「加載更多」之後加載正在加載的內容並重新使用已經爲此編寫的代碼是否沒有意義?你的問題很有趣,我想看看你的想法和其他人的想法是什麼 – jcage 2011-12-17 18:53:47
是的,在第一次互動時,我重新使用相同的模板(點2)來渲染整個頁面(與其他頁面的靜態部分)。這兩個選項都適用於我,我已經將它們用於分散的事情。我也很想看到其他人的想法。 – omarello 2011-12-17 19:15:27