http://goexpresstravel.com/css
今天 Express 的做者 TJ Holowaychuk 發了一篇文章,正式宣告和 Node.js 拜拜了,轉向 Go 語言。html
Go verses Node
若是你在作分佈式工做,你會發現 Go 語言豐富的併發原語很是有幫助。雖然咱們用 Node 的 generator 也能夠作相似的事,但在我看來,generator 永遠只能作一半。沒有獨立的棧錯誤處理和報告,充其量是中等。我也不想再等(Node)社區花3 年去整理(改善),尤爲是咱們已經有了可用並不錯的解決方案。node
在我看來,Go 語言的錯誤處理很是出色。必須考慮每一個錯誤,決定該怎麼作,Node 在這方面挺好的。不過 Node 在下面這些方面,就……python
-
you may get duplicate callbacksreact
-
ou may not get a callback at allgit
-
you may get out-of-bound errorsgithub
-
emitters may get multiple 「error」 eventsweb
-
missing 「error」 events sends everything to hell算法
-
often unsure what requires 「error」 handlersexpress
-
「error」 handlers are very verbose
-
callbacks suck
固然了,做者也說了,NodeJS 也挺好,但他在目前項目中是沒興趣再用了。他轉向 Go 語言,也並不意味着 Go 就天衣無縫。
另外,由於放棄 NodeJS,做者在找人維護。
beego是一個用Go開發的應用框架,思路來自於tornado,路由設計來源於sinatra,支持以下特性
-
MVC
-
REST
-
智能路由
-
日誌調試
-
配置管理
-
模板自動渲染
-
layout設計
-
中間件插入邏輯
-
方便的JSON/XML服務
官網 http://beego.me
快速入門代碼以下所示:
package main
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (this *MainController) Get() {
this.Ctx.WriteString("hello world")
}
func main() {
beego.Router("/", &MainController{})
beego.Run()
}
補腦:
Tornado 是 FriendFeed 使用的可擴展的非阻塞式 web 服務器及其相關工具的開源版本。這個 Web 框架看起來有些像web.py 或者 Google 的 webapp,不過爲了能有效利用非阻塞式服務器環境,這個 Web 框架還包含了一些相關的有用工具 和優化。
Tornado 和如今的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,並且速度至關快。得利於其 非阻塞的方式和對 epoll 的運用,Tornado 每秒能夠處理數以千計的鏈接,這意味着對於實時 Web 服務來講,Tornado 是一個理想的 Web 框架。咱們開發這個 Web 服務器的主要目的就是爲了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用裏每個活動用戶都會保持着一個服務器鏈接。(關於如何擴容 服務器,以處理數以千計的客戶端的鏈接的問題,請參閱 C10K problem。)
請參見 Tornado 文檔 或 Tornado 原文文檔(鏡像)以詳細瞭解該 Web 框架。
Flux 是一個Facebook開發的、利用單向數據流實現的應用架構,用於 React。Flux應用有三個主要的部分組成:調度程序、存儲和視圖(React 組件)。
Facebook工程經理Tom Occhino說,因爲他們「很是巨大」的代碼庫和龐大的組織,於是須要「以某種方式使代碼結構化,使其更加可預測」。這已經經過 Flux 和 React 完成。Flux是一個系統架構,用於推動應用中的數據單向流動。React是一個JavaScript框架,用於構建「可預期的」和「聲明式的」Web用戶界面,它已經使Facebook更快地開發Web應用。
Flux 應用示例:
Flux 一個數據流週期:
Views ---> (actions) ----> Dispatcher ---> (registered callback) ---> Stores -------+
Ʌ |
| V
+-- (Controller-Views "change" event handlers) ---- (Stores emit "change" events) --+
Flux 相關文檔:
還有reflux
JSX語法,像是在Javascript代碼裏直接寫XML的語法,實質上這只是一個語法糖,每個XML標籤都會被JSX轉換工具轉換成純Javascript代碼,React 官方推薦使用JSX, 固然你想直接使用純Javascript代碼寫也是能夠的,只是使用JSX,組件的結構和組件之間的關係看上去更加清晰。
看代碼:
- //使用JSX
- React.render(
- <div>
- <div>
- <div>content</div>
- </div>
- </div>,
- document.getElementById('example')
- );
-
- //不使用JSX
- React.render(
- React.createElement('div', null,
- React.createElement('div', null,
- React.createElement('div', null, 'content')
- )
- ),
- document.getElementById('example')
- );
那麼也就是說,咱們寫一個XML標籤,實質上就是在調用React.createElement
這個方法,並返回一個ReactElement
對象。
查看API:http://www.css88.com/react/docs/top-level-api.html#react.createelement
- ReactElement createElement(
- string/ReactClass type,
- [object props],
- [children ...]
- )
這個方法的第一個參數能夠是一個字符串,表示是一個HTML標準內的元素,或者是一個ReactClass類型的對象,表示咱們以前封裝好的自定義組件。第二個參數是一個對象,或者說是字典也能夠,它保存了這個元素的全部固有屬性(即傳入後基本不會改變的值)。從第三個參數開始,以後的參數都被認做是元素的子元素。
轉化
React JSX將相似XML的語法轉化到原生的JavaScript,元素的標籤、屬性和子元素都會被看成參數傳給React.createElement
方法: Continue reading →
---Koa -- 基於 Node.js 平臺的下一代 web 開發框架
koa 是由 Express 原班人馬打造的,致力於成爲一個更小、更富有表現力、更健壯的 Web 框架。使用 koa 編寫 web 應用,經過組合不一樣的 generator,能夠免除重複繁瑣的回調函數嵌套,並極大地提高錯誤處理的效率。koa 不在內核方法中綁定任何中間件,它僅僅提供了一個輕量優雅的函數庫,使得編寫 Web 應用變得駕輕就熟。
JPEG (Joint Photographic Experts GROUP)是由國際標準組織(ISO:International Standardization Organization)和國際電話電報諮詢委員會(CCITT:Consultation Commitee of the International Telephone and Telegraph)爲靜態圖像所創建的第一個國際數字圖像壓縮標準,也是至今一直在使用的、應用最廣的圖像壓縮標準。JPEG因爲能夠提供有損壓縮,所以壓縮比能夠達到其餘傳統壓縮算法沒法比擬的程度。
opc