IT序号网

node省市区三级数据性能测评

leader 2021年05月25日 编程语言 315 0

闲来无事,测试下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倍!

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!