闲来无事,测试下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. 基于windows平台搭建elasticsearch 补充

    https://www.cnblogs.com/skychen1218/p/8108860.html 参考此大神写的内容,感谢感谢. 不过 好像漏掉了一块内容. 导致出现问题 连接不上的问题.后来修改 ...

  2. html解决空格显示问题

    在前端里面,大家都知道,html中输入空格或换行是识别不了是空格的,但是有时候需要实现,那么该如何解决呢?主要有以下几个方面: 1:常用的转义:  2:使用全角拼音,然后输入空格也可实现 3:用标签 ...

  3. FreeRTOS软件定时器

    API函数 //创建 TimerHandle_t xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriod ...

  4. Solr字段类型

    一.一般属性 1.name fieldType的名称.该值用于字段定义中的类型属性,强烈建议名称仅包含字母数字和下划线,不能以数字开头[非强制]. 2.class 用于存储和索引此类型数据的类名.可以 ...

  5. Gitlab 重置 root 密码

    要重置root密码,请先使用root权限登录服务器.使用以下命令启动Ruby on Rails控制台: gitlab-rails console production 等到控制台加载完毕,您可以通过搜 ...

  6. 浅谈HTTP中Get与Post的区别【转】

    转自http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html#commentform 感谢LZ分享 Http定义了与服务器交互的不同方法 ...

  7. 查看zookeeper版本

    命令 echo stat|nc localhost 2181 zookeeper@kafka-zookeeper-0:/$ echo stat|nc localhost 2181 Zookeeper ...

  8. docker安装mysql5.6(win10家庭版)

    闲话不多说,打开之前已经安装好的客户端Docker Quickstart Terminal,安装方法请看上一篇,链接地址:https://www.cnblogs.com/jimmyshan-study ...

  9. Principle如何制作动效设计?简单易学的Principle动效设计教程

    Principle for Mac是一款新开发的交互设计软件.相比 Pixate 更容易上手,界面类似 Sketch 等做图软件,思路有点像用 Keynote 做动画,更「可视化」一些. 如果您还没有 ...

  10. 计算机网络基础之TCP/IP 协议栈

    计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...