Three provincial urban node performance evaluation data

Nothing else, the test node and egg

The first is a database, probably a long way

 

 

Then the code

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

 

execution time:

 

 

 

Next improvements

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

The optimization results

 

 It can be seen in the process of assembling data, time by nearly 20 times!

 

 

Subsequent versions will continue to optimize, and welcome to the relevant aspects of the experience of the great God message investigate, give a better solution.

 

Guess you like

Origin www.cnblogs.com/cangqinglang/p/11595569.html