2010-11-21 106 views
5

我最近開始製作網絡應用程序,雖然我做了一些有用的東西,但我不確定最佳做法。使用模板構建HTML與在javascript中構建它?

到目前爲止,我主要使用Django,web.py和PHP的模板系統。但是現在我正在使用jQuery和好的ajaxy魔術來從服務器獲取數據而無需刷新客戶端,我看到了直接在javascript中構建HTML的優勢(所以我可以發送一個小的json對象給客戶端,讓他弄清楚如何改變以及如何改變)。

所以,現在我有一些模板呈現的位,有些是用javascript構建的,甚至有一個可怕的情況,這兩個組合都是一個web.py模板,它生成一個創建HTML的javascript函數表 - 感覺像C宏一遍! (我會最終重構它)

這是Web開發中的常見問題嗎?任何推薦的最佳實踐,例如「在所有內容中使用json,儘可能在javascript中渲染」,「使用庫foo」等。有什麼好的啓發式處理模板,以及用javascript處理什麼?

在這裏尋找一點,我發現有人asking about javascript templates,這似乎是一個可能的解決方案。

回答

4

請不要使用Javascript來佈置您的頁面。只在需要的地方使用它。儘管最近有了增強和標準化,但Javascript仍然通常很慢,難以完全兼容(認爲舊的IE和其他),並且與某些屏幕閱讀器和搜索引擎不兼容。

如果您可以通過直接返回HTML來實現,那麼這通常是您想要的方式。

+0

更不用說,隱藏在客戶端腳本背後的任何內容對於搜索引擎都是不可見的。 – bobince 2010-11-21 20:25:54

+0

@bobince,這就是我的意思是刮刀。我澄清了這個帖子。 – Brad 2010-11-21 20:29:50

+0

JavaScript是我目前的用途所需要的 - 我正在用相當動態的頁面製作應用程序,無論如何都需要相當數量的客戶端JavaScript(用於突出顯示,選擇,更新而不重新渲染整個頁面等)。這並不是我想要搜索引擎找到的內容。 – Emile 2010-11-30 16:56:02

1

永遠不要將您的網站的功能基於JavaScript。如果你這樣做,你將失去所有訪客與JavaScript關閉。如果你真的想要,你需要檢測javascript關閉的用戶,並重定向他們;或者提供<noscript>替代品。此外,雖然抓取工具現在可以解析javascript,但仍然對網站的搜索引擎優化造成嚴重損害。還有兼容性和開銷問題,這可能是今天的移動設備,上網本等問題。

+2

我真的不認爲使用javascript關閉所有訪問者的情況已經消失,特別是如果您的目標人口因素影響決策。網站變得越來越動態,而且JavaScript越來越重要,所以如果你把它關掉了,你就會失去很多網絡體驗。 – micmcg 2010-11-22 03:16:29

+0

正如我對布拉德說的那樣,我*我*基於JavaScript的功能基於JavaScript,無論如何,我主要想知道一個乾淨的方法來做到這一點(乾淨的,像可理解的,可修改的,可重用的代碼,我不介意如果它在移動平臺上無法使用的話)。 – Emile 2010-11-30 16:58:55

1

我在一段時間後陷入了同樣的困境。我有一個網頁,使用web.py模板呈現的東西,它有一個AJAX分頁。所以它必須使用JavaScript呈現下一頁。我最終擴展了web.py模板引擎以生成一個javascript函數來呈現相同的模板輸出。

參見這篇博客瞭解更多詳情:

http://anandology.com/blog/javascript-templating-with-webpy/

2

有輕微相關question這裏。

您可能可以使用相同的模板 - this library看起來相互間。

您可以僅在服務器上呈現模板...頂部有the question有效的方法。

如果需要,您可以在JavaScript中複製特定模板 - 嘗試jqtemplate

就我個人而言,我可能只在服務器端渲染HTML,以避免模板重複。如果我的服務器充當更多的JSON Web服務,可能還會服務於其他客戶端,我會做JS模板。

這就是說,如果你的網站被訪問和非JS友好對你很重要(它應該是),那麼寫你的網站完全沒有JS,然後progressively enhance它。

+0

你在說什麼讓我覺得可能我的服務器*是*更多的JSON Web服務,或者至少有一部分是。這不是我習以爲常的區別(正如我所說,我是網絡應用程序的新手),所以謝謝澄清:) – Emile 2010-12-02 10:46:10

1

AngularJS是一個客戶端模板的流行解決方案,我在問這個問題後多年發現。您可以像在Django中一樣編寫HTML模板(「partials」),然後根據需要使用JavaScript獲取並解釋它們 - 這樣您就可以充分利用兩者的優勢,一個動態網站,它具有清晰的代碼和佈局分離。