最高性能的javascript发布订阅系统Arbiter.js API翻译

最高性能的观察者模式

特点:

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”,来允许消息类型的分类

Subscribe to a message 订阅消息

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  一次订阅多个消息类型

Arbiter.subscribe( 'component/msg, component/msg2', function() { } ); 
or Arbiter.subscribe( ['component/msg','component/msg2'], function() { } );

订阅者回调中第二个参数是消息类型,可以用于区分当前接受到的是哪条消息

Subscribe to multiple messages using a wildcard   通过通配符同时订阅多条消息

Arbiter.subscribe( 'component/*', function() { } );

这对于订阅某一类型的消息非常有用

Subscribe to ALL messages  订阅所有消息

Arbiter.subscribe( '*', function() { } );

Set subscriber priority 设置订阅者的权重

Arbiter.subscribe( 'msg', {priority:10}, func(){} ); 
Arbiter.subscribe( 'msg', {priority:20}, func(){} ); // Called first!

默认,所有的订阅者权重值为0,越高的权重值,越先被执行,也允许传递负值

Execute a subscriber asynchronously  异步执行订阅者回调

Arbiter.subscribe( 'msg', {async:true}, func(){} );

订阅者也可以自己设置指定自己的回调异步执行,如果担心自己的回调会非常耗时。

Ignore persisted messages     忽略持久消息

Arbiter.subscribe( 'msg', {persist:false}, func(){} );

如果订阅者不关心已发布过的消息,则可以传递{persist:false}

Set the value of "this"   设置this

Arbiter.subscribe( 'msg', null, document.getElementById('x'), function() { this.innerHTML = "Message handled!"; } );

可以为回调指定执行上下文

Unsubscribe from messages   取消订阅

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

原文地址:https://www.cnblogs.com/willian/p/2880499.html