• 最高性能的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

  • 相关阅读:
    【2020Python修炼记】web框架之choices 参数/MTV 与 MVC 模型/多对多关系的创建方法
    【2020Python修炼记】web框架之 Django的ORM语法
    进来看,让你躺着就把JavaScript学完了(三)
    进来看,让你躺着就把JavaScript学完了(二)
    进来看,让你躺着就把JavaScript学完了(一)
    一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)5
    一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)4
    一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)3
    一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)2
    一分钟了解HTML 与 CSS(乐字节,乐字节java,乐字节架构)
  • 原文地址:https://www.cnblogs.com/willian/p/2880499.html
Copyright © 2020-2023  润新知