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 相关文章推荐
jquery关于图形报表的运用实现代码
Jan 06 Javascript
jquery 构造函数在表单提交过程中修改数据
May 25 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 Javascript
vue动态配置模板 'component is'代码
Jul 04 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
vue框架中props的typescript用法详解
Feb 17 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
PHP微信支付实例解析
2016/07/22 PHP
javascript 写类方式之一
2009/07/05 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
js实现滚动条自动滚动
2020/12/13 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
酒店开业庆典主持词
2014/03/21 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
学籍证明模板
2014/11/21 职场文书
学校实习推荐信
2015/03/27 职场文书
通知范文怎么写
2015/04/16 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
详解Redis瘦身指南
2021/05/26 Redis