54

我發現很多HTML5 UI框架在那裏,如:HTML5的UI框架

我再次與這麼多的資源,在那裏有點不知所措。 看着他們中的一些,但幾乎所有人都覺得太慢和重量級。

我變得有點困惑哪一個,我會學習。 他們的每個網站都談論他們的產品,就好像他們是市場上最好的。 (明顯的營銷策略)。

由於在網絡初學者應用程式開發和客戶端JS的UI框架;你們,根據你的經驗,你推薦哪一種快速桌面網絡應用程序開發考慮速度,構件集合,複雜性,外觀,感覺,支持等?

哪一個你建議我開始學習?

我知道可能有很多答案,每個人可能喜歡不同的,但是這可以幫助引導我一點,有一些最流行的框架的一些批評。

回答

129

有一個在你的問題那麼多,這個答案並不容易,也不會是明確的。它也會很有見地。看看你帶來的框架清單,我看到了彼此難以比擬的非常不同的東西。我會嘗試以某種方式對它們進行分組,並將更多框架添加到列表中。

這裏的主要問題是沒有一個特定的框架的利弊。主要問題是:你要多少錢?你真的是指像Gmail或Grooveshark這樣的應用程序嗎?或者你的意思是像Stackoverflow - 一個動態的,並不簡單,但仍然是一個網站。讓我們考慮所有這些選項。也許,你只是想用一些小部件來增強你的網站,比如標籤,對話框,一些可拖拽/放置元素,文本編輯等等,而你不願意改變你的開發模式。我的意思是,你使用你最喜歡的Java/PHP/Ruby,不希望用JavaScript編寫很多應用程序的邏輯和行爲。在這種情況下,基於jQuery的插件式解決方案將爲您做到,特別是,jQuery UIjQuery Mobile

jQuery小部件遵循其插件系統。這通常意味着它們非常易於使用。爲了創建一個按鈕,你寫的:

$('#myButton').button(); 

現在,如果你想禁用它,你調用一個方法採用以下模式:

$('#myButton').button('disable'); 

和獲取或設置值,例如在滑動條或日期選擇器上,如下所示:

$('#mySlider').slider('value'); 
$('#mySlider').slider('value', 42); 

如您所見,基於jQuery的解決方案沒有模型。所有的數據都保存在DOM中,並通過古怪的方法調用獲得。如果您需要動態處理您的數據,例如做一些複雜的驗證,在後臺加載一些東西,過濾或排序,然後你會發現這很快就會變得混亂。順便說一下,這就是爲什麼jQuery UI團隊尚未提供網格控制的問題 - 他們無法在沒有模型的情況下執行此操作。在jQuery Mobile中,您通過簡單的標記獲得了一個不錯的移動UI,但是沒有官方的方式在頁面之間傳遞數據。總結:如果你有一個多頁的網站,如果你發佈你的表單,然後使用jQuery UI或更輕的解決方案,如Twitter Bootstrap

也許,您想要構建更復雜,更像應用程序的東西(單頁應用程序?)。你知道你需要在客戶端使用數據。你有什麼選擇呢?

您可以使用您提供的模型,數據綁定和創建Web應用程序的可能等手段很多JavaScript框架之一,並與他們爲什麼不jQuery UI的整合。或者您可以使用更完整的框架,如KendoWijmojqWidgets。這些框架依賴於jQuery(Wijmo依賴於jQuery UI)並提供額外的數據操作手段。他們有一個數據模型。 Kendo實現了自己的解決方案(我認爲),而Wijmo和jqWidgets與流行的Knockout JS集成。

So Kendo和Wijmo屬於同時提供小部件/控件和一些支持模型的框架組。還有其他類似的框架,它們不是基於jQuery的,例如Dojo Toolkit。添加一些動態數據加載,你會得到一個有點複雜的Web應用程序。你還能想要什麼?

實際上,最重要的是被遺忘 - 你如何構建(組織)你的應用程序?如果您嘗試構建一個以RESTful方式與服務器通信的單頁應用程序,那麼如果您的應用程序沒有架構,您很快就會陷入混亂。這通常需要的功能是一些有關分離(MVC,MVVM),模板,路由和模塊管理。這是出現SproutCoreSencha的地方。它們爲構建Web應用程序提供了一個全面的解決方案,其中小部件只是一小部分。

它可能看起來像了SproutCore和煎茶是贏家在這裏,因爲他們是最完整的解決方案,包括UI和業務邏輯,並構建應用程序。儘管所有的利弊,有一些缺點。有人說他們太重量級了,或者需要堅持他們的發展模式,你可能不喜歡。例如,在Sencha中,你用JavaScript描述你的GUI並使用Sencha的類型系統。這增加了一種沉重的感覺,那就是抽象和包裝,而你非常喜歡HTML,CSS和vanilla JavaScript的易用性。

但這不是唯一的方法。 Web的強大之處在於,有許多框架,庫,工具,smaller以及更大的工具,這將幫助您按照自己的喜好製作應用程序。例如,請考慮AngularJS。它本身不提供一套控制,但與Twitter Bootstrap結合成爲RIA的完整解決方案。或者,例如,查看EmberJS,這是來自創建重量級SproutCore的人的更輕量級框架。它也不會爲您提供一組小部件,但在我看來,它是應用程序的非常好的基礎。

所以這裏是我最後的想法而不是結論。所有這些框架通常會向您顯示它們的小部件集合,很好看主題和其他視覺材料。但真正重要的是如何實際開發你的應用程序,你將如何構建它,在哪裏實現你的邏輯。瞭解該框架提供了什麼,並思考是否可以替代缺失的內容。

+3

儘管缺少我的問題的精度,這是一個很好的答案,它花光了我大部分的「霧都」。事實上,有很多JS庫,框架,進入這個世界的人可能會像我一樣有點混亂。關於架構,我正在用nodejs開發並遵循express.js Web框架。我期待着開發一個頁面的互動應用程序,我會討厭你提到的人:)感謝很多 – jviotti

+1

很好的答案:) –

4

Infeligo的答案是一流的。我的經驗可能會引起一些人的興趣。我使用Ruby on Rails作爲我的大部分業務邏輯所在的服務器平臺。

在前端我使用dHTMLX這是一個JS對象的庫,其中最強大的是他們的網格對象。我的大部分應用程序都有商業/會計信息處理/顯示要求,網格對象是我的主要支柱。然而,它們的對象集是全面的,包括在單個應用程序內創建額外'窗口'以向最終用戶提供MDI類型接口的能力。我通常有一個登錄表單,當成功應用時,會打開一個頂部帶有菜單的單個HTML頁面。根據菜單中的選擇,打開和關閉新窗口以顯示/操作信息。這些窗口在單個HTML頁面的範圍內。

所有的對象都有很好的事件關聯,我在前端使用這些事件做了很多驗證。不過,我通常也會在Rails模型中重複所有的數據驗證。這是額外的工作,但我只是特別謹慎。還有許多抽象對象有助於在前端可視對象之間連接數據,例如網格和後端服務器。大多數數據連接可以使用XML或JSON完成。我僅使用JSON使用XML,是因爲我對該結構的經驗以及Rails提供了體面的XML生成器的事實。所以在我的情況下,我很少使用任何基於Rails的視圖,因爲我所有的可視對象都來自dHTMLX。

我喜歡dHTMLX的另一件事是他們的對象的速度。例如,網格對象很容易以非常可接受的速度處理10,000多行。

該套件的BIG DOWNSIDE是它的文檔。該公司是東歐開發商,因此通常很難理解他們的文檔意味着什麼。而且他們的文檔往往不會完整記錄所有內容,所以在試錯類型學習中浪費了大量時間。

希望這有助於

+3

(免責聲明:我在DHTMLX工作)。感謝您提及DHTMLX庫。我們正在不斷改進文檔,並嘗試使其更具可讀性。如果您在文檔中找不到任何內容,您可以隨時在論壇(http://forum.dhtmlx.com/)上尋求幫助,該論壇由dhtmlx的技術團隊監督。 – Paul