我是靠谱客的博主 复杂水杯,最近开发中收集的这篇文章主要介绍异步循环和双层嵌套循环(性能优化nodejs从2.8m到28s),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

两步优化:
定位问题:该接口使用多次sql查询,并采用了async,另外在数据的处理中使用了map,forEach嵌套。
方案:
1/使用了bluebird来提升异步并发能力,替代原来的async请求。
2/数据处理确实无法通过优化数据结构减少嵌套,这里采用了for循环来替代map,forEach,虽然降低了代码的可读性,但是这里因为数据量比较大,两层循环的原因,确实能提升些效率。
weightData的length最大168471, totalGmvByEntityData的length最大17383,经过测试对比,两层循环的时候我采用了外大内小和外小内大,分别用时为17361ms和205540ms相差约12倍。

此处贴出双层循环处理数据部分。

fn(weightData, totalGmvByEntityData) {
			const weightLength = weightData.length;
	        const totalGmvByEntityLength = totalGmvByEntityData.length;
	        console.log(1111, new Date().getTime(), weightLength, totalGmvByEntityLength);  // 168471 17383
	        for (let i = 0; i < weightLength; i++) {
	            const gmvData = weightData[i];
	            let weight = 0;
	            for (let j = 0; j < totalGmvByEntityLength; j++) {
	                const totalGmvData = totalGmvByEntityData[j];
	                if (gmvData[3] === totalGmvData[1]) {
	                    weight = gmvData[0] / totalGmvData[0];
	                    if (isNaN(weight) || !isFinite(weight)) weight = 0;
	                }
	            }
	            gmvData[6] = weight;
	        }
	        console.log(2222, new Date().getTime());
	}

优化前:
在这里插入图片描述
优化后:
在这里插入图片描述

最后

以上就是复杂水杯为你收集整理的异步循环和双层嵌套循环(性能优化nodejs从2.8m到28s)的全部内容,希望文章能够帮你解决异步循环和双层嵌套循环(性能优化nodejs从2.8m到28s)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(115)

评论列表共有 0 条评论

立即
投稿
返回
顶部