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 对象的属性和方法4种不同的类型
Mar 19 Javascript
javascript instanceof,typeof的区别
Mar 24 Javascript
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
使用命令行工具npm新创建一个vue项目的方法
Dec 27 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
node.js基础知识汇总
Aug 25 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连接Oracle数据库
2006/10/09 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php读取excel文件的简单实例
2013/08/26 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
实例讲解PHP表单
2020/06/10 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
详解vue-cli3使用
2018/08/14 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
Python交互环境下实现输入代码
2018/06/22 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
python利用opencv保存、播放视频
2020/11/02 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
通报表扬范文
2015/01/17 职场文书
英语导游欢迎词
2015/09/30 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
python使用BeautifulSoup 解析HTML
2022/04/24 Python