javascript 设计模式 之 代理模式

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。
 

代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。

代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。
 

虚拟代理合并 HTTP 请求


在 Web 开发中,也许最大的开销就是网络请求。假设我们在做一个文件同步的功能,当我们选中一个 checkbox 的时候,它对应的文件就会被同步到另外一台备用服务器上面。下面用多个checkbox 做实例。

<body>
    <input type="checkbox" id="1"></input>1
	<input type="checkbox" id="2"></input>2
	<input type="checkbox" id="3"></input>3
	<input type="checkbox" id="4"></input>4
	<input type="checkbox" id="5"></input>5
	<input type="checkbox" id="6"></input>6
	<input type="checkbox" id="7"></input>7
	<input type="checkbox" id="8"></input>8
	<input type="checkbox" id="9"></input>9
</body>

可以通过一个代理函数 proxySynchronousFile 来收集一段时间之内的请求,最后一次性发送给服务器。比如我们等待 2 秒之后才把这 2 秒之内需要同步的文件 ID 打包发给服务器,如果不是对实时性要求非常高的系统, 2 秒的延迟不会带来太大副作用,却能大大减轻服务器的压力。

var proxySynchronousFile = (function(){
 	var cache = [],timer;

 	return function (id){
 		cache.push(id);
 		if(timer){
 			return;
 		}

 		timer = setTimeout(function(){
 			synchronousFile( cache.join( ',' ) ); // 2 秒后向本体发送需要同步的 ID 集合
			clearTimeout( timer ); // 清空定时器
			timer = null;
			cache.length = 0; // 清空 ID 集合
 		},1000)
 	}
 })()

  var synchronousFile = function(id){
 	console.log('开始同步文件: id:'+id);
 }
 var checkbox = document.getElementsByTagName('input');
 for(var i =0,c; c= checkbox[i++];){
 	c.onclick=function (){
 		if(this.checked === true){
 			proxySynchronousFile(this.id);
 		}
 	}
 }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值