php 大数组 foreach 循环嵌套的性能优化
前提:最近在做后台的时候,页面加载太慢,故第一时间想到的自然是优化SQL, 优化后sql查询速度从 2秒变成了零点几秒, 以为就这麽完事了,然并卵,加载竟然花费30秒!
这麽慢,然后在代码中分块记录它的耗时时间, 发现是在 foreach 遍历的问题,嵌套数据量太大了, 我还嵌套了三层, 数据量大约为: 30*20000*20000;
额~ ~, 相乘起来数据量有点大了,怪不得会慢~
1、模拟场景, 优化前是这样的:
for($i=0; $i<30; $i++){
for($j=0; $j<20000; $j++){
for($k=0; $k<20000; $k++){
if($j == $k){
// TODO
}
}
}
}
2、 优化后:
for($i=0; $i<30; $i++){
$tempArr = array();
for($j=0; $j<20000; $j++){
$tempArr[$j] = $j;
} for($k=0; $k<20000; $k++){
// isset 函数
if(isset($tempArr[$k])){
// TODO
}
} // 用完即销毁临时数组
unset($tempArr);
}
将最里面的数组放出来,就把遍历数量拉低了, 再用 isset() 内置函数加快对比速度,效果是显著的, 优化后变成了2秒内;
php 大数组 foreach 循环嵌套的性能优化的更多相关文章
- JavaScript数组forEach循环
JavaScript数组forEach循环 今天写JavaScript代码把forEach循环数组忘记写法了,在此记录一下以防止未来忘记. let a = [1, 2, 3]; a.forEach(f ...
- PHP数组foreach循环如何实现逆序访问?
PHP数组foreach循环如何实现逆序访问? 一.总结 1.array_reverse($array) :foreach(array_reverse($array) as $key=>$val ...
- DevExpress ChartControl大数据加载时有哪些性能优化方法
DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...
- android app性能优化大汇总(google官方Android性能优化典范 - 第3季)
(1)Fun with ArrayMaps 程序内存的管理是否合理高效对应用的性能有着很大的影响,有的时候对容器的使用不当也会导致内存管理效率低下.Android为移动操作系统特意编写了一些更加高效的 ...
- NGUI ScrollView 循环 Item 实现性能优化
今天来说说一直都让我在项目中头疼的其中一个问题,NGUI 的scrollView 列表性能问题,实现循环使用item减少性能上的开销. 希望能够给其他同学们使用和提供一个我个人的思路,这个写的不是太完 ...
- android app性能优化大汇总(google官方Android性能优化典范 - 第2季)
Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...
- 两层c:forEach循环嵌套
jsp中两级菜单如何用c:forEach输出 items 要被循环的信息 否 无 begin 开始的元素(0=第一个元素,1=第二个元素) 否 0 end 最后一个元素(0=第一个元素,1=第二个元素 ...
- 转载:mybatis踩坑之——foreach循环嵌套if判断
转载自:作者:超人有点忙链接:https://www.jianshu.com/p/1ee41604b5da來源:简书 今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,mybatis ...
- 两个大数组foreach,找出相同的key数量,所用的时间对比
<?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); retur ...
随机推荐
- 学生管理系统——数据库、java基础
1.项目分层 view层:视图层 controller层:控制层 service层:业务层 dao层:数据库访问层 domain:实体包 tools:工具类 2.jar包 3.配置文件 4.程序设计 ...
- git add 不能提交 vendor下面的一个文件夹
项目要用grpc.然后composer require XXX. 把对应的包拉倒vendor目录下面.(这里先不考虑要把vendor composer.lock提交到版本库的问题) 然后开发完成后 ...
- 在docker容器中编译hadoop 3.1.0
在docker容器中编译hadoop 3.1.0 优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低. Hadoop 3.1.0 的源代码目录下有一个 `sta ...
- WebSocket浅谈
WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速 ...
- 用python实现不同格式99乘法表输出
前言:学习python已经有一段时间了,最近发现有时候会出现一个东西知道,也能写出来,但是说不出来的情况.思考后觉得是基础还不够扎实,只一味写代码,没有深入思考具体实现的逻辑,以及各个点之间的关联.所 ...
- java中int 和String相互转换
一.String转为int int i=Integer.parseInt(string):int i=Integer.valueOf(s).intValue(); 二.int转为String Stri ...
- Hbase 错误记录分析(1) region超时问题
错误现象: 默认等待时间是60秒,超过这个时间就报超时问题了.因此需调整超时时间,默认为60秒,在配置文件 hbase-site.xml中: 调整成10分钟 <property> & ...
- OpenFOAM 中边界条件的设定【转载】
转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102v7jt.html 用习惯了FLUENT的操作界面,再使用OpenFOAM就会觉得非常繁琐.遇到的第一个问 ...
- HttpClient学习(三)—— AsyncHttpClient使用
一.介绍 This class support asynchronous and synchronous HTTP requests. AsyncHttpClient 支持同步.异步Http请求. 二 ...
- Hive和Hadoop
我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...