Meteor是一個新鮮出爐的現(xiàn)代網(wǎng)站開發(fā)平臺,目前發(fā)布的是開發(fā)預(yù)覽版0.5.8,代碼以GPL協(xié)議開源。大家可以去 GitHub上關(guān)注它。Meteor本質(zhì)上是Node.JS應(yīng)用的開發(fā),繼承了Ruby on Rails、Node.JS、MongoDB API等框架的基礎(chǔ)特性,模糊了服務(wù)器端和客戶端,弱化網(wǎng)絡(luò)連接質(zhì)量造成的影響。
如果簡單定義“現(xiàn)代網(wǎng)站”是一個實時交互、超高性能、具備非凡體驗的網(wǎng)站,那么 Meteor就是一個可為開發(fā)者以簡單高效而且充滿樂趣的方式進行現(xiàn)代網(wǎng)站開發(fā)的平臺,以往開發(fā)周期需要幾周到幾個月的項目,現(xiàn)在可能只需要幾個小時或者 一個周末的時間就可以完成。Meteor構(gòu)建的應(yīng)用體驗,會讓人覺得瀏覽器的刷新按鈕和地址欄是多余的。
Meteor在2012年4月首次發(fā)布,該消息一經(jīng)發(fā)布,便迅速占據(jù)了Haceker News頭條寶座,并且成為Hacker News上最熱門的文章之一。本文是作者Sacha Greif使用Meteor開發(fā)的心得體會,他認為Meteor會讓實時Web App在未來成為主流。
下面是對原文的翻譯:
在過去6個月里,我使用Meteor做了點東西( Telescope,Meteor開源的主要應(yīng)用程序之一),我覺得有必要分享一下我的感受。
首先聲明:在和Meteor代碼打交道的每一天里,我的大部分時間都在使Telescope變更加可用,而不是去深入挖掘Meteor,所以我不敢 自稱是Meteor方面的專家,而之所以能很快上手,很大一部分原因是因為它是一個非常好用且高效的框架,即使在你不精通的情況下也能開發(fā)出非常出色的應(yīng) 用。
簡單 智能
Meteor的一大特色就是可以輕松構(gòu)建高品質(zhì)的實時Web應(yīng)用程序,相信很多程序員都是因為這一特性而熟知Meteor的。當(dāng)開始使用Meteor時,會讓你的生活變得很簡單。
安裝Meteor也非常簡單,只需一行命令即可。隨即便創(chuàng)建第一個應(yīng)用程序,就連部署也都非常簡單,由于Meteor提供免費的托管,因此你可以在線部署,供世界各地的人來瀏覽。
此外,使用Meteor編寫的應(yīng)用程序運行速度也非常快。例如,當(dāng)你的項目引用JS或CSS文件時,這些文件將會被自動加載,而Meteor也提供了內(nèi)置的用戶管理,自動完成UI部件的加載。
Meteor九大特性
- 純JavaScript
- 實時頁面更新
- 干凈、強大的數(shù)據(jù)同步
- 延遲補償
- 代碼熱推送
- 敏感代碼運行于受限環(huán)境中
- 完全獨立的應(yīng)用包
- 互操作
- 智能的包
實時的未來
說實話,實時框架是Meteor的最大賣點,實時Web應(yīng)用程序會讓人聯(lián)想到多人游戲和實時在線文檔編輯,但在使用Meteor時,我快速發(fā)現(xiàn)實時也可以編寫出更加實用且非常好的應(yīng)用程序,而這種實時很有可能會成為未來幾年內(nèi)Web應(yīng)用程序的默認編寫方式。
在桌面應(yīng)用系統(tǒng)中,如果一個目錄被兩個窗口同時打開,那么當(dāng)你在其中一個窗口刪除一個文件后,你必須刷新另一個窗口,那個文件才會“消失”。因此,這就缺乏了實時性,而Meteor框架就可彌補這方面的不足。
此外,實時也影響到我們的編碼風(fēng)格。你無需刷新頁面或使用特定的回調(diào)邏輯來使應(yīng)用程序做出響應(yīng):每一個塊數(shù)據(jù)都會自動監(jiān)測、任何與UI元素有關(guān)的數(shù)據(jù)也會自動更新。
下面提供一個案例,一旦有人投票,就響應(yīng)upvote按鈕的“disable”類,模板代碼(Meteor使用 Handlebars):
1 2 3 4 | <div class="post">
<a href="#" class="upvote btn {{upvotedClass}}">?<a />
<h3><a href="{{url}}">{{title}}</a></h3>
</div>
|
下面是與之匹配的控制器代碼:
1 2 3 4 5 6 7 8 9 10 11 12 | Template.post.helpers({
upvotedClass: function() {
// test if user is logged in, and if their userId
// is included in the 'upvoters' array
var userId = Meteor.userId();
if (userId && !_.include(this.upvoters, userId)) {
return 'upvoteable';
} else {
return 'disabled'
}
}
});
|
這段代碼妙在何處呢?如果用戶的userid從upvoters數(shù)組中刪除(例如,實現(xiàn)一個“cancel upvote”操作),這會自動在UI上反應(yīng)出來,無需編寫額外的代碼。
一切就緒了嗎?
現(xiàn)在,你可能會隨著這一行行代碼思考些東西:“好,它看起來很棒,但是它真的就可以作為現(xiàn)實應(yīng)用( real-world apps)嗎?”
答案肯定是依情況而定。Meteor當(dāng)然可以作為現(xiàn)實應(yīng)用使用。Telescope和Sidebar(基于Telescope)就是非常完美的例子。
但并不是說Meteor就可以完全作為現(xiàn)實應(yīng)用使用。Meteor沒有服務(wù)端渲染功能,有些網(wǎng)站對加載速度要求特別高,比如電子商務(wù)網(wǎng)站,而有些則需要在舊的/老的設(shè)備上運行,比如過時的手機。
Meteor Book
目前,我和 Tom Coleman(Meteor開源生態(tài)系統(tǒng)的主要貢獻者之一,創(chuàng)建Meteor包管理器 Meteorite)正在專注于 The Meteor Book,教你如何使用Meteor編寫基本的應(yīng)用程序。
更多精彩內(nèi)容,大家可以來到Hacker News上和我一起 探討。(編譯/張紅月 責(zé)編/付江)
學(xué)習(xí)資料:
官方提供的3個示例:
GitHub項目頁:
Meteor@StackOverflow
文檔:
FAQ:
posted on 2013-03-22 09:41
小果子 閱讀(732)
評論(0) 編輯 收藏 引用 所屬分類:
學(xué)習(xí)筆記 、
框架