当前位置: 首页 > 编程日记 > 正文

php 生成动态键值 数组_你的PHP项目遇到性能问题了吗?看完这篇性能分析恍然大悟...

你的项目中遇到性能问题了吗?遇到性能问题你是如何解决的呢?你的解决方式是否正确呢?下面就跟大家一起分享php项目的性能问题。

a9a4a7a4bc6cc503c5bd596adf58b968.png

PHP语言级性能分析

php在什么情况下会遇到性能问题呢?

在讨论性能问题时,我们要明白,整个项目的性能问题不仅仅包含php这一块,比如还有数据库服务、缓存服务、文件系统等,因此php性能问题在整个项目中只占一部分,在优化系统性能时要搞清楚是在优化系统整体性能还是在优化PHP单方面的性能。

首先,PHP是一门编程语言,我们知道每一门编程语言都有自己的优势及擅长的领域,所以使用php做了它不擅长的事情会很大概率遇到性能问题。再者,编码者在开发时PHP语法使用不恰当,导致php运行慢。最后,就是我们无法预估的问题,没有明确解决思路的性能问题。今天我们主要介绍PHP语言级的性能问题。

1、PHP性能检测的工具:ab

ab(apache benchmark)是由apache提供的压力测试工具,安装Apache时会自动安装此插件。

使用ab工具:

ab -n1000 -c100 https://www.test.com

-n表示请求数,后面跟数字,总共发起的请求数

-c表示并发数,后面跟数字,同一时刻的请求数

url最后跟要检测的目标地址

我们对百度进行一个检测,注意:对别的网站进行ab测试时,-n和-c后面的数字小点,不然会对目标网站造成一定的压力,然后人家发现你就把你给kill了:

53c69619ea9074db9cf83cee3258eb85.png

ab压测结果

ab7e0a49a5e0ca0bd43cf9c03f48ce1b.png

ab压测结果

这里我们只关注两个数据:

(1)、Requests per second:每秒可处理的请求数,越大越好 。

(2)、Time per request:每个请求处理耗时数,越小越好。

这样我们在每次进行过性能优化后可以通过前后这两项数据的对比确定优化有没有效果。

2、PHP语言级性能优化

(1)、多使用PHP自身携带的功能处理逻辑

如:有一个10000个用户信息的二维数组$userInfoList,要把它转为一维数组,且以uid为键名,username为键值,看多很多人写的代码都是通过foreach循环来实现,实际上这个是可以用PHP自带的数组函数来搞定的:

一般代码:

<?php $userMap = array();foreach ($userInfoList as $val) {  $userMap[$val['uid']] = $val['username'];}var_dump($userMap);

php数组函数:

<?php $userMap = array_column($userInfoList, 'username', 'uid');var_dump($userMap);

这个函数就能实现这种功能,代码简单又容易理解,运行速度还比自己包装的快。

函数参数:array_column($array, $column, [$index_key]);

(2)、php内置函数的也存在快与慢的差异

比如:查找一个index是否存在于数组$array的key中,大家都能想到使用array_key_exists($index, $array),当然有的同学也想到了使用isset($array[$index])这个函数。看下面代码:

<?php $array = rang(2000, 10000)$start = time();for ($i = 0; $i < 20000; $i ++) {     isset($array[$i]);  //测完这个注释掉,打开下面测     //array_key_exists($i, $array);  //每项要多测几次,用平均值做比较}$end = time();$time = $end - $start;echo $time;

没错,这两个函数都能实现相同的功能,然而在经过测算后发现,isset()函数的速度要快于array_key_exists()函数。所以大家平时使用内置函数时,要思考一下什么时候该使用哪个同类型的函数。

建议phper们多了解些内置函数的实现思路及函数计算的时间复杂度,大概知道了运算的时间复杂度的量级,那么在使用的时候就能够选择合适的函数。

(3)、总结几个比较常见的注意点

  • 减少PHP魔法函数的使用,也叫魔术方法
  • 最好禁用掉PHP错误抑制符@,虽然很方便,但是最好别用
  • 减少在循环体内做大量运算
  • 使用带引号字符串做键值

好了,今天的分享就到这里了,如果喜欢我的内容,欢迎转发,留言~~

谢谢~~

相关文章:

前来推荐一本比较喜欢的读物——《浪潮之巅》

基本属性 书籍介绍&#xff1a;《浪潮之巅》是一本介绍IT行业兴衰变化的书&#xff0c;书中的内容最早发表在Google黑板报上&#xff0c;经过几年的积累并整理成书。 作者介绍&#xff1a;吴军&#xff0c;美国约翰霍普金斯大学计算机科学博士&#xff0c;其人写作风格风趣幽默…

socks5   代理

安装gcc和make,并安装ss5的依赖包&#xff1a;yum -y install pam-devel openldap-devel cyrus-sasl-devel gcc automake make openssl openssl-devel2.下载ss5安装包并编译安装&#xff1a;wget -c http://sourceforge.net/projects/ss5/files/ss5/3.8.9-2/ss5-3.8.9-2.tar.gz…

Java Day02-2(字符串)

&#xff08;1&#xff09;字符串的连接 1.可以用加号连接两个字符串&#xff0c;“”在这里是起到了连接字符的运算。 2.转义字符 &#xff1a; \n(换行&#xff0c;另起一行&#xff0c;将光标移动到下一行的开始处) \r 把光标移动到本行的开始的位置 \t 制表符&am…

Blender3.0动画制作入门学习教程 Learn Animation with Blender (2021)

要求 下载并安装Blender。免费下载和免费用于任何目的。 描述 加入我的动画课程。 在本课程中&#xff0c;我将从头开始讲述在Blender中创建动画场景的过程。 从第一步到最终渲染。在这个课程中&#xff0c;我们将使用blender 3.0。您将学习将自己的3D动画带入生活的所有步骤…

python中if else语句用法_python中if及if-else如何使用

if 结构 if 结构允许程序做出选择&#xff0c;并根据不同的情况执行不同的操作 基本用法 比较运算符 根据 PEP 8 标准&#xff0c;比较运算符两侧应该各有一个空格&#xff0c;比如&#xff1a;5 3。 PEP8 标准 &#xff08;相等&#xff09;&#xff1a;如果该运算符两侧的值…

poj2002 hash+数学

1 .求不同的四个点组成最大正方形的总个数&#xff1b; 2.由&#xff08;x1,y1&#xff09;,(x2,y2),可以求出另外两点的坐标&#xff1b; 即 x3x1(y1-y2);y3y1-(x1-x2); x4x2(y1-y2);y4y2-(x1-x2); 或者 x3x1-(y1-y2);y3y1(x1-x2); x4x2-(y1-y2);y4y2(x1-x2); 3.由求出的点的坐…

计算机如何表示色彩?

我们都知道&#xff0c;颜色或色彩是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应。 而其中人眼对红、绿、蓝这3种光的敏感度最高。 由于任何光都可以用红、绿、蓝这3种光按不同的比例混合而成&#xff08;三原色原理&#xff09;&#xff0c;我们才能看到色彩斑斓的…

Java基础班学习笔记(13)IO流

知识要点&#xff1a;1:异常(理解)(1)程序出现的不正常的情况。(2)异常的体系Throwable|--Error 严重问题&#xff0c;我们不处理。|--Exception|--RuntimeException 运行期异常&#xff0c;我们需要修正代码|--非RuntimeException 编译期异常&#xff0c;必须处理的&#xff0…

问题一:云服务中那么多的服务器怎么拓扑???

云服务&#xff1a; 1.云存储&#xff08;百度云&#xff09; 2.视频点播 3.平台或者是软件&#xff08;阿里云&#xff09; 数据中心&#xff1a;存储数据的地方&#xff0c;我们通常会在一些电影里看到的大型的服务器整齐的罗列在一个大的房间中&#xff0c;那个也就差不…

2016-2022年AutoCAD起重机吊装计划和索具图纸

AutoCAD Crane Lifting Plan and Rigging Drawings 2016-2022 完成AutoCAD 2D高级起重机提升计划和索具图纸-基于项目的培训 你会学到什么 学习所有基本和高级的AutoCAD 2D工具栏 学习高级块和动态块 准备AutoCAD面试和考试 创建图纸、物料清单和布局的使用 学习图纸集管理器和…

tensorflow 转张量类型为float_TensorFlow快速入门

TensorFlow是一个数值计算库&#xff0c;其中数据&#xff08;Tensor&#xff0c;张量&#xff09;在计算图中流动。数据在TensorFlow用被称为张量的n维数据表示。计算图由数据和数学操作符构成。计算图中的节点代表数学操作符计算图中的边代表操作符之间的张量计算图(Graph)在…

环境变量配置文件

环境变量配置文件 关于显示"bash5.2#"问题 由于是PS1没有设置成功&#xff0c;说明~/.bash_profile --> ~/.bashrc --> /etc/.bashrc的文件加载流程出错。 posted on 2016-04-06 12:50 大侠去哪儿 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.…

【译】CSS动画 vs JS动画

原文地址 目前有两个主流的方法在web上创建动画&#xff1a;使用CSS或JS。到底选择哪种方法来实现动画&#xff0c;完全取决于你的项目以及你想要达到的效果。 tips: 对于简单的只出现一次的过渡效果&#xff0c;可以采用CSS动画&#xff0c;比如切换UI元素的状态在需要高级的效…

问题二:相关性怎么引入?

在大数据处理的时候总是会有说&#xff0c;现今科学技术的发展使得我们使用样本取代总体的时代过去了。在新的时代我们使用的是足够多的接近于总体的大的数据。在这个大的数据里面&#xff0c;我们没有办法具体数据具体的分析。因为它足够的大。 因此引入了相关性的概念&#x…

【UE5】虚幻引擎5中的VFX游戏特效制作学习教程

从零开始学习虚幻引擎5中的实时VFX。 你会学到什么 了解如何创建实时效果 通过创造效果来学习Niagara 了解Niagara是如何运作的 为游戏创造各种各样的效果。 创造风格化的火 创建风格化的爆炸 创造能量球 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语…

HDOJ 1236 排名(练耐心题)

Problem Description 今天的上机考试虽然有实时的Ranklist&#xff0c;但上面的排名只是根据完成的题数排序&#xff0c;没有考虑 每题的分值&#xff0c;所以并不是最后的排名。给定录取分数线&#xff0c;请你写程序找出最后通过分数线的 考生&#xff0c;并将他们的成绩按…

python跟java 效率_对比平台--Java与Python之间的性能差异

ava Performance和Python之间的主要区别 以下是描述Java Performance和Python之间的区别的要点列表&#xff1a; 以下是Java性能与Python之间的主要区别&#xff0c;我们在决定应该选择哪种语言之前必须进行分析和评估。 Java是一种编译语言&#xff0c;而Python是一种解释语言…

你听说过反摩尔定律吗?

相信很多人听说过摩尔定律&#xff0c;但是你听说过反摩尔定律吗&#xff1f; 可能你会以为反摩尔定律就是与摩尔定律相反的定律&#xff0c;甚至认为这两个定律相互矛盾&#xff0c;那你就大错特错了&#xff0c;其实两种定律可以说是针对同一种现象的不同说法。 摩尔定律是…

《Java从入门到精通》第九章学习笔记

第9章 类的高级特性 一、抽象类 抽象类只声明方法的存在&#xff0c;不能被实例化&#xff0c;就是说抽象类不能创建其对象&#xff0c;在定义抽象类时要在class前面加上abstract关键字。 1 /*定义一个抽象类Fruit&#xff0c;并定义其抽象方法2 *在其子类中实现该抽象方法3 …

Python中的super()函数

多路继承的问题 描述&#xff1a; 解决这样的问题Python中可以使用super&#xff08;&#xff09; super&#xff08;&#xff09;函数有点&#xff1a; &#xff08;1&#xff09;在父类中可以直接的调用未绑定的方法 &#xff08;2&#xff09;在确保所有的父类的构造方…

【UE5教程】影棚拍摄于虚拟场景合成制作流程学习

用虚幻引擎预算虚拟生产5 你会学到什么 使用虚幻引擎5进行虚拟生产 使用虚幻引擎5的独立虚拟制作 用虚幻引擎预算虚拟生产5 用虚幻引擎5进行穷人虚拟生产 用虚幻引擎5进行自制虚拟制作 虚幻引擎5独立虚拟制作 带虚幻引擎5的复合绿屏 虚拟生产导论 面向初学者的虚拟生产 MP4 |视…

java面试题:分布式和微服务的区别

分布式架构解决的是如何将一个大的系统划分为多个业务模块这些业务模块会分别部署到不同的机器上,通过接口进行数据交互的问题。微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。分布式架构是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。

python安装成功的图标_ubuntu下:安装anaconda、环境配置、软件图标的创建、成功启动anaconda图形界面...

Ubuntu安装anaconda常见的四大问题&#xff1a;目录1、介绍2、安装anaconda3、环境配置4、软件图标的创建5、成功启动anaconda图形界面1、介绍先介绍一下anaconda和python的关系&#xff1a;初学者所安装的python2/3只是python的环境&#xff0c;没有python的工具包&a…

jQuery和dom的相互转换

1.将DOM对象转换成jQuery对象 $div $(objDom); 2.将jQuery对象转换成DOM对象 objDom $(objJqeury).get(0); 3.判断一个元素是否存在于页面 jQuery方法&#xff1a; $("#id").length >0:代表存在于页面 0&#xff1a;不存在页面 4.取另一个页面中存在的元素 …

VScode的撤销操作的快捷键

撤销刚才的操作&#xff1a;CtrlZ 恢复刚才的操作&#xff1a;CtrlShiftZ

IOS初级:UIAlertController

- (IBAction)signOutAction:(id)sender {//初始化,StyleActionSheet是对话框的样式UIAlertController *alert [UIAlertController alertControllerWithTitle:"是否注销?" message:"真的要注销吗" preferredStyle:UIAlertControllerStyleActionSheet];//添…

1976年图灵奖

获奖原因&#xff1a; 在1959年发表的论文“有限自动机及其判定问题”中提出了非确定性有限状态自动机这一概念。 图灵奖引用&#xff1a; 授 予 MichaelO. Rabin与DanaSteward Scott图灵奖以表彰合作撰写的研究论文“有限自动机与其判定性问题”。在该研究论文中&#xff0c;…

UE4蓝图无代码编程游戏开发技能学习教程

在虚幻引擎4中创建、设计和开发自己的游戏&#xff0c;无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Game Development Essentials with Unreal Engine 4 Blueprints M…

“睡眠猴子”团队项目及成员介绍

“睡眠猴子”团队项目及成员介绍 咳咳……软件工程这门课最终还是来到了团队开发的部分&#xff0c;我们宿舍三只经过一下午的讨论和需求分析决定做一款名叫“睡眠猴子”的安卓版手机软件&#xff0c;具体的项目功能和团队介绍如下&#xff1a; 一、“睡眠猴子”开发团队介绍&a…

python代码编写规范_python初学者-代码规范

一、编程规范 1.缩进&#xff08;代码块&#xff09; 类定义、函数定义、选择结构、循环结构、with块、行尾的冒号表示缩进的开始。 python程序是依靠代码块的缩进来体现代码之间的逻辑关系&#xff0c;缩进结束就表示一个代码块结束。 同一个级别的代码块的缩进量必须相同。 一…