【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,支持如下特性
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
发表于 2015年04月29日 by 愚人码头 被浏览 1,985 次
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