美文网首页
js处理浏览器并发请求数量的优化

js处理浏览器并发请求数量的优化

作者: 甘道夫老矣 | 来源:发表于2023-12-05 13:34 被阅读0次

假如循环调用接口,但是后端就不给你一个接口
一个方法是循环,一个是通过Promise.all实现

  async initFileData(): Promise<any> {
        try {
            var start = new Date().getTime()

            const res: any = await this.https.get(this.modulerPath + '/qygbFile/getFjflFz?geometryId=' + this.tbBasicInfo.id);
            if (res) {
                let arr: any = [];
                for (let i = 0; i < res.length; i++) {
                    const item = res[i];
                    let obj = {
                        "geometeryId": this.tbBasicInfo.id,
                        "fjfl": item.fjfl,
                        "ssfz": []
                    };
                    let obj2 = {
                        fjfl: item.fjfl,
                        ssfz: [],
                        children: [],
                    };
                    let res2 = await this.https.post(this.modulerPath + '/qygbFile/listByFjflFjfzTbId', obj);
                    if (res2 && res2.length > 0) {
                        obj2.children = res2;
                    }
                    arr.push(obj2)
                }
                if (arr.length > 0) {
                    arr.forEach((item: any) => {
                        if (item.fjfl === '实地拍摄') {
                            this.allChecked = true;
                            if (item.ssfz.length > 0) {
                                let ssfz: any = [];
                                item.ssfz.forEach((elm: any) => {
                                    let obj = { label: elm, value: elm, checked: false };
                                    ssfz.push(obj);
                                })
                                this.checkOptionsOne = ssfz;
                            } else {
                                this.checkOptionsOne = [];
                            }
                            if (item.children.length > 0) {
                                this.filesImgList = item.children;
                                this.imgActive = this.filesImgList[0];
                            }
                        }
                        // TODO
                        if (item.fjfl === '附件材料') {

                        }
                    })
                }
                console.log(arr)
            }
            var end = new Date().getTime();
            console.log('方法1用时', `${end - start}ms`)
        } catch (error: any) {
            console.log(error)
            if (error.message) {
                this.msg.error(error.message)
            }
        }
    }

    async run2(): Promise<any> {
        try {
            var start = new Date().getTime()
            const res = await this.https.get(this.modulerPath + '/qygbFile/getFjflFz?geometryId=' + this.tbBasicInfo.id);
            if (res) {
                // 先构造obj2的数组集合
                let obj2List = res.map((item: any) => ({
                    fjfl: item.fjfl,
                    ssfz: [],
                    children: [],
                }))
                // 先构造obj1的请求
                let childrenList = await Promise.all(res.map((item: any) => {
                    return this.https.post(this.modulerPath + '/qygbFile/listByFjflFjfzTbId', {
                        "geometeryId": this.tbBasicInfo.id,
                        "fjfl": item.fjfl,
                        "ssfz": []
                    });
                }))
                // 找出childrenList和obj2List的关联
                let childrenListMap: any = {}
                for (let i = 0; i < res.length; i++) {
                    const item = res[i];
                    childrenListMap[item.fjfl] = childrenList[i]
                }
                obj2List.forEach((el: any) => {
                    el.children = childrenListMap[el.fjfl] || []
                });
                console.log(obj2List)
            }
            var end = new Date().getTime();
            console.log('方法2用时', `${end - start}ms`)
        } catch (error: any) {
            console.log(error)
            if (error.message) {
                this.msg.error(error.message)
            }
        }
    }

相关文章

  • PHP高并发解决方案

    高并发解决方案案例 1、流量优化:防盗链处理2、前端优化:减少HTTP请求,启用浏览器缓存和文件压缩,cdn加速,...

  • 前端性能优化

    前端性能优化 1.网络请求 DNS 查询优化 减少请求域名数量 减少请求数 合并文件 css 合并 js Spri...

  • 问题记录 | 并发数、吞吐量、带宽

    并发数(Concurrency):同时处理的请求数。 吞吐量(Throughput):单位时间内处理请求的数量。 ...

  • 系统容量估算

    概念 QPS: 系统每秒中的请求数量并发数:单台服务器同时处理请求的数量响应时间: 请求开发到返回的处理时间 预...

  • 你用过的网站前端优化的技术有哪些?

    ① 浏览器访问优化: 减少HTTP请求数量:合并CSS、合并JavaScript、合并图片(CSS Sprite)...

  • 随手记

    高并发网站优化:1资源优化 静态资源 压缩 CDN js代码 css CDN 2,客户端限制减少请求 异步请...

  • 前端性能优化(2)

    TCP请求优化 尽量减少TCP的请求数,也就是减少HTTP的请求数量 资源合并,对于页面内的图片、css和js进行...

  • Tomcat优化

    基本思路 尽量缩短单个请求的处理时间 尽量可能多的并发处理请求 一定要做到能横向扩展 Tomcat的基本优化 合理...

  • Http2.0改进

    多路复用 HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大...

  • H5前端性能测试小结

    Http请求个数 同一个域名不同浏览器内核、不同版本浏览器,大部分并发请求数是6个; 优化方案: a.雪碧图:即C...

网友评论

      本文标题:js处理浏览器并发请求数量的优化

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