可以概括为两个方面:频繁调用服务器,客户体验优化(网络问题/错误提醒)频繁调用服务器是现有网站或webapps的通病,这些问题对服务器的影响很大。对于处理复杂的请求,过多的请求直接导致服务器瘫痪案例:查询大数据报错,上传日志,大家一键提交……遇到这些问题,程序员很头疼。很多人可能都知道这个问题,但是很难解决,原因是会造成业务代码混乱,测试困难,容易出现bug等客户体验优化(网络问题/错误提示)主要围绕网络问题和错误提示来体现客户体验优化案例:客户网络未知,无法查询网络问题相同,错误不应频繁提示。如何解决推荐js-trigger,js-trigger是一个JavaScript触发器插件,可以通过指定频率和时间来触发指定的处理函数。支持UMD(AMD/CMD/CommonJS/ESModule)支持Node,支持Browser使用场景:限制频繁上传日志,限制频繁ajax调用,错误提醒,网络状态检测等js-triggercases三种导入方式importTriggerfrom'js-扳机';//ES6引入varTrigger=require('js-trigger').default;//ES5引入window.Trigger;//浏览器引入案例1:限制查询按钮的频率,条件是最多3s内发送一个请求//创建触发器vartrigger=Trigger.create({name:'限制查询频繁调用',//frequency:5,//点击5次触发interval:3,//点击3s以上触发,3s以内不触发firstTrigger:true//first立即触发});varbtnQuery=$('#btnQuery');/***触发监听事件处理函数*@param{Object}state-当前状态*@param{number}handlerCounter-触发计数统计*@param{Date}startTime-开始time*@param{Date}endTime-结束时间*@param{number}duration-Duration(ms)*@param{Object[]}data-附加数据,每次校验传入*/trigger.on(function(state){$.get("查询数据api接口",function(res){//dosomething});});//点击查询事件btnQuery.click(function(ev){//检查触发器,如果??满足条件,处理函数trigger.check('每次检查是传入数据');});案例2:上传客户网络数据,条件是数据可以在30s内上传一次或者在10次内执行最多触发10次//创建触发器vartrigger=Trigger.create({interval:30,//Triggerfrequencyover30s:10,//点击10次触发maxHandlerFrequency:10,//最多触发10次firstTrigger:true//第一次立即触发});/***Triggerlistenereventhandler*@param{Object}state-当前状态*@param{number}handlerCounter-触发计数统计*@param{Date}startTime-开始时间*@param{Date}endTime-结束时间*@param{number}duration-持续时间(毫秒)*@param{Object[]}data-附加数据,每次check*/trigger.on(function(state){//dosomething});//每秒检查一次网络setTimeout(function(){//CheckthenetworkcheckNetwork(function(data){//检查触发器,如果??满足条件,处理函数trigger.check();});},1000);js-trigger相关地址主页文档测试页
