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 相关文章推荐
DOM基础教程之事件类型
Jan 20 Javascript
详解Javascript中的Object对象
Feb 28 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
详解JavaScript中typeof与instanceof用法
Oct 24 Javascript
vue踩坑记录之数组定义和赋值问题
Mar 20 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
Vue实现Layui的集成方法步骤
Apr 10 Javascript
vue项目实现分页效果
Mar 24 Vue.js
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构造函数实例讲解
2013/11/13 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
python中sys.argv参数用法实例分析
2015/05/20 Python
深入浅析python定时杀进程
2016/06/06 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
十周年庆典策划方案
2014/06/03 职场文书
成本会计岗位职责
2015/02/03 职场文书
学困生转化工作总结
2015/08/13 职场文书
初二英语教学反思
2016/02/15 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
win10更新失败无限重启解决方法
2022/04/19 数码科技