Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何高效地跨Javascript类发送自定义消息?_Javascript_Performance_Events_Publish Subscribe - Fatal编程技术网

如何高效地跨Javascript类发送自定义消息?

如何高效地跨Javascript类发送自定义消息?,javascript,performance,events,publish-subscribe,Javascript,Performance,Events,Publish Subscribe,我为javascript客户端应用程序构建了松散耦合的组件,这些组件通过manager类发送和接收消息: a component detects an event => send to manager manager receives an event => send to everyone any component got message => interested in message? yes: process, no: discard. 这可以按预期工作,

我为javascript客户端应用程序构建了松散耦合的组件,这些组件通过manager类发送和接收消息:

a component detects an event => send to manager 

manager receives an event => send to everyone 

any component got message => interested in message? yes: process, no: discard. 
这可以按预期工作,但效率不高。以下是manager的实现:

在Livescript中:

class mgr
  ~> 
    @actor-list = []

  register: (actor) -> 
    @actor-list ++= [actor]

  dispatch: (msg) -> 
    for actor in @actor-list
      actor.inbox-put msg
在Javascript中:

var mgr;
mgr = (function(){
  mgr.displayName = 'mgr';
  var prototype = mgr.prototype, constructor = mgr;
  function mgr(){
    var this$ = this instanceof ctor$ ? this : new ctor$;
    this$.actorList = [];
    return this$;
  } function ctor$(){} ctor$.prototype = prototype;
  prototype.register = function(actor){
    return this.actorList = this.actorList.concat([actor]);
  };
  prototype.dispatch = function(msg){
    var i$, ref$, len$, actor, results$ = [];
    for (i$ = 0, len$ = (ref$ = this.actorList).length; i$ < len$; ++i$) {
      actor = ref$[i$];
      results$.push(actor.inboxPut(msg));
    }
    return results$;
  };
  return mgr;
}());
var管理器;
mgr=(函数(){
mgr.displayName='mgr';
var prototype=mgr.prototype,constructor=mgr;
职能经理(){
var this$=此实例的ctor$?此:新ctor$;
此$.actorList=[];
退还这美元;
}函数ctor$(){}ctor$.prototype=prototype;
prototype.register=函数(actor){
返回this.actorList=this.actorList.concat([actor]);
};
prototype.dispatch=函数(msg){
var i$、ref$、len$、actor、results$=[];
对于(i$=0,len$=(ref$=this.actorList).length;i$
我在网上搜索了“Javascript中的事件调度”,有几个项目用于此目的,但其中一些项目似乎已经死了:

其中一些使用相同的
进行发动机罩下的循环

其中一些需要在html节点上绑定:


我需要的是javascript类之间的纯javascript通信。是否有任何有效/本地的方法来实现这一点

我记得在切换到TypeScript和使用接口之前,我试图找到这个问题的清晰答案(即,我从未找到我真正喜欢的解决方案)。我认为发布/订阅(Pub/Sub)是最健壮的实时解决方案,异步实现允许您避免一些头痛(和开销)是酒吧/酒吧,但这是一个重新设计,不是一个简单的改变。我真的不明白,你有什么建议吗?重新设计不是问题……很抱歉,我对你的问题投了更高的票,但写了一条评论而没有回答,原因是我认为这是一个公平的问题,但我不认为有明确的答案。我的建议是:你的应用程序开销真的足够大吗?如果解决方案有效且速度足够快,请暂时将优化放在一边。软件开发是关于制作有用的、功能性的、希望没有bug的应用程序,而不是编写最有效的代码。我们的客户不应该是其他开发人员我们的客户应该是我们的用户和/或客户,并且要确保他们在任何时候都感到高兴我记得在切换到TypeScript和使用界面(即,我从来没有找到我真正喜欢的解决方案)之前,我想Pub/Sub,这就是您在这里要实现的,是最健壮的实时解决方案,异步实现允许您避免发布/订阅的一些头痛(和开销),但这是一个重新设计,不是一个简单的更改。我没有真正理解它,您建议还是其他什么?重新设计不是问题……很抱歉,我对你的问题投了更高的票,但写了一条评论而没有回答,原因是我认为这是一个公平的问题,但我不认为有明确的答案。我的建议是:你的应用程序开销真的足够大吗?如果解决方案有效且速度足够快,请暂时将优化放在一边。软件开发是关于制作有用的、功能性的、希望没有bug的应用程序,而不是编写最有效的代码。我们的客户不应该是其他开发人员我们的客户应该是我们的用户和/或客户,并确保他们在任何时候都感到高兴