[Meteor]Meteor:讓實時Web App成爲主流

摘要:Meteor在2012年4月首次發佈,該消息一經發布,便迅速佔據了Haceker News頭條寶座,並且成爲Hacker News上最熱門的文章之一。本文是作者Sacha Greif使用Meteor開發的心得體會,他認爲Meteor會讓實時Web App在未來成爲主流。

Meteor是一個新鮮出爐的現代網站開發平臺,目前發佈的是開發預覽版0.5.8,代碼以GPL協議開源。大家可以去 GitHub上關注它。Meteor本質上是Node.JS應用的開發,繼承了Ruby on Rails、Node.JS、MongoDB API等框架的基礎特性,模糊了服務器端和客戶端,弱化網絡連接質量造成的影響。

如果簡單定義“現代網站”是一個實時交互、超高性能、具備非凡體驗的網站,那麼 Meteor就是一個可爲開發者以簡單高效而且充滿樂趣的方式進行現代網站開發的平臺,以往開發週期需要幾周到幾個月的項目,現在可能只需要幾個小時或者一個週末的時間就可以完成。Meteor構建的應用體驗,會讓人覺得瀏覽器的刷新按鈕和地址欄是多餘的。

Meteor在2012年4月首次發佈,該消息一經發布,便迅速佔據了Haceker News頭條寶座,並且成爲Hacker News上最熱門的文章之一。本文是作者Sacha Greif使用Meteor開發的心得體會,他認爲Meteor會讓實時Web App在未來成爲主流。 

下面是對原文的翻譯:

在過去6個月裏,我使用Meteor做了點東西(Telescope,Meteor開源的主要應用程序之一),我覺得有必要和大家分享一下我對Meteor的使用心得和感受。

 

首先聲明:在和Meteor代碼打交道的日子裏,我的大部分時間都在使Telescope變更加可用,而不是去深入挖掘Meteor,所以我不敢自稱是Meteor方面的專家,而之所以能很快上手,很大一部分原因是因爲它是一個非常好用且高效的框架,即使在你不精通的情況下也能開發出非常出色的應用。

簡單 智能

Meteor的一大特色就是可以輕鬆構建高品質的實時Web應用程序,相信很多程序員都是因爲這一特性而熟知Meteor的。當開始使用Meteor時,會讓你的生活變得很簡單。

安裝Meteor也非常簡單,只需一行命令即可。隨即便創建第一個應用程序,就連部署也都非常簡單。由於Meteor提供免費的託管,因此你可以在線部署,供世界各地的人來瀏覽。

 

此外,使用Meteor編寫的應用程序運行速度也非常快。例如,當你的項目引用JS或CSS文件時,這些文件將會被自動加載,而Meteor也提供了內置的用戶管理,自動完成UI部件的加載。

Meteor九大特性

  1. 純JavaScript
  2. 實時頁面更新
  3. 乾淨、強大的數據同步
  4.  延遲補償
  5. 代碼熱推送
  6. 敏感代碼運行於受限環境中
  7.  完全獨立的應用包
  8. 互操作
  9. 智能的包

實時的未來

說實話,實時框架是Meteor的最大賣點,實時Web應用程序會讓人聯想到多人遊戲和實時在線文檔編輯,但在使用Meteor時,我快速發現實時也可以編寫出更加實用且非常好的應用程序,而這種實時很有可能會成爲未來幾年內Web應用程序的默認編寫方式。

在桌面應用系統中,如果一個目錄被兩個窗口同時打開,那麼當你在其中一個窗口刪除一個文件後,你必須刷新另一個窗口,那個文件纔會“消失”。因此,這就缺乏了實時性,而Meteor框架就可彌補這方面的不足。

此外,實時也影響到我們的編碼風格。你無需刷新頁面或使用特定的回調邏輯來使應用程序做出響應:每一個塊數據都會自動監測、任何與UI元素有關的數據也會自動更新。

下面提供一個案例,一旦有人投票,就響應upvote按鈕的“disable”類,模板代碼(Meteor使用Handlebars):

[html] view plaincopy
  1. <div class="post">  
  2.   <a href="#" class="upvote btn {{upvotedClass}}"><a />  
  3.   <h3><a href="{{url}}">{{title}}</a></h3>  
  4. </div>  

下面是與之匹配的控制器代碼:

  1. Template.post.helpers({  
  2.   upvotedClass: function() {  
  3.     // test if user is logged in, and if their userId   
  4.     // is included in the 'upvoters' array  
  5.     var userId = Meteor.userId();  
  6.     if (userId && !_.include(this.upvoters, userId)) {  
  7.       return 'upvoteable';  
  8.     } else {  
  9.       return 'disabled'  
  10.     }  
  11.   }  
  12. });  

這段代碼妙在何處呢?如果用戶的userid從upvoters數組中刪除(例如,實現一個“cancel upvote”操作),就會自動在UI上反應出來,無需編寫額外的代碼。

一切就緒了嗎?

現在,你可能會隨着這一行行代碼思考些東西:“好,它看起來很棒,但是它真的就可以作爲現實應用( real-world apps)嗎?”

答案肯定是依情況而定。Meteor當然可以作爲現實應用使用。Telescope和Sidebar(基於Telescope)就是非常完美的例子。

但並不是說Meteor就可以完全作爲現實應用使用。Meteor沒有服務端渲染功能,有些網站對加載速度要求特別高,比如電子商務網站,而有些則需要在舊的/老的設備上運行,比如過時的手機。

Meteor Book

目前,我和 Tom Coleman(Meteor開源生態系統的主要貢獻者之一,創建Meteor包管理器Meteorite)正在專注於 The Meteor Book,教你如何使用Meteor編寫基本的應用程序。

更多精彩內容,大家可以來到Hacker News上和我一起 探討。(編譯/張紅月 責編/付江)


學習資料:

官方提供的3個示例:

GitHub項目頁:

Meteor@StackOverflow

文檔:

FAQ:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章