javascript - 求这道笔试题的思路和写法?
天蓬老师
天蓬老师 2017-04-11 13:05:12
0
2
338

产品规模越来越大,前端交互越来越复杂,会导致请求越来越多。请使用javascript或者其方言, 完成一个 XHR proxy,用于代理异步请求:

  • 保持请求发起时间点,分布均匀,杜绝同一时间点多个请求一起发送

  • 可以限制请求频率,如最多 一秒5个请求

  • 可以限制最大连接数,如同时在线请求最多为 10个

  • 保证请求与回调按照顺序执行,如,一秒内做了请求 A,B,C,D,E,那么其callback执行也需按 照A,B,C,D,E的顺序执行,以保证依赖

  • 兼容移动端

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
Peter_Zhu

一些思路:

  1. 可以采用循环定时器和令牌池依序处理请求,从而实现 分布均匀、请求频率限制和最大连接数等限制
    维护一个请求队列,队列是先进先出

定时器定时轮训令牌池,如果还存在令牌,则取出1个令牌,把执行请求队列中第一个,以致令牌池为空,则开始空循环,其中的请求频率是定时器间隔的倒数,令牌池的大小可以参考最大连接数。

  1. 对于回调依序执行,其实也是处理一个回调执行池,和维护一个头指针,并且在前面请求的时候传入调用id,比如从0开始的计数,所有的回调都不直接执行,而是压入回调执行池中,并触发一次遍历比较(因为池的大小受前面令牌池限制,所以遍历成本不高),然后比较头指针,如果回调id和头以致则执行,然后头指针自增,再遍历比较,直到没有需要执行的为止,这时就等待新的回调压入池。

  2. 这样的处理不区分pc和移动端的,可以纯javascript实现。

大家讲道理

保持请求发起时间点,分布均匀,杜绝同一时间点多个请求一起发送

前提不成立,同一时间点有且最多只能有一个请求发送,JS执行是单线程。

可以限制请求频率,如最多一秒5个请求。
可以限制最大连接数,如同时在线请求最多为 10个
保证请求与回调按照顺序执行,如,一秒内做了请求 A,B,C,D,E,那么其callback执行也需按 照A,B,C,D,E的顺序执行,以保证依赖

说下思路:首先设置一个events数组,以及一个变量maxLinkNum最大连接数。events数组中的每个元素存储一个与请求相关的信息(主要是请求唯一标识,回调函数,当前状态:1.初始状态(默认值)。2.请求已完成。3.等待状态。)。数组的长度与maxLinkNum比较即可限制最大连接数。然后先记录一次时间,按照请求被加入的顺序,依次调用AJAX,调用AJAX完毕后再记录一次时间。判断时间差即可限制请求频率。在每个AJAX的回调中先将自身状态置为2。然后通过唯一标识找到events中位于当前请求之前的那些请求,判断他们的状态,如果为1,continue。如果为2,则将自身状态置为3。然后再循环一次数组开始到当前请求,依次调用状态为3的回调并在events清除。即可保证请求与回调按照顺序执行。

最后,社区存在的目的是互相学习,共同进步。而不是成为某些人逃避思考的温床。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!