JavaScript通告/订阅的例子
原始日期: 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, 那么该事件将触发多个用户响应(实例 再次加载广告, 刷新评论, 分享联营button等一下). 我建议你也评价降低自己的网站,要看看有什么可以使用 pub/sub 状态.
JavaScript通告/订阅的例子的更多相关文章
- C# windows程序应用与JavaScript 程序交互实现例子
C# windows程序应用与JavaScript 程序交互实现例子 最近项目中又遇到WinForm窗体内嵌入浏览器(webBrowser)的情况,而且涉及到C#与JavaScript的相互交互问题, ...
- javascript闭包的一个例子
<html> <head> <title>elementFromPoint</title> <script type="text/jav ...
- 自学JavaScript的几个例子
学习了广泛使用的浏览器脚本JavaScript和HTML的DOM模型(也是用JavaScript实现),下面给出两个自己学习时的例子,具体JavaScript语法请参考W3C相关网页(http://w ...
- JavaScript发布/订阅实例
原文链接: Pub/Sub JavaScript Object原文日期: 2014年6月11日翻译日期: 2014年6月13日 翻译人员: 铁锚 高效AJAX网站的三大杀器: 事件代理, 浏览历史管理 ...
- 理解javascript观察者模式(订阅者与发布者)
什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...
- dojo topic 发布与订阅 小例子可以参考下
<!DOCTYPE html><html> <head> <title></title></head> <body> ...
- 简单模仿javascript confirm方法的例子
页面中有个删除按钮: <?php $i = 1; foreach ($packages as $package) { ?> <tr> <td height="3 ...
- 用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上
本文为鸡毛巾原创,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,转载请注明 CefSharp说白了就是Chromium浏览器的嵌入式核心,我们 ...
- ArcGIS API for JavaScript 与 npm 之例子运行
下载官方的demo,4.7的,在终端里跑了一下,测试成功(未打包) 在测试中精简掉了不需要的文件,使用http协议跑的(file协议不行哦) 最简单的目录如下: 我把以上文件放到一个叫demo的文件夹 ...
随机推荐
- shell程序之逐行读取一文件里的參数且使用此參数每次运行5分钟
/********************************************************************* * Author : Samson * Date ...
- bridge pattern
10.5 桥接模式总结 桥接模式是设计Java虚拟机和实现JDBC等驱动程序的核心模式之一,应用较为广泛.在软件开发中如果一个类或一个系统有多个变化维度时,都可以尝试使用桥接模式对其进行设计.桥接模 ...
- C#里System.Data.SQLite中对GUID的处理
string sqlstring = "select * from endpoint_policy where HEX([UserGuid]) ='" + CommonHelper ...
- Swing多线程编程(转)
关键字: Swing,多线程,GUI,SwingWorker 摘要: 本文论述了怎样开发多线程的Swing程序,从而提高Swing程序的响应速度和性能. 近期,我将推出一系列研究Swing程序 ...
- QEMU-KVM自己主动创建虚拟机,以指定IP构造
正在使用qemu不能指定创建虚拟机的过程IP住址,然而,在实际应用中,我们需要有一台虚拟机IP住址,不是人为的虚拟机操作系统配置. 于qemu虚拟机技术文档(http://qemu.weilnetz. ...
- [LeetCode283]Move Zeros将一个数组中为0的元素移至数组末尾
题目: Given an array nums, write a function to move all 0's to the end of it while maintaining the rel ...
- 玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)
关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?i ...
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法
近来在负责公司短信网关的维护及建设,随着公司业务发展对短信依赖越来越严重了,短信每天发送量也比曾经每天40多w发送量暴增到每天达到200w发送量.由于是採用Java做发送底层,压力递增情况下不可避免的 ...
- 在前端一定要了解的HTML,CSS知识
盒子模型 每个盒子都有4个属性:内容(content).填充(padding).边框(border).边界(margin) 每个属性都有四个部分:上.右.下.左 块级元素 内联元素 块级元素(bloc ...
- java流的性能优化1-文件复制
传统的I/O速度相对照较慢,它会成为系统性能的瓶颈,所以在java1.4之后提供了NIO,它是一种全新的流:它具有下面特性: 1.为全部的原是类型提供Buffer缓存支持: 2.使用java.nio. ...