一次优化web项目的经历记录(一)
一次优化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项目的经历记录(一)的更多相关文章
- 一次优化web项目的经历记录(三)
一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...
- 一次优化web项目的经历记录(二)
一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程. 开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来 ...
- 用maven工具管理web项目的错误记录:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException
运行异常报告日志: 严重: Context initialization failedorg.springframework.beans.factory.xml.XmlBeanDefinitionSt ...
- Java Web项目搭建过程记录(struts2)
开发工具:eclipse 搭建环境:jdk1.7 tomcat 8.0 基础的java开发环境搭建过程不再赘述,下面从打开eclipse 之后的操作开始 第一步: 创建项目,File -> ...
- asp.net Web项目中使用Log4Net进行错误日志记录
使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...
- 记录一个奇怪的异常,无法还原此异常。 普通的Maven Java Web 项目
项目 : 普通的Maven Java Web 项目 操作记录: 使用 Maven 构建项目,指令 tomcat7:run 无异常 但使用 eclipse 的 tomcat 运行项目,报此异常. 后面从 ...
- 记录web项目部署到阿里云服务器步骤
(使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshel ...
- 【问题记录】eclipse启动web项目时,spring会初始化两次
背景:一个tomcat,一个eclipse,一个SSM框架的web项目.在eclipse中新建tomcat服务器,默认配置,然后在服务器配置中将Server Locations改成Use Tomcat ...
- 记录-Intellij Idea下以Tomcat运行Web项目时的位置问题
今天本来准备把原来的一个Web项目导入到Idea下,之前这个项目是用eclipse写的,容器用的tomcat,首先导入前我把一些没用的配置文件都给删了,像什么.eclipse..setting什么的, ...
随机推荐
- vc2010配置opencv2.4.4库(图文 转)
VC 2010下安装OpenCV2.4.4 说明: 安装平台:32位XP,VS2010: OpenCV 2.4.4不支持VC 6.0: 网上有很多用CMake编译OpenCV的安装教程,这 ...
- python使用__future__
Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了.要“试用”某一新的特性,就可以通过导入__future__模块的某些功能来实现. 例如,Python 2.7的整数 ...
- Android 如何自定义EditText 下划线?
项目要求: 笔者曾经做过一个项目,其中登录界面的交互令人印象深刻.交互设计师给出了一个非常作的设计,要求做出包含根据情况可变色的下划线,左侧有可变图标,右侧有可变删除标志的输入框,如图 记录制作过程: ...
- Github、Jekyll 搭建及优化静态博客方法指南
尝试自己写 Blog 的人,一般会经历三个阶段. 第一阶段,刚接触 Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉 ...
- Android开源项目发现---TextView,Button篇(持续更新)
android-flowtextview 文字自动环绕其他View的Layout 项目地址:https://code.google.com/p/android-flowtextview/ 效果图:ht ...
- hdu 1042 N!(高精度乘法 + 缩进)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...
- Java多线程(四)之ConcurrentSkipListMap深入分析
一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...
- 【转】Linux下svn的常用工作流程
原文网址:http://www.cnblogs.com/cobbliu/archive/2011/07/08/2389011.html 上篇文章在ubuntu和redhat5.5上搭建好了svnser ...
- 裸机编程与OS环境编程的有关思考
这里的所谓的裸机编程指的是为“无OS支持的硬件系统编程”,而实际的编程工作肯定需要一个环境,通常这样的情况中,编程和编译的环境叫做“宿主机”,最终的程序在“目标机”上运行(交叉编译).而OS环境编程指 ...
- shiro能做什么,做j2ee时候要考虑什么
转载: http://jinnianshilongnian.iteye.com/blog/2018398, 感谢原作者 <跟我学Shiro>PDF完结版下载 博客分类: 跟 ...