博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript发布/订阅实例
阅读量:5931 次
发布时间:2019-06-19

本文共 1530 字,大约阅读时间需要 5 分钟。

原文链接:
原文日期: 2014年6月11日
翻译日期: 2014年6月13日

翻译人员:

高效AJAX网站的三大杀器: , , 以及高效应用级 发布/订阅通信机制. 本博客的 同时使用了这三种技术,本文中作者将分享其中最简单的一个: 该网站使用的 一个微型 发布/订阅模块。

如果你不了解 发布/订阅 模式,那么可以将其类比为 你发表了一篇博文,所有人都可以订阅你的博客, 也类似于广播电台的工作方式: 有一个站台进行广播(发布, publishes), 其他人都可以收听(订阅, subscribes)。 这种模式对于高度模块化的应用是很卓越的, 这是一把全局通信的钥匙,而不需要依赖某个特殊的对象。
JavaScript实现
该模块非常的精简,功能也非常的强大:
var events = (function(){  var topics = {};  return {    subscribe: function(topic, listener) {      // 如果没有创建,则创建一个topic对象      if(!topics[topic]) topics[topic] = { queue: [] };      // 添加监听器到队列中      var index = topics[topic].queue.push(listener) -1;      // 提供移除topic的句柄(对象)      return (function(topic, index) {        return {          remove: function() {            delete topics[topic].queue[index];          }        }      })(topic, index);    },    publish: function(topic, info) {      // 如果 topic 不存在,或者队列中没有监听器,则 return      if(!topics[topic] || !topics[topic].queue.length) return;      // 通过循环 topics 队列, 触发事件!      var items = topics[topic].queue;      items.forEach(function(item) {      		item(info||{});      });    }  };})();
使用示例

发布一个topic:

events.publish('/page/load', {	url: '/some/url/path' // 此处可以是任意对象,任意参数});
订阅topic以便得到事件通知:

var subscription = events.subscribe('/page/load', function(obj) {	// 当事件发生时,可以执行某些操作...});// ... 如果某些操作完成后,不想继续订阅,移除即可...subscription.remove();
原作者在博客站点上大量地使用 发布/订阅 模式,实际的使用体验也非常好. 
当一个 AJAX页面加载完成时会发布一个 topic, 然后该事件就会触发多个订阅者的响应(比如 重新加载广告, 刷新评论, 关联分享按钮等). 建议你也评估下自己的网站,看看有什么地方可以使用 pub/sub 模式.

转载于:https://www.cnblogs.com/lanzhi/p/6467009.html

你可能感兴趣的文章
js从0开始构思表情插件
查看>>
CF97B:Superset——题解
查看>>
debian、ubuntu系统下,常用的下载工具
查看>>
PS2键盘
查看>>
PMBOK项目管理认知概要
查看>>
java===编译引用第三方文件的类(原创)
查看>>
带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
查看>>
webpack相关插件
查看>>
maven添加第三方jar到本地(转)
查看>>
GraphicsMagick+IM4Java在项目中的使用总结
查看>>
js设置radio 和checkbox 单选
查看>>
特殊回文数(蓝桥杯)
查看>>
记在邮件之外的
查看>>
Virtual Key Codes
查看>>
Java反射中的Type和GenericDeclaration
查看>>
如何解压缩后缀名为zip.001,zip.002等的文件
查看>>
我的一起开源网 www.17ky.net上线了
查看>>
OSGI企业应用开发(十二)OSGI Web应用开发(一)
查看>>
二维数组排序可以用php内置函数
查看>>
一些兼容性的知识
查看>>