node省市区三级数据性能测评实例分析


Posted in Javascript onNovember 06, 2019

本文实例讲述了node省市区三级数据性能测评。分享给大家供大家参考,具体如下:

闲来无事,测试下node和egg

首先是数据库,大概长这样

node省市区三级数据性能测评实例分析

然后是代码

'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
 async index() {
  const { ctx } = this;
  ctx.body = 'hi, egg';
 }
 async city() {
  const { ctx } = this;
  console.time("sql")
  const provinces = await this.app.mysql.select('provinces')
  const citys = await this.app.mysql.select('cities')
  const areas = await this.app.mysql.select('areas')
  console.timeEnd("sql")
  console.time('cal')
  provinces.forEach(province => {
   let provinceid = province.provinceid
   province.children = []
   citys.forEach(city => {
    city.children = []
    if (city.provinceid === provinceid) {
     province.children.push(city)
    }
    let cityid = city.cityid
    areas.forEach(area => {
     if (area.cityid === cityid) {
      city.children.push(area)
     }
    })
   })
  })
  console.timeEnd('cal')
  const result = {
   status: 1,
   data: provinces,
  }
  ctx.body = result;
 }
}
module.exports = HomeController;

执行时间:

node省市区三级数据性能测评实例分析

接着改进

'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
 async index() {
  const { ctx } = this;
  ctx.body = 'hi, egg';
 }
 async city() {
  const { ctx } = this;
  console.time("sql")
  let provinces = await this.app.mysql.select('provinces')
  let citys = await this.app.mysql.select('cities')
  let areas = await this.app.mysql.select('areas')
  console.timeEnd("sql")
  console.time('cal')
  for (let i = 0, len = citys.length; i < len; i++) {
   let city = citys[i]
   city.children = []
   let cityid = city.cityid
   for (let j = 0, len1 = areas.length; j < len1; j++) {
    let area = areas[j]
    if (area.cityid === cityid) {
     city.children.push(areas.splice(j, 1)[0])
     len1--
     j--
    }
   }
  }
  provinces.forEach(province => {
   let provinceid = province.provinceid
   province.children = []
   for (let i = 0, len = citys.length; i < len; i++) {
    let city = citys[i]
    if (city.provinceid === provinceid) {
     province.children.push(city)
     citys.splice(i, 1)
     len--
     i--
    }
   }
  })
  console.timeEnd('cal')
  const result = {
   status: 1,
   data: provinces,
  }
  ctx.body = result;
 }
}
module.exports = HomeController;

本次优化结果

node省市区三级数据性能测评实例分析

可以看到,在组装数据的过程中,时间缩短了近20倍!

node省市区三级数据性能测评实例分析

后续版本继续优化,也欢迎有相关方面经验的大神留言探讨,给出更好的方案。

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
Chrome扩展页面动态绑定JS事件提示错误
Feb 11 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
微信JSSDK上传图片
Aug 23 Javascript
JavaScript实现简单的日历效果
Sep 25 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
JavaScript中创建原子的方法总结
Aug 26 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
vue.js实现只能输入数字的输入框
Oct 19 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 Javascript
vue计算属性无法监听到数组内部变化的解决方案
Nov 06 #Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 #Javascript
vuex state中的数组变化监听实例
Nov 06 #Javascript
element的el-table中记录滚动条位置的示例代码
Nov 06 #Javascript
webpack是如何实现模块化加载的方法
Nov 06 #Javascript
node读写Excel操作实例分析
Nov 06 #Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 06 #Javascript
You might like
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
js同时按下两个方向键
2007/12/01 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
django的登录注册系统的示例代码
2018/05/14 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
python try...finally...的实现方法
2020/11/25 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
后勤人员岗位职责
2013/12/17 职场文书
读书心得体会
2013/12/28 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
超市督导岗位职责
2015/04/10 职场文书
教师理论学习心得体会
2016/01/21 职场文书
多人股份制合作协议书
2016/03/19 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技