6 七 2011, 9:06上午
javascript:
by

2 点高见,马上去办~~

自定义事件(Custom Event) 一

这个东西早在YUI,jquery初始的版本里面已经包括了。

但是在Nodejs把它用得炉火纯青。

开始分析:事件机制是一套类似于这样的流程:

Event —-> Handler


在起初的应用,我们似乎已经习惯了原生的那些事件源。但是,当一个程序越来越复杂的时候,事件驱动成了一个项目设计流程中必不可少词眼的时候,这些原生的事件显得是如些的骨感,我们要让她丰满一些~~

幸运的是,js的原生机制中有这样一个方法

Arguments —-> Function


是不是太熟悉,以至忘了她的存在。这样一眼看上去,和事件的触发机制如此的相像,抛出一个argument和function绑定,然后执行就完美的模仿了Event的机制,但是更重要的是—-我们可以随意的定义事件源。

 

NodeJS的customer event设计了这样一套机制

Image(1)[4]

在一个我们将要操作元素上,绑定了一个_Events属性。在这个属性里存储key/value的字量面对象,这个字面量对象可以是一对一,多对一,多对多都是个可以。

这就实现了我们在自定义事件中的第一个逻辑:自定义事件的绑定

这个里面已经有了Object,Event(对应key),Handler(对应Value),很好的定义了自定义事情与回调函数的对应绑定关系。

这就是: EventEmitter.prototype.addListener所做的工作.维系一个自定义事件和回调函数的对应表。

然后就需要考虑怎么来触发自定义事件

我们来看 EventEmitter.prototype.emit

Image(2)

它是这样处理的,如果直接传入回调函数,根据其数量的不同分别用 Call 来绑定。对于传入的数组循环一下再绑定。

OK: 如此简单的代码就完成了一整套自定义事件

华丽的分割线:
___________________________________________________________________________________________

把arguments由Like-Array转变成真正的Array过程中,大量使用了Array.prototype.slice.call()这个方法,这个方法的输出很有意思

 

(function(){
    console.info(arguments);
    console.info(arguments.length);
    console.info(typeof(arguments));
    console.info(typeof([]));
    console.info(arguments.constructor);
    console.info([].constructor);
    console.info(Array.prototype.slice.call(arguments,1));
})("a","b","c","d")

输出结果是:

Image(3)

很有意思吧~

下一节带来,大量Custom Event的应用

16 四 2011, 10:15上午
javascript:
by

发表点儿看法吧

CNodejs聚会之nodejs初探(一)

 

image

今天nodejs在betacafe举行活动。

早就久闻其大名—-这玩意所渲染的和nosql的东西结合起来前后端通吃,统一逻辑一套代码前后端都可以跑的概念,让人口水真流啊。哈哈,真的那样的话多省事儿,可以少跟很多人打交道,直接去取key/value形式的数据然后我们直接实现展现就可以了,流程可以流畅起来~~YYYY~~,继续YY,嘿嘿。

 

下面是我的笔记。

 

首先,代替后端直接用事件驱动的脚本来写后端逻辑可以由抽象变得形象一些。容易理解,开发难度降低。

 

性能方面的优势。

  • 单线程(single-thread)
  • 非阻塞式IO(non-blocking)
  • V8(runtime)

 

  单线程:

    • 单线程:多个请求占用一个线程
    • 多线程:一个请求占用一个线程

image

Nginx(单线程)vs Apache(多线程)

单线程占用更少的内存让系统有更好的性能。但是同时要认识到,这个问题单线程的可靠性差,一个请求异常了一个线程全挂。这里就需要考虑一 下实时性的系统就不能用nodejs来玩了吧?

 

非阻塞:

    • 非阻塞:事件状态保留,等到事件响应以后再执行事件上绑定逻辑。同时执行一下个监听事件。
    • 阻塞:事件状态不保留,等到事件响应以后再执行事件上绑定逻辑。下一个监听事件被中断。

image

Nginx(非阻塞)vs Apache(阻塞)

非阻塞会带来了那些问题呢?这个我还在想.

 

V8:

google大神的东西,把动态脚本的执行效率提升到一个新的高度。这样才有nodejs,commonjs这种东西的产生,让js可以脱离浏览器实现更多的东西。

 

回来做了下功课把nodejs装得玩了玩。

  1. wget,下taz文件。
  2. tar xzf解压下文件。
  3. 我的EC2 instance上没装openssl,直接 ./configure –without ssl
    image
  4. 然后就make,这个时间之长让人发指,花了我25分钟。后来我在nodejs群里面请教了一下前辈。原来nodejs在编译的时候要把v8引擎也要编译一次。
    image
  5. make install安装,一排排的.py刷屏~
    image
  6. 接下来就可以写自己的nodejs程序了
    image

 

ps:

电信从业者 @flyinweb 分享了"一个基于物联网的实时监控项目实践""

他们这个项目用

  • socket.io
  • connection pool
  • bayeux implement
  • multi-node
  • websocket client
  • node-mysql
  • log4js-node

这些开源组件集成起来了,讲了很多干货。

这玩意对我感触很大,我们太多工作花在自己造轮子上了,自已写底层框架,写具体逻辑。这点要向传统软件业的前辈们学习,多做集成少开发。当然 web app在国内刚刚火起来,能给我们做集成的框架,中间件太少了,这也是一个矛盾~~

总之,好多新东西要学习啦,加油~~~

 
  • 我在说

  • 我在看

  • 新文章

  • 文章归档