前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EngineerCMS优化算法从2.71s到38ms

EngineerCMS优化算法从2.71s到38ms

作者头像
hotqin888
发布2018-09-11 14:58:14
4530
发布2018-09-11 14:58:14
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334441

               如果一个项目的目录齐全的话,约4320个目录。比如阶段划分上,6个阶段,下级专业划分,9个专业,再下级文档类型方面划分,约8种,再下级,建筑物分类,约10种,连乘下来就是4320个,这么多数据构造成一个树状目录,即嵌套的json数据,不能通过频繁的数据库查询来做。比如开始的时候,代码是通过查询数据库来判断是否有下级: 
//递归构造项目树状目录
func walk(id int64, node *FileNode) {
 //列出当前id下子节点,不要列出孙节点……
    files, err := models.GetProjSonbyId(id)
 if err != nil {
        beego.Error(err)
    }
 // 遍历目录
 for _, proj := range files {
        id := proj.Id
        title := proj.Title
        code := proj.Code
 // 将当前名和id作为子节点添加到目录下
        child := FileNode{id, title, code, []*FileNode{}}
        node.FileNodes = append(node.FileNodes, &child)
 // 如果遍历的当前节点下还有节点,则进入该节点进行递归
 if models.Projhasson(proj.Id) {
            walk(proj.Id, &child)
        }
    }
 return
}

 里面使用了2个数据库查询,速度见下图:

这段代码处理4320个数据花了2.71s,导致整个页面响应时间达到5.23s.

优化思路,一次性把所有数据都取出来,利用程序循环处理,而不是频繁查询数据库。

//递归构造项目树状目录
func maketreejson(cates, categories []*models.Project, node *FileNode) {
 // 遍历目录
 for _, proj := range cates {
        id := proj.Id
        title := proj.Title
        code := proj.Code
 // 将当前名和id作为子节点添加到目录下
        child := FileNode{id, title, code, []*FileNode{}}
        node.FileNodes = append(node.FileNodes, &child)
        slice := getsons(id, categories)
 // 如果遍历的当前节点下还有节点,则进入该节点进行递归
 if len(slice) > 0 {
            maketreejson(slice, categories, &child)
        }
    }
 return
}
//取得数组的下级目录
func getsons(idNum int64, categories []*models.Project) (slice []*models.Project) {
 // slice := make([]*models.Project, 0)
 for _, k := range categories {
 if k.ParentId == idNum {
            slice = append(slice, k)
        }
    }
 return slice
}

优化后就没有查询数据库了。

效果如下:

从2.71s降到38ms,但是页面响应时间还是超过了0.5s,达到1.03s。猜测应该是treeview加载这个json数据的时间吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年02月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档