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 new关键字的玄机 以及其它
Aug 25 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
jQuery动画与特效详解
Feb 01 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
Spring Boot/VUE中路由传递参数的实现代码
Mar 02 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
vue导航栏部分的动态渲染实例
Nov 01 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
ThinkPHP分页实例
2014/10/15 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
Bootstrap每天必学之日期控制
2016/03/07 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
js判断节假日实例代码
2017/12/27 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
室内设计专业个人的自我评价
2013/10/19 职场文书
行政主管职责范本
2014/03/07 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
HAM-2000摩机图
2021/04/22 无线电
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
SQL中的三种去重方法小结
2021/11/01 SQL Server