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中的History历史对象
Jan 16 Javascript
javascript 支持ie和firefox杰奇翻页函数
Jul 22 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
Oct 14 Javascript
JavaScript 数组some()和filter()的用法及区别
May 20 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
浅析Visual Studio Code断点调试Vue
Feb 27 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 Javascript
微信小程序云开发修改云数据库中的数据方法
May 18 Javascript
jQuery-App输入框实现实时搜索
Nov 19 jQuery
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+DBM的同学录程序(5)
2006/10/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Move.js入门
2017/02/08 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
详解python程序中的多任务
2020/09/16 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
党章学习思想汇报
2014/01/14 职场文书
药店采购员岗位职责
2014/09/30 职场文书
参观邀请函范文
2015/02/02 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis