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 相关文章推荐
读取input:file的路径并显示本地图片的方法
Sep 23 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
Three.js入门之hello world以及如何绘制线
Sep 25 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
浅谈Angular6的服务和依赖注入
Jun 27 Javascript
Angular脚手架开发的实现步骤
Apr 09 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
Jun 26 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
提问的智慧(2)
2006/10/09 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
学习Node.js模块机制
2016/10/17 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
python改变日志(logging)存放位置的示例
2014/03/27 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
财务简历的自我评价
2014/03/05 职场文书
工程项目建议书范文
2014/03/12 职场文书
处级干部考察材料
2014/12/24 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
杨善洲电影观后感
2015/06/04 职场文书
实习证明模板
2015/06/16 职场文书
新娘婚礼致辞
2015/07/27 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
MySQL GTID复制的具体使用
2022/05/20 MySQL