美文网首页
Batch Requests

Batch Requests

作者: liyinkan | 来源:发表于2015-09-24 23:01 被阅读743次

    今天听 sofish 分享了好多。感觉还是回来写一下这个比较好。
    我不知道在场多少人了解这个事情,至少我带去的小伙伴都是似懂非懂。
    正好好久不写技术东西,来了心情,那就不能浪费。
    为什么我没有现场讲呢?
    因为没图我只能说个杰宝啊。


    [合并请求] 这个需求来源点是:我们有太多的请求,影响性能,不如合并一起发送,减少 HTTP 请求数量。

    这里,请求分两类

    • 静态资源
    • 展现数据

    静态数据

    这个比较好处理,简单粗暴的方式就是

    • 编译的时候把多个 CSS 合并了
    • 编译的时候把多个 JS 合并了
    • 把以上两个放到 CDN 上
    • 文档加载合并后的文件后的文件

    展现数据

    异步请求一般用的是相对复杂的过程,这个过程中,需要前后端的配合。

    肯定不能是两个接口,分开的时候请求/aaa 和 /bbb,合并的时候请求/ccc,这也太2了。

    大致就是这样一个过程:

    br.png

    其实就做了四件事情

    • B 端的 Interceptor 拦截请求,分发结果。
    • S 端的 Filter 分发请求,拼装返回。

    约定数据结构

    请求大致会是这个样子

    "requests": [
      {
        "seq":"0",
        "api":"aaa",
        "data":"111"
      },{
        "seq":"1",
        "api":"bbb",
        "data":"222"
      }
    ]
    

    返回大致会是这个样子

    "responses": [
      {
        "seq":"0",
        "data":"oo"
      },{
        "seq":"1",
        "data":"xx"
      }
    ]
    

    拦截

    • 拦截所有请求,Hold 住
    • 第一个进来开始计时
    • 大致 20ms 内所有请求组成一个 Batch Request 发出去

    分发

    • 解析出哪些 api
    • 解析出对应 data
    • 扔给 Controller 去执行
    • Hold 住 Controller 结果

    拼装

    • Controller 都搞定以后,就是把结果拼装成要的样子……

    分发

    • 解析结果
    • 对应结果塞到对应 callback 里去,顺手转一下 scope

    整个过程对于前端和后端开发都是透明的。
    前端来看我发出去是一个一个的。
    后端来看我接收到的也是一个一个的。
    不足是,所有交互都会有差不多 20ms 的延迟。

    5年前我们就是这样做的。

    反正我是一个渣渣,哪里写错了,有本事你来咬我呀!

    相关文章

      网友评论

          本文标题:Batch Requests

          本文链接:https://www.haomeiwen.com/subject/xqtwcttx.html