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 相关文章推荐
IE与FireFox中的childNodes区别
Oct 20 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
js实现简单计算器
Nov 22 Javascript
第一次动手实现bootstrap table分页效果
Sep 22 Javascript
原生js封装添加class,删除class的实例
Nov 06 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
vue-router动态设置页面title的实例讲解
Aug 30 Javascript
微信小程序websocket聊天室的实现示例代码
Feb 12 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
JavaScript计算出两个数的差值
Mar 19 Javascript
vue el-upload上传文件的示例代码
Dec 21 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
WordPress判断用户是否登录的代码
2011/03/17 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
Python 的 with 语句详解
2014/06/13 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
详解python单元测试框架unittest
2018/07/02 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
社团文化节邀请函
2014/01/10 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
党员教师一句话承诺
2014/05/30 职场文书
签约仪式策划方案
2014/06/02 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
小学运动会加油词
2015/07/18 职场文书
教师旷工检讨书
2015/08/15 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
导游词之山海关
2019/12/10 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL