【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品

http://goexpresstravel.com/

今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言。

Go verses Node

如果你在做分布式工作,你会发现 Go 语言丰富的并发原语非常有帮助。虽然我们用 Node 的 generator 也可以做类似的事,但在我看来,generator 永远只能做一半。没有独立的栈错误处理和报告,充其量是中等。我也不想再等(Node)社区花3 年去整理(改善),尤其是我们已经有了可用并不错的解决方案。

在我看来,Go 语言的错误处理非常出色。必须考虑每个错误,决定该怎么做,Node 在这方面挺好的。不过 Node 在下面这些方面,就……

  • you may get duplicate callbacks

  • ou may not get a callback at all

  • you may get out-of-bound errors

  • emitters may get multiple “error” events

  • missing “error” events sends everything to hell

  • often unsure what requires “error” handlers

  • “error” handlers are very verbose

  • callbacks suck

当然了,作者也说了,NodeJS 也挺好,但他在目前项目中是没兴趣再用了。他转向 Go 语言,也并不意味着 Go 就完美无缺。

另外,因为放弃 NodeJS,作者在找人维护。

beego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra,支持如下特性

  1. MVC

  2. REST

  3. 智能路由

  4. 日志调试

  5. 配置管理

  6. 模板自动渲染

  7. layout设计

  8. 中间件插入逻辑

  9. 方便的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()
}

补脑:

TornadoFriendFeed 使用的可扩展的非阻塞式 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说,由于他们“非常巨大”的代码库和庞大的组织,因而需要“以某种方式使代码结构化,使其更加可预测”。这已经通过 FluxReact 完成。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

发表于 2015年04月29日 by 愚人码头 被浏览 1,985 次

JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想直接使用纯Javascript代码写也是可以的,只是使用JSX,组件的结构和组件之间的关系看上去更加清晰。

看代码:

  1. //使用JSX
  2. React.render(
  3. <div>
  4. <div>
  5. <div>content</div>
  6. </div>
  7. </div>,
  8. document.getElementById('example')
  9. );
  10. //不使用JSX
  11. React.render(
  12. React.createElement('div', null,
  13. React.createElement('div', null,
  14. React.createElement('div', null, 'content')
  15. )
  16. ),
  17. document.getElementById('example')
  18. );

那么也就是说,我们写一个XML标签,实质上就是在调用React.createElement这个方法,并返回一个ReactElement对象。

查看API:http://www.css88.com/react/docs/top-level-api.html#react.createelement

  1. ReactElement createElement(
  2. string/ReactClass type,
  3. [object props],
  4. [children ...]
  5. )

这个方法的第一个参数可以是一个字符串,表示是一个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