闲来无事,测试下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省市区三级数据性能测评的更多相关文章

  1. 省市区三级数据的MYSQL内容

    省市区三级数据的MYSQL内容 省: /* Navicat MySQL Data Transfer Source Server : rm-2ze0lz594rof5nn72.mysql.rds.ali ...

  2. jquery省市区三级联动(数据来源国家统计局官网)内附源码下载

    很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + JSON,无数据库,纯JS代码,无加密,无压缩,可直接使用在任何项 ...

  3. WheelView实现省市区三级联动(数据库实现版本号附带完整SQL及数据)

    近期在实现收货地址功能,用到了省市区三级联动效果,网上找到一般都是xml或json.数据源陈旧改动麻烦.改动了一下使用数据库方式实现了一下 数据源解决.因为数据量比較大通过初始化批量运行SQL的方式不 ...

  4. javascript 省市区三级联动 附: json数据

    html: <label> <span>购买地址</span> <select name="PurchaseProvince" style ...

  5. 中国省市区json数据 三级联动

    <label> <span>购买地址</span> <select name="PurchaseProvince" style=" ...

  6. java的JCombobox实现中国省市区三级联动

    源代码下载:点击下载源代码 用xml存储中国各大城市的数据. xml数据太多了就不贴上了,贴个图片: 要解释xml,添加了一个jdom.jar,上面的源代码下载里面有. 解释xml的类: packag ...

  7. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  8. 谷歌性能测评工具lighthouse使用

    1.谷歌插件lighthouse的基本介绍 Lighthouse 是一个网站性能测评工具, 它是 Google Chrome 推出的一个开源自动化工具,能够对 PWA 和网页多方面的效果指标进行评测, ...

  9. jQuery省市区三级联动插件

    体验效果:http://hovertree.com/texiao/bootstrap/4/支持PC和手机移动端. 手机扫描二维码体验效果: 代码如下: <!DOCTYPE html> &l ...

随机推荐

  1. flutter_screenutil

    import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; ...

  2. mybatis 变更xml文件目录

    mybatis的xml默认读取的是resources目录,这个目录是可以变化的.我习惯于将mapper文件和xml放到一起或相邻目录下. 如图: 具体操作: 以mybatis-plus为例 boots ...

  3. CI框架结合jQuery实现上传多张图片即时显示

    一.Html代码如下: <tr> <td class="txt_r"><span class="orange">* < ...

  4. JavaWeb 之 三层架构:软件设计架构

    界面层(表示层):用户看的得界面.用户可以通过界面上的组件和服务器进行交互. 业务逻辑层:处理业务逻辑的. 数据访问层:操作数据存储文件.

  5. Java基础 StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 首先看下面的例子 public sta ...

  6. Android canvas.save()与canvas.restore()的使用总结

    含义canvas.save(); 画布将当前的状态保存canvas.restore(); 画布取出原来所保存的状态使用 canvas.save();与canvas.restore();一般结合使用,. ...

  7. linux搭建stm32开发环境

    下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 复制文件 将STM32F10x_StdPeriph_Li ...

  8. WPF应用打包流程

    1,安装工程模板插件Microsoft Visual Studio Installer Projects https://marketplace.visualstudio.com/items?item ...

  9. thrift中的概念

    Thrift的网络栈 Apache Thrift的网络栈的简单表示如下: +-------------------------------------------+ | Server | | (sin ...

  10. HTML&CSS基础-外部样式表

    HTML&CSS基础-外部样式表 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.如下图所示,有2个文件 p { color:pink; font-size:40px; ...