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的面向对象(一)
Nov 09 Javascript
js GridView 实现自动计算操作代码
Mar 25 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
js对象与打印对象分析比较
Apr 23 Javascript
jquery高效反选具体实现
May 05 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
JavaScript中获取HTML元素值的三种方法
Jun 20 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 Javascript
vue flex 布局实现div均分自动换行的示例代码
Aug 05 Javascript
微信小程序实现购物车功能
Nov 18 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
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
jquery实现动态画圆
2014/12/04 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
vue之延时刷新实例
2019/11/14 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python适合人工智能的理由和优势
2019/06/28 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
什么是唯一索引
2015/07/05 面试题
Linux常见面试题
2013/03/18 面试题
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
学校安全检查制度
2014/01/27 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android