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中大括号“{}”的多义性
Dec 02 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
Feb 25 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
Vue press 支持图片放大功能的实例代码
Nov 09 Javascript
微信小程序云开发之使用云数据库
May 17 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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一些有意思的小区别
2006/12/06 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
短信提示使用 特效
2007/01/19 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
计算机求职信
2013/12/01 职场文书
文明社区申报材料
2014/08/21 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
美容院管理规章制度
2015/08/05 职场文书