zoukankan      html  css  js  c++  java
  • 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倍!

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

  • 相关阅读:
    如何提高工作效率,重复利用时间
    好记性不如烂笔头
    如何应对面试中关于“测试框架”的问题
    通宵修复BUG的思考
    工作方法的思考
    别认为那是一件简单的事情
    开发人员需要熟悉缺陷管理办法
    不了解系统功能的思考
    如何布置任务
    事事有回音
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/11595569.html
Copyright © 2011-2022 走看看