一次优化web项目的经历记录

这段时间以来的总结与反思

前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程。开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来,写的东西越来越不严谨,各种低级错误频出,早该停下总结并巩固一下了,但出于一些原因一直没付诸于行,终于,烫到手了


第一章:50分钟打不开的一个网页


事故现场为互联网上的一个角落

我负责的一个社会实践微足迹项目的管理员端登陆页面(准确的说,我负责的部分是后端+用户h5、微信前端页面,管理员端页面是交由X负责,我提供数据),接到反馈说,校级管理员在登录页卡了50min(从21:00到21:50)。亲测结果虽然没那么夸张,但也用了将近3分钟(考虑到管理员网络状况、失去耐心刷新页面,以及”反正是网页卡住了我先喝杯咖啡”等动作,他花了50min才打开网页是可信的)。如此还了得,不想继续打喷嚏就赶紧修复


为什么访问这么慢呢?瓶颈在哪儿?

根据chrome开发者工具的Network日志来看,其实登录接口(login)在一瞬间就完成了(700ms),主要是卡在了拉取信息的接口(overview)。这个接口原本是要返回一个信息概览的,但X为了简tou单lan,要求在这里就拿到所有会用到的数据,导致单接口要处理的任务较多。但就算如此也不应该会卡这么久,显然是什么地方设计错了。


第一想到的当然是数据库

众所周知,数据库连接是很耗时的,一般来说大部分项目的瓶颈都发生在数据库上。但我当初创建数据库的时候我是做过精心设计的,借助sqlalchemy做orm(忘了说了,这次后端用的python来写),合理的使用foreignKey与relationship,其实已经是很优的做法了,虽然后来发现仍然有可优化的空间,但那绝不是造成如此巨大耗时的原因。

话虽是这么说,但当事实(141s的延时)放在眼前时,很难有这么大的自信不去怀疑自己,为此做了很多无用功,耽误了不少时间。不过在boss兼学长兼老师的L帮助下,虽然没解决问题但确实加深了对原生SQL语句的理解运用。

(就个人来说,数据库比较复杂时通常就直接用orm了,所以说更大的收获其实是让我更加认识到了sqlalchemy背后所做的工作到底为我省了多少事情)


这样的话就麻烦了

在折腾了半天后醒悟到不是数据库的瓶颈后,我意识到这次的问题可能会有些麻烦了,不是那种能一眼发现恍然大悟进而分分钟搞定的bug。如果不去实际的做点什么,简单的分析代码猜测原因只是在浪费时间。

这里不得不提的是,Docker确实是很方便的技术,但毕竟使得代码部署多了一层容器,一定程度上确实会给修复bug调整代码造成一些麻烦,你不得不重构你的镜像,重启你的容器(除非你用volume把代码挂载到宿主机上,但这不就失去了一键交付、快速部署的意义了吗,我通常只在开发环境中这么做)。

嘛,比起它的好处来说这也不算什么,我只是想说,如果你只是做个很小的玩具,它负责测试你的想法,实验你的灵感,而你经常会随意修改它并且不打算集群部署发布或者交付给其它人使用,那么你大概不需要Docker。


好吧,那么下面我就得调试我的代码,监控它的运行并找出耗时瓶颈

下面的内容才是重点,是我一定要记录下这次经历的原因所在,我们明天再继续

一次优化web项目的经历记录(一)的更多相关文章

  1. 一次优化web项目的经历记录(三)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...

  2. 一次优化web项目的经历记录(二)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...

  3. 用maven工具管理web项目的错误记录:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException

    运行异常报告日志: 严重: Context initialization failedorg.springframework.beans.factory.xml.XmlBeanDefinitionSt ...

  4. Java Web项目搭建过程记录(struts2)

    开发工具:eclipse 搭建环境:jdk1.7   tomcat 8.0 基础的java开发环境搭建过程不再赘述,下面从打开eclipse 之后的操作开始 第一步: 创建项目,File -> ...

  5. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  6. 记录一个奇怪的异常,无法还原此异常。 普通的Maven Java Web 项目

    项目 : 普通的Maven Java Web 项目 操作记录: 使用 Maven 构建项目,指令 tomcat7:run 无异常 但使用 eclipse 的 tomcat 运行项目,报此异常. 后面从 ...

  7. 记录web项目部署到阿里云服务器步骤

    (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshel ...

  8. 【问题记录】eclipse启动web项目时,spring会初始化两次

    背景:一个tomcat,一个eclipse,一个SSM框架的web项目.在eclipse中新建tomcat服务器,默认配置,然后在服务器配置中将Server Locations改成Use Tomcat ...

  9. 记录-Intellij Idea下以Tomcat运行Web项目时的位置问题

    今天本来准备把原来的一个Web项目导入到Idea下,之前这个项目是用eclipse写的,容器用的tomcat,首先导入前我把一些没用的配置文件都给删了,像什么.eclipse..setting什么的, ...

随机推荐

  1. 我的iphone6退货之路

    开篇 匆匆这一年又快结束了,眼看年关将近,老婆的生日也快到了,正打算给老婆买个礼物,由于现在老婆用的手机是公司的工程机,而且还是低端产品,所以一直想给老婆改善改善,也算是对老婆这一年来辛苦的默默的支持 ...

  2. [BZOJ 2049] [Sdoi2008] Cave 洞穴勘测 【LCT】

    题目链接:BZOJ - 2049 题目分析 LCT的基本模型,包括 Link ,Cut 操作和判断两个点是否在同一棵树内. Link(x, y) : Make_Root(x); Splay(x); F ...

  3. GemFire

    一.GemFire是什么?   如果你了解Redis或memCached,那么恭喜,你很快就能理解GemFire是什么,没错,你可以把它理解为一个增强版的Redis,具体在哪些方面增强,我们日后慢慢聊 ...

  4. 【UVA11294】Wedding (2-SAT)

    题意: 有N-1对夫妻参加一个婚宴,所有人都坐在一个长长的餐桌左侧或者右侧,新郎和新娘面做面坐在桌子的两侧.由于新娘的头饰很复杂,她无法看到和她坐在同一侧餐桌的人,只能看到对面餐桌的人.任意一对夫妻不 ...

  5. SQL 能做什么?

    SQL 能做什么? SQL 面向数据库执行查询 SQL 可从数据库取回数据 SQL 可在数据库中插入新的记录 SQL 可更新数据库中的数据 SQL 可从数据库删除记录 SQL 可创建新数据库 SQL ...

  6. 分析WordPress主题结构是如何架构的?

    利用强大的技术,可以把基于WordPress的网站做成各种各样的形式,这除了要求WordPress主题开发人员精通HTML,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架.下 ...

  7. Maven学习(2) - Maven构建多模块Java工程

    概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...

  8. XP与Win2003下网站配置

    一. 安装.net 4.0 1. 双击打开文件dotNetFx40_Full_x86_x64.exe.如图4.1 所示 (图4.1) 2. 勾选[我已阅读并结束许可条款],点击[安装]按钮.如图4.2 ...

  9. Unity Flow distort of screen

    Shader "ScreenWater" {Properties { _MainTex ("Base (RGB)", 2D) = "white&quo ...

  10. FZYZOJ-1144 恶魔城

    P1144 -- 恶魔城 时间限制:1000MS      内存限制:131072KB 状态:Accepted      标签:    图论-最短路   二分   无 Description 上帝需要 ...