本次 Ruby Tuesday 不是在周二,是在周四,请各位注意
大家可以从文二路的入口进入,如果不熟悉,可以找一个阿里系的同学带路,也可以和我联系(13685751275
)
Ruby 社区向来热心接纳各种新技术,之前我们也曾经沟通过一些 Node.js 的知识,但是朴灵所在的团队在过去很长时间里一直在用 Node.js,我们这次专门请他来做一些分享,和这个领域的高手交流交流
考虑到一些了解较少的同学,现场可能会介绍一些基本情况,如果你能预先做些 homework,相信会得到更多
别扯了,Node.js 就是坑爹货。异步逻辑本来就很恶心,Node.js 又不是第一个异步框架,而且比之前的异步框架都更难用。就异步框架里面,你说 Emacs,Tcl,Perl/POE,Python/Twisted,Ruby/EventMachine,渣渣的 Node.js 比得过哪个?
我觉得在这里你也找不出几个比我更早折腾 Node.js 的了,我开始折腾 Node.js 的时候,Node.js 的版本号才刚刚 0.1.x。
#23 楼 @bhuztez 擦 我记得我刚开始折腾的时候也是 0.1 呢 http://helloworld.group.iteye.com/group/topic/20827
不过后来这东西火的一塌糊涂,就没心情用了..
#29 楼 @jiyinyiyong Node.js 有屁个开发效率...
即便是异步框架内部 (Emacs,Tcl,Perl/POE,Python/Twisted,Ruby/EventMachine ...),你说哪个不能完爆 Node.js?
#55 楼 @ShiningRay GWT 我用了近 2 年,刚开始很过爽,后来都是痛苦的回忆。 在 js 上包装一层,基本不避免的需要直接使用 js 的场景。比如, 我想在 GWT 中 jquery, 需要用 JSNI 包一层。 我想在 GWT 中用 pushlet 客户端,需要用 JSNI 包一层。
@bhuztez python 开发 web 完全不用 js? 求详解。
这么多人黑不缺我一个了 : )
看这两段类似功能的代码量的对比
https://github.com/chloerei/code_campo/blob/master/app/controllers/topics_controller.rb https://github.com/cnodejs/nodeclub/blob/master/controllers/topic.js
虽然说 cnodejs 这段没有分离 model 代码所以多了不少,但主要还是异步回调还有错误码判断耗费太多代码。
前端学 js 目前是唯一选择,即使用 coffee 也是基于对 js 的了解才能用好。后端我就不想用 js 了,什么用着舒服用什么,并发问题还有不少选择,Erlang 或 Go 对我吸引力还大点。
关于回调函数层次太多的问题,朴灵同学展示了自己的做法,原来除了 wind.js 这种通用方案外,还有这个思路 https://github.com/JacksonTian/eventproxy/blob/master/lib/eventproxy.js ,长见识啊
只会 js 的时候想学 node.js。不过那时候在 windows 下安装 node.js 还需要 cygwin,最后不了了之。 现在对 js 完全没有兴趣了
话说我做了 EJS 和 slim 的性能比较,还是 slim 速度快
ruby 版 http://ruby-china.org/topics/7957#reply18
js 版
ejs = require('ejs')
template = "<div>"+
"<h1 class='header'><%= header %></h1>" +
"<h2 class='header2'><%= header2 %></h2>" +
"<h3 class='header3'><%= header3 %></h3>" +
"<h4 class='header4'><%= header4 %></h4>" +
"<h5 class='header5'><%= header5 %></h5>" +
"<h6 class='header6'><%= header6 %></h6>" +
"<ul class='list'>" +
"<% list.forEach(function(e){ %>" +
"<li class='item'><%= e %></li>" +
"<% }) %>" +
"</ul>" +
"</div>"
t = ejs.compile(template)
env = {
header: "Header",
header2: "Header2",
header3: "Header3",
header4: "Header4",
header5: "Header5",
header6: "Header6",
list: ['1000000000', '2', '3', '4', '5', '6', '7', '8', '9', '10']
}
console.log(t(env))
for (var i=0; i < 100000; i++) {
t(env)
}
看来 rails 的瓶颈就是 activerecord =_=
#84 楼 @JacksonTian 我的机器上
$ node -v
v0.10.6
# list.forEach(function(e){
1.76s user 0.02s system 100% cpu 1.770 total
# for(var j=0; j < list.length; j++)
2.22s user 0.02s system 100% cpu 2.236 total
# var len=list.length; for(var i=0;i<len;i++)
1.77s user 0.02s system 100% cpu 1.777 total
而 ruby slim 还是略快
$ ruby -v
ruby 2.1.0dev (2013-04-25) [x86_64-darwin12.3.0]
1.48s user 0.01s system 99% cpu 1.497 total
之前和 handlebars 比较过也是 slim 快。
另外 slim 不是 ruby 里最快的模板引擎,它的性能比起 erb 还是略慢。
#88 楼 @ChanceDoor 它是快在前端,用了 angular.js,页面是在浏览器渲染的,全部数据都用 json……但是后台 json 响应时间 20 毫秒难道 rails 实现不了?那点数据量就算工作在 development 环境下不开 cache 都能实现吧……就算翻个倍时间人类也感觉不出差别啊
其实令人较感兴趣的反而是他怎么做到能让 google 搜索到上面的内容的,直接 wget 任意一个链接下来的都是同样的模板,上面没有内容的,难道 google 爬虫还会执行 js,还是说后台会针对爬虫调用 phantonjs 什么的……
招聘 RUBY 开发人员 2 名
岗位要求:
#86 楼 @luikore 今天正好在弄这方面的东西,社区原来总结过 http://cnodejs.org/topic/4f16442ccae1f4aa27001109 可以看看。
#96 楼 @JacksonTian cool, 如果有 RDTSC 测算前两次渲染时钟周期的结果就更好了,因为浏览器端选模板引擎要考虑无 JIT 的效果...