在前端开发的过程中,如果没有注意限制和封锁经常会出现很多重复的ajax请求,导致服务器压力很大。今天小千就来给大家提供几个解决方案,看到就是赚到。

1、UI层面的拦截

当用户动了动发财的小手点击完按钮后,就立即禁用按钮, 并开启等待动画,如果收到服务器的成功响应返回后,再隐藏动画,一定要设置超时,时间不能太长,如果过长,用户会骂街的。

2、JS层面的封锁

(1) 暴力点击

如果用户连续暴力点击按钮,我们可以通过函数防抖来做,其实就是闭包里的setTimeout 与clearTimeout结合使用, 连续的点击会把上一次点击处理函数清掉,我们的 ajax请求会在最后一次点击后再发出去。

(2)多tab页快速切换

多个tab页 快速切换也是常见的场景,如果用户从tab1快速切换到tab2,再从tab2快速切换到tab1,不避免的同一个tab 要重复发起多次请求。

还有一个问题就是,在单页面应用中,切换tab后dom 结构销毁了,此时数据回来了,如果去操作了已经销毁的dom,那么控制台会报错。而在vue ,react 等不需要开发者手动操作的dom的框架,如果我们去修改状态,还会报出如下的警告信息,这就很难看了。

解决这个问题的思路就是abort掉上一个请求。XMLHttpRequest对象有abort方法,可以直接调用。

如果使用第三方的请求库的话,比如axios,我们可以为我们的请求创建一个cancel token ,在每个请求设置一个token,在页面切换, 或者组件销毁前,只需要通过source.cancel取消就好了,其实原理还是通过xhr的abort方法实现。

具体的代码以及流程可以参考如下:

不同的使用场景,我们可以灵活的组合以上的解决方案, 不知道这样做的话,是否能挽回服务器的心,我又想起了夕阳下的奔跑,那是我与服务器美好邂逅,也是我们逝去的青春......

本文来自千锋教育,转载请注明出处。

©著作权归作者所有:来自51CTO博客作者戏精程序媛的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 技术分享:Java多线程学习处理高并发问题
  2. 如何避免ajax重复请求?
  3. HTML、HTML5重难点
  4. 进程间通信
  5. Vivado软件使用之"下载配置"流程
  6. AWS 大数据实战 Lab3 - 数据可视化(四)
  7. Python开发技巧:scrapy-redis爬虫如何发送POST请求
  8. 异步多个请求的处理
  9. 一、简单学习Ajax的GET & POST请求

随机推荐

  1. Android--布局方式(LinearLayout)学习
  2. Android 数据存储(二) 文件的使用
  3. Android 笔试/面试,常见问题整理
  4. Android WebView实现选择本地图片拍照功
  5. Android属性动画ObjectAnimator源码简单
  6. Android开发者指南(8) ―― What is Andr
  7. 面试例题1:如何在android应用程序的窗口上
  8. Android studio MAC和window 个人常用快
  9. 在Android NDK 中使用STLport(译)
  10. Android 3.0 r1 API中文文档(106) ―― S