node省市区三级数据性能测评实例分析

 更新时间:2019年11月06日 10:01:24   作者:苍青浪  
这篇文章主要介绍了node省市区三级数据性能,结合具体实例形式评测分析了node省市区三级数据的实现、改进方法与运行效率,需要的朋友可以参考下

本文实例讲述了node省市区三级数据性能测评。分享给大家供大家参考,具体如下:

闲来无事,测试下node和egg

首先是数据库,大概长这样

然后是代码

'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;

执行时间:

接着改进

'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;

本次优化结果

可以看到,在组装数据的过程中,时间缩短了近20倍!

后续版本继续优化,也欢迎有相关方面经验的大神留言探讨,给出更好的方案。

希望本文所述对大家node.js程序设计有所帮助。

相关文章

  • 使用Express+Node.js对mysql进行增改查操作 

    使用Express+Node.js对mysql进行增改查操作 

    这篇文章主要介绍了使用Express+Node.js对mysql进行增改查操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Node.js实现断点续传

    Node.js实现断点续传

    上传图片、Excel等,毕竟几M的大小可以很快就上传到服务器。 针对于上传视频等大文件几百M或者几G的大小,就需要等待比较长的时间。这就产生了对应的解决方法,对于大文件上传时的暂停、断网、网络较差的情况下, 使用切片+断点续传就能够很好的应对上述的情况
    2021-06-06
  • async/await优雅的错误处理方法总结

    async/await优雅的错误处理方法总结

    这篇文章主要给大家介绍了关于async/await优雅的错误处理方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • NodeJs+MySQL实现注册登录功能

    NodeJs+MySQL实现注册登录功能

    这篇文章主要为大家详细介绍了NodeJs+MySQL实现注册登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • nodemon实现Typescript项目热更新的示例代码

    nodemon实现Typescript项目热更新的示例代码

    这篇文章主要介绍了nodemon实现Typescript项目热更新的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Node.js连接MongoDB数据库产生的问题

    Node.js连接MongoDB数据库产生的问题

    Node.js是使用JavaScript 编写的可以运行在服务端的JS语言。node.js和mongodb碰撞会产生一系列问题,下面通过本文给大家分享Node.js连接MongoDB数据库,需要的的朋友参考下
    2017-02-02
  • 基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践

    基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践

    关于前后端分享的思考,我们已经有五篇文章阐述思路与设计。本文介绍淘宝网收藏夹将 Node.js 引入传统技术栈的具体实践。
    2014-09-09
  • Node.js如何提取文件中的中文字符

    Node.js如何提取文件中的中文字符

    这篇文章主要介绍了Node.js如何提取文件中的中文字符,本文介绍了在Node.js开发中如何使用代码提取文件中的中文字符,帮助开发者更好地处理中文文本数据,提高开发效率
    2023-05-05
  • 解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题

    解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题

    这篇文章主要介绍了解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306报错的相关资料,文中将问题描述的很清楚,解决的方法也介绍的很完整,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • 使用Node.js实现一个多人游戏服务器引擎

    使用Node.js实现一个多人游戏服务器引擎

    这篇文章主要给大家介绍了关于如何使用Node.js实现一个多人游戏服务器引擎的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论