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 相关文章推荐
Js基础学习资料
Nov 23 Javascript
jquery $.each() 使用小探
Aug 23 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
May 24 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
Aug 01 Javascript
Openlayers实现距离面积测量
Sep 28 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数据集构建JSON格式及新数组的方法
2012/11/07 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
jQuery chili图片远处放大插件
2009/11/30 Javascript
Script的加载方法小结
2011/01/12 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue组件的写法汇总
2018/04/12 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
Python入门篇之函数
2014/10/20 Python
Python语言描述随机梯度下降法
2018/01/04 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
python调用自定义函数的实例操作
2019/06/26 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
java字符串格式化输出实例讲解
2021/01/06 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
护士感人事迹
2014/05/01 职场文书
质量负责人岗位职责
2015/02/15 职场文书
党员身份证明材料
2015/06/19 职场文书
中秋节感想
2015/08/10 职场文书