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中Function函数与Object对象的关系
Dec 17 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
JS获取屏幕高度的简单实现代码
May 24 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
JS作用域深度解析
Dec 29 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
Node在Controller层进行数据校验的过程详解
Aug 28 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
js中this的用法实例分析
2015/01/10 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
学前教育毕业生自荐信
2013/10/29 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
十佳青年事迹材料
2014/08/21 职场文书
学习型党组织心得体会
2014/09/12 职场文书
1000字打架检讨书
2014/11/03 职场文书
求职自我评价范文
2015/03/09 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
使用numpy nonzero 找出非0元素
2021/05/14 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js