web项目优化
1 循环时没有使用break
案例:查找一个值是否在数组中存在(为举例舍弃自带函数)
$aa=123;
$arr=array(234,123,5,6,45646,346,23);
foreach($arr as $v){
if($aa==$v){
dosth();
break;
}
}
这个是常犯的错误如果数量少或复杂度低性能没什么影响,如果遇到超大数组 那么就浪费了大量的资源
2 有时一次性将数据读取出来放入内存后处理更佳
遇到一个优化 开发者是想根据id递归查出所有的父子关系结构,每次递归都去用父id去数据库查。当时可能是数据量少 没有发现性能问题 ,但数据越来越多 每条记录都去访问一次数据库,没两下就拖垮数据库 一次业务请求却要访问成千上万次数据库
优化:如果量少 比如几万条 直接一次性获取到内存中 用完立马收回 释放内存
如果量大 可以异步多取几次大数据
3 有时候用where 取代 orderby性能更佳
案例:多个表联合查询,a,b,c 排序 order by a.status desc,b.id desc
在跨表排序时 虽然2个字段都建有索引 但没法使用到索引 会导致using temporary,using filesort 全表扫描 观察了一下数据 a.status最大的条数有几百条 即使排序出来也是几百条在前面,后面的几乎都不会去看
优化 where a.status=maxnumber order by b.id desc 可在搜索中加入按status的条件搜索 性能立马上升
4 有时候列表页就那么几个显示的字段 但速度特别慢,可根据情况分表处理
将查询率高且重要的字段分表出来 可降低查询复杂度 ,尤其是字段多 数据量大的表再合适不过;
5 多线程抓取写入数据库时 数据库吞吐量过低阻塞抓取速度
抓取速度快于数据库写入速度 导致数据库同步延迟并且阻塞抓取,这样的情况可以建立队列,将抓取的数据先插入队列 在慢慢写入数据库
6 不需要的数据提前过滤掉,不要在接下来一系列的操作后 才剔除 增加后面无用的查询或处理操作
7一条语句查询可完成却要循环几次去调用数据库,一般一条语句关联如果有索引且效率很高就不要分开处理了。
web项目优化的更多相关文章
- java web项目优化记录:优化考试系统
考试系统在进行压力測试时发现,并发量高之后出现了button无反应.试题答案不能写到数据库的问题,于是针对这些核心问题,进行了优化. 数据库方面: Select语句:Select * from TEB ...
- 利用Gulp优化部署Web项目[长文慎入]
Gulp Gulp是一款项目自动化的构建工具,与Grunt一样可以通过创建任务(Task)来帮助我们自动完成一些工作流的内容.当然,今天我们的内容并不是讨论这二者的区别,仅仅是介绍介绍如何利用Gulp ...
- 170612、web如何项目优化
Web性能优化分为服务器端和浏览器端两个方面. 一.浏览器端,关于浏览器端优化,分很多个方面1.压缩源码和图片JavaScript文件源代码可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG ...
- WEB项目构建优化之自动清除CSS中的图片缓存
在web项目构建发布时,经常遇到css中图片的修改优化,那么如何清除图片的缓存成为必须要解决的问题.曾经有过傻傻的方法就是直接在图片后面添加随机数.今天主要是从构建自动化方式来解决这个问题,提高开发及 ...
- 用简单的反射优化代码(动态web项目)
在动态web项目中,没有使用框架时,只是简单的jsp访问servlet实现增删改查, 无论是哪个方法都需要经过Servlet中的doGet()方法或doPost()方法,我们可以在链接中附带参数进行区 ...
- 前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化
github github-myBlob 从输入URL到页面加载完成的整个过程 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来 接下来是 TCP 握手 ...
- 关于大型网站技术演进的思考(二十一)--网站静态化处理—web前端优化—下【终篇】(13)
本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部,不过该企业把这个事业部里的人事成本,系统运维成本特别 ...
- Web性能优化-合并js与css,减少请求
Web性能优化已经是老生常谈的话题了, 不过笔者也一直没放在心上,主要的原因还是项目的用户量以及页面中的js,css文件就那几个,感觉没什么优化的.人总要进步的嘛,最近在被angularjs吸引着,也 ...
- 项目优化经验分享(八)TeamLeader经验总结
引言 通过前面的七篇博客.我把自己在项目优化过程的经验进行了分享,今天这篇博客,作为一个总结,就来讲讲作为一个TeamLeader,在项目管理中遇到的问题和解决经验! 正文 问题一:团队之间怎么沟通? ...
随机推荐
- Spark Streamming 基本输入流(二) :Socket
Spark Streamming 可以通过socket 进行数据监听. socket的输入方可以通过nc 或者自己开发nc功能的程序. 1.系统自带的nc su root a yum install ...
- 全局ajax的使用
一.ajax介绍 详细介绍请看:http://www.runoob.com/ajax/ajax-tutorial.html AJAX = Asynchronous JavaScript and XML ...
- Sonar安装和常见问题解决
Sonar是一款代码质量分析工具,有助于帮助代码质量提高. Sonar的官网地址为:https://www.sonarqube.org/downloads/ 点击 Show All Versions ...
- 【题解】洛谷P2827 [NOIP2016TG] 蚯蚓(优先队列)
题目来源:洛谷P2827 思路 阅读理解题 一开始以为是裸的优先队列而已 但是发现维护一个切开并且其他的要分别加上一个值很不方便 而且如果直接用优先队列会TLE3到4个点 自测85分 所以我们需要发现 ...
- Mysql不同表的同名字段索引名可以相同
mysql中不同表的相同字段索引是可以重名的,因为索引文件一表一个: 命名规则: 普通索引:idx_字段名 唯一索引:ux_字段名
- iOS安装CocoaPods详细过程
iOS安装CocoaPods详细过程 一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的 ...
- MySQL常用参数说明(持续更新)
##innodb correlate innodb_flush_log_at_trx_commit value: 0,[1],2 effect: control the flush opera ...
- linux 学习第七天
一.bash 使用(for循环.while循环) 1.1.批量添加用户 1.2.查看用户是否存在 A.cut -d : -f 1 /etc/passwd B.id dream (id 用户名称) C ...
- 使用泛型与不使用泛型的Map的遍历
https://www.cnblogs.com/fqfanqi/p/6187085.html
- vue 引入 mint-ui 简单使用
一 npm 方式 1,安装依赖 (已有项目) 如果想简单体验:基于vue-cli /* npm install vue -g npm install vue-cli -g // -g 是否全局 ...