zoukankan      html  css  js  c++  java
  • 最高性能的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

  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/willian/p/2880499.html
Copyright © 2011-2022 走看看