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 相关文章推荐
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
jquery 动态创建元素的方式介绍及应用
Apr 21 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
理解javascript async的用法
Aug 22 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
vue设置默认首页的操作
Aug 12 Javascript
JS遍历树层级关系实现原理解析
Aug 31 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
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
php如何调用webservice应用介绍
2012/11/24 PHP
深入浅出php socket编程
2015/05/13 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
Python多进程编程技术实例分析
2014/09/16 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
python处理按钮消息的实例详解
2017/07/11 Python
Django与JS交互的示例代码
2017/08/23 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python统计单词出现的次数
2018/04/04 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
德国高性价比网上药店:medpex
2017/07/09 全球购物
毕业典礼主持词大全
2014/03/26 职场文书
学雷锋主题班会教案
2015/08/13 职场文书