如何高效地跨Javascript类发送自定义消息?
我为javascript客户端应用程序构建了松散耦合的组件,这些组件通过manager类发送和接收消息:如何高效地跨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. 这可以按预期工作,
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中的事件调度”,有几个项目用于此目的,但其中一些项目似乎已经死了:
进行发动机罩下的循环
:
我需要的是javascript类之间的纯javascript通信。是否有任何有效/本地的方法来实现这一点 我记得在切换到TypeScript和使用接口之前,我试图找到这个问题的清晰答案(即,我从未找到我真正喜欢的解决方案)。我认为发布/订阅(Pub/Sub)是最健壮的实时解决方案,异步实现允许您避免一些头痛(和开销)是酒吧/酒吧,但这是一个重新设计,不是一个简单的改变。我真的不明白,你有什么建议吗?重新设计不是问题……很抱歉,我对你的问题投了更高的票,但写了一条评论而没有回答,原因是我认为这是一个公平的问题,但我不认为有明确的答案。我的建议是:你的应用程序开销真的足够大吗?如果解决方案有效且速度足够快,请暂时将优化放在一边。软件开发是关于制作有用的、功能性的、希望没有bug的应用程序,而不是编写最有效的代码。我们的客户不应该是其他开发人员我们的客户应该是我们的用户和/或客户,并且要确保他们在任何时候都感到高兴我记得在切换到TypeScript和使用界面(即,我从来没有找到我真正喜欢的解决方案)之前,我想Pub/Sub,这就是您在这里要实现的,是最健壮的实时解决方案,异步实现允许您避免发布/订阅的一些头痛(和开销),但这是一个重新设计,不是一个简单的更改。我没有真正理解它,您建议还是其他什么?重新设计不是问题……很抱歉,我对你的问题投了更高的票,但写了一条评论而没有回答,原因是我认为这是一个公平的问题,但我不认为有明确的答案。我的建议是:你的应用程序开销真的足够大吗?如果解决方案有效且速度足够快,请暂时将优化放在一边。软件开发是关于制作有用的、功能性的、希望没有bug的应用程序,而不是编写最有效的代码。我们的客户不应该是其他开发人员我们的客户应该是我们的用户和/或客户,并确保他们在任何时候都感到高兴