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 相关文章推荐
关于flash遮盖div浮动层的解决方法
Jul 17 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
javascript中clone对象详解
Dec 03 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
Sep 19 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
JS验证字符串功能
Feb 22 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
Aug 03 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
vue props传值失败 输出undefined的解决方法
Sep 11 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
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
JavaScript类库D
2010/10/24 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
pyramid配置session的方法教程
2013/11/27 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python学生信息管理系统(完整版)
2020/04/05 Python
python os.fork() 循环输出方法
2019/08/08 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
办公室前台岗位职责范本
2013/12/10 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
sql注入教程之类型以及提交注入
2021/08/02 MySQL