最高性能的javascript发布订阅系统Arbiter.js API翻译
2013-01-28 20:36
453 查看
最高性能的观察者模式
特点:
1、性能经测试确实高出目前市面上的所有类似的系统
2、而且代码相当精简。请看我对arbiter的源码分析
3、功能强大,虽然代码精简,但功确非常强大,请看下面的API介绍
================================================================================
官方网址:http://arbiterjs.com
性能测试地址
http://jsperf.com/pubsubjs-vs-jquery-custom-events/66
================================================================================
Arbiter.js 是一个轻量及的 javascript 发布订阅设计模式 (pub/sub pattern)实现;它允许页面中对象之间通信的解耦。这将会使程序系统更干净,简单易读,更易维护
举个栗子:如果用户在页面中某个位置改变了某个值,它将发布这条消息告知哪部分发生了变化。页面中另一部分能订阅这条消息,并在接受到此消息时执行相应的逻辑,彼此并不需要关心对方,它只是宣布某件事情发生了并发出此消息,谁订阅了,谁就会收到此消息
栗子:
// In the "notifications" widget, I want to do something when new mail arrives Arbiter.subscribe("email/new", function(data) { document.getElementById('notification').innerHTML = "New email from "+data.from; }); // This code is called by the system that detects incoming email Arbiter.publish("email/new", {from:"Bob"});
Method Summary 主要方法:
Arbiter.publish 发布
Arbiter.subscribe 订阅
Arbiter.unsubscribe 取消订阅
Arbiter.resubscribe 恢复订阅
====================How To 如何使用=========================
Publish a simple message
发布一个简单的消息
消息的可以以任何格式,但不能包含“,”或“*”号,推荐这样的惯例“a/b/c”,来允许消息类型的分类
[b]Subscribe to a message 订阅消息[/b]
订阅消息参数如下:
· published_data: 发布的所有消息
· message: 消息的类型,(对于同时侦听多种消息类型非常有用)
· subscriber_data: 订阅者的参数。也许对于想将上下文传递给下个订阅者非常有用,默认为空对象
This指针指向的是订阅者自身
Pass data to subscribers 传递数据给订阅者
发布者可以传递数据给订阅者,数据包含了具体的消息内容
Force message bubbling 允许消息冒泡
默认订阅都可以返回false来阻止下一个订阅者接受消息,参数中设置cancelable:false,可以取消订阅者的阻止功能
Allow late susbcribers to be notified of past messages 允许后来订阅者订阅消息
默认,订阅者只能接受到订阅之后发布者发出的消息,但是一些事件,比如系统初始化信息("system initalized")只会发出一次,如果需要在消息发布后才订阅的订阅者也能执行相应的逻辑,则传递persist属性来达到,之后订阅也能收到以前已发出过的消息;
Fire subscribers asynchronously 异步执行订阅者回调
默认情况下,订阅者的回调都是同步方式来执行代码(javascript的执行是单线程的),所以publish() 方法不会等到执行完所有订阅者的回调才返回, 如果你希望异步执行来防止阻塞,则使用此方法;
注意:异步执行的回调,无法阻止冒泡,因为异步的实现是用setTimeout方法模拟
Subscribe to multiple messages at once [b]一次订阅多个消息类型[/b]
订阅者回调中第二个参数是消息类型,可以用于区分当前接受到的是哪条消息
Subscribe to multiple messages using a wildcard [b]通过通配符同时订阅多条消息[/b]
这对于订阅某一类型的消息非常有用
Subscribe to ALL messages [b]订阅所有消息[/b]
Set subscriber priority [b]设置订阅者的权重[/b]
默认,所有的订阅者权重值为0,越高的权重值,越先被执行,也允许传递负值
Execute a subscriber asynchronously [b]异步执行订阅者回调[/b]
订阅者也可以自己设置指定自己的回调异步执行,如果担心自己的回调会非常耗时。
Ignore persisted messages [b]忽略持久消息[/b]
如果订阅者不关心已发布过的消息,则可以传递{persist:false}
Set the value of "this" [b]设置this[/b]
可以为回调指定执行上下文
Unsubscribe from messages [b]取消订阅[/b]
取消订阅执行后会返回此回调的ID,用于将来恢复订阅
Re-subscribe to messages 恢复消息回调
取消订阅后可以通过此方法恢复订阅
Create a new message handler 创建新的发布订阅系统
创建单独的互不引响的发布订阅系统
================================================================================
由于是老外写的东西,好像没有中文版的API,所以自己翻译了一下,其实说不上翻译,只是用中文表达出了API的使用方法。有不正确的地方,请以官方英文版为准
注:转载请注明出处:偷饭猫email: xiaodong1986@me.com
特点:
1、性能经测试确实高出目前市面上的所有类似的系统
2、而且代码相当精简。请看我对arbiter的源码分析
3、功能强大,虽然代码精简,但功确非常强大,请看下面的API介绍
================================================================================
官方网址:http://arbiterjs.com
性能测试地址
http://jsperf.com/pubsubjs-vs-jquery-custom-events/66
================================================================================
Arbiter.js 是一个轻量及的 javascript 发布订阅设计模式 (pub/sub pattern)实现;它允许页面中对象之间通信的解耦。这将会使程序系统更干净,简单易读,更易维护
举个栗子:如果用户在页面中某个位置改变了某个值,它将发布这条消息告知哪部分发生了变化。页面中另一部分能订阅这条消息,并在接受到此消息时执行相应的逻辑,彼此并不需要关心对方,它只是宣布某件事情发生了并发出此消息,谁订阅了,谁就会收到此消息
栗子:
// In the "notifications" widget, I want to do something when new mail arrives Arbiter.subscribe("email/new", function(data) { document.getElementById('notification').innerHTML = "New email from "+data.from; }); // This code is called by the system that detects incoming email Arbiter.publish("email/new", {from:"Bob"});
Method Summary 主要方法:
Arbiter.publish 发布
Arbiter.publish( msg [, data [, options] ] ) Returns: true on success, false if any subscriber has thrown a js exception Success时返回true, 某个订阅者中发生错误时抛出false
Arbiter.subscribe 订阅
Arbiter.subscribe( msg, func ) Arbiter.subscribe( msg, options, func ) Arbiter.subscribe( msg, options, context, func ) Returns: subscription id or [id1,id2] if subscribing to multiple messages 返回订阅者对象的id或id数组
Arbiter.unsubscribe 取消订阅
Arbiter.unsubscribe( subscription_id )
Arbiter.resubscribe 恢复订阅
Arbiter.resubscribe( subscription_id )
====================How To 如何使用=========================
Publish a simple message
发布一个简单的消息
Arbiter.publish( 'component/msg' );
消息的可以以任何格式,但不能包含“,”或“*”号,推荐这样的惯例“a/b/c”,来允许消息类型的分类
[b]Subscribe to a message 订阅消息[/b]
Arbiter.subscribe( 'component/msg', function() { } );
订阅消息参数如下:
· published_data: 发布的所有消息
· message: 消息的类型,(对于同时侦听多种消息类型非常有用)
· subscriber_data: 订阅者的参数。也许对于想将上下文传递给下个订阅者非常有用,默认为空对象
This指针指向的是订阅者自身
Pass data to subscribers 传递数据给订阅者
Arbiter.publish( 'component/msg', {"data":"value"} );
发布者可以传递数据给订阅者,数据包含了具体的消息内容
Force message bubbling 允许消息冒泡
Arbiter.publish( 'component/msg' , null, {cancelable:false} );
默认订阅都可以返回false来阻止下一个订阅者接受消息,参数中设置cancelable:false,可以取消订阅者的阻止功能
Allow late susbcribers to be notified of past messages 允许后来订阅者订阅消息
Arbiter.publish( 'component/msg' , null, {persist:true} );
默认,订阅者只能接受到订阅之后发布者发出的消息,但是一些事件,比如系统初始化信息("system initalized")只会发出一次,如果需要在消息发布后才订阅的订阅者也能执行相应的逻辑,则传递persist属性来达到,之后订阅也能收到以前已发出过的消息;
Fire subscribers asynchronously 异步执行订阅者回调
Arbiter.publish( 'component/msg', null, {async:true} );
默认情况下,订阅者的回调都是同步方式来执行代码(javascript的执行是单线程的),所以publish() 方法不会等到执行完所有订阅者的回调才返回, 如果你希望异步执行来防止阻塞,则使用此方法;
注意:异步执行的回调,无法阻止冒泡,因为异步的实现是用setTimeout方法模拟
Subscribe to multiple messages at once [b]一次订阅多个消息类型[/b]
Arbiter.subscribe( 'component/msg, component/msg2', function() { } ); or Arbiter.subscribe( ['component/msg','component/msg2'], function() { } );
订阅者回调中第二个参数是消息类型,可以用于区分当前接受到的是哪条消息
Subscribe to multiple messages using a wildcard [b]通过通配符同时订阅多条消息[/b]
Arbiter.subscribe( 'component/*', function() { } );
这对于订阅某一类型的消息非常有用
Subscribe to ALL messages [b]订阅所有消息[/b]
Arbiter.subscribe( '*', function() { } );
Set subscriber priority [b]设置订阅者的权重[/b]
Arbiter.subscribe( 'msg', {priority:10}, func(){} ); Arbiter.subscribe( 'msg', {priority:20}, func(){} ); // Called first!
默认,所有的订阅者权重值为0,越高的权重值,越先被执行,也允许传递负值
Execute a subscriber asynchronously [b]异步执行订阅者回调[/b]
Arbiter.subscribe( 'msg', {async:true}, func(){} );
订阅者也可以自己设置指定自己的回调异步执行,如果担心自己的回调会非常耗时。
Ignore persisted messages [b]忽略持久消息[/b]
Arbiter.subscribe( 'msg', {persist:false}, func(){} );
如果订阅者不关心已发布过的消息,则可以传递{persist:false}
Set the value of "this" [b]设置this[/b]
Arbiter.subscribe( 'msg', null, document.getElementById('x'), function() { this.innerHTML = "Message handled!"; } );
可以为回调指定执行上下文
Unsubscribe from messages [b]取消订阅[/b]
var subscription_id = Arbiter.subscribe( 'msg', function(){} ); Arbiter.unsubscribe( subscription_id );
取消订阅执行后会返回此回调的ID,用于将来恢复订阅
Re-subscribe to messages 恢复消息回调
var subscription_id = Arbiter.subscribe( 'msg', function(){} ); Arbiter.unsubscribe( subscription_id ); Arbiter.resubscribe( subscription_id );
取消订阅后可以通过此方法恢复订阅
Create a new message handler 创建新的发布订阅系统
var MyController = Arbiter.create()
创建单独的互不引响的发布订阅系统
================================================================================
由于是老外写的东西,好像没有中文版的API,所以自己翻译了一下,其实说不上翻译,只是用中文表达出了API的使用方法。有不正确的地方,请以官方英文版为准
注:转载请注明出处:偷饭猫email: xiaodong1986@me.com
相关文章推荐
- 性能最高的javascript 发布订阅系统(pub/sub)Arbiter.js 源码分析
- pubsub.js简介,一个利用JavaScript进行发布/订阅的库
- Chrome 10测试版发布 JS性能再提升66%
- ArcGIS JS 版军事标绘图(燕尾箭头、钳击箭头、集结地)扇形等自定义图形, ArcGIS For JavaScript API Drawing Tool(绘图工具)————(十七)
- Spring Data Redis实现一个订阅/发布系统
- 分布式发布订阅消息系统 Kafka 架构设计
- Android平台,如何调用javascript操作网页和js调用系统功能
- Redis系列-JAVA与redis整合-Spring Data Redis实现一个订阅/发布系统
- Arcgis server发布电子地图(2):配置IIS,安装IDEA,配置智能提示dojo和API For JS,helloworld实例,打卡
- JavaScript发布/订阅实例
- 【JavaScript】性能更好的js动画实现方式——requestAnimationFrame
- 翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 6 章:值的不可变性
- 高吞吐量的分布式发布订阅消息系统Kafka--spring-integration-kafka的应用
- Ember.js API (v2.11.0) 翻译 ---004.Routing---002---Defining Your Routes Edit Page(定义你的路由)
- 分布式发布订阅消息系统 Kafka (A distributed publish-subscribe messaging system)
- 第五章 --- 关于Javascript 设计模式 之 发布-订阅模式
- ArcGIS api for JavaScript 4.3 学习笔记(0)本地Tomcat部署arcgis_js_api
- easyradius隆重发布ROS API计费接口,支持ROS 3.3以上版本,实现简单快捷的ROS宽带计费系统云端版
- ArcGIS API for JS 3.16在Windows系统上的离线部署方法
- 翻译连载 |《你不知道的JS》姊妹篇 | JavaScript 轻量级函数式编程-引言&前言