suchen
HeimBackend-EntwicklungPHP-Tutorialphp 性能优化之php 语言级的性能优化1

php 性能优化之php 语言级的性能优化一


   对于这个问题首先我们要知道影响php的性能的原因是什么?也就是

    1 什么情况下会出现php性能问题?

1php语法使用不当(包括某些业务可以使用php 本身自带的函数来处理)

2使用php语言做了它不擅长的事 

3用php语言链接的服务器不给力(当然如果是localhost也就是你本地配置比较差哈,建议换本吧,哈哈)

4php自身的短板 (PHP 自身就做不了)

5我们也不知道的问题 (囧)

 

  2 php 性能问题简介之php的性能问题的解决方向

从困难度由浅到深分别为:

1 Php 语言级的性能优化 

2 Php 周边问题的性能优化 (比如说mysql nginx|apache

3 Php 语言资深分析,优化(ps 主要指的是底层的c代码)


下面针对php语言级的性能优化做实例讨论,对标题里面说的内容进行一个测试,接下来要书写两个文件 bad.php, goods.php

我们要测试的是合并两个数组的操作(测试工具 apache ab test)

bad.php

思路:

先将数组1逐个加入到目标数组中;

之后,遍历数组2,对比数组2的元素是否在数组1中出现,如果没有则插入到目标数组,否则忽略掉

<span style="font-size:14px;"><?php //准备两个内容随机的数组$arr1 = $arr2 = $arr_merged = array();//接下来随机给两个数组赋值for ( $i=0; $i<rand(1000,2000); $i++) {	$arr1[] = rand();}for ( $i=0; $i<rand(1000,2000); $i++) {	$arr2[] = rand();}//开始循环比较foreach ( $arr1 as $v ) {	$arr_merged[]  = $v;}foreach ( $arr2 as $v ) {	if(!in_array($v, $arr_merged)){		$arr_merged[]  = $v;	}}var_dump($arr_merged);</span></span>


goods.php

思路:

随机生成两个数组,在打乱顺序

之后,使用array_merge 合并

<span style="font-size:14px;"><?php //准备两个内容随机的数组$arr1 = $arr2 = range(1000, 2000);$arr_merged = array();//接下来随机给两个数组赋值shuffle($arr1);shuffle($arr2);$arr_merged = array_merge($arr1, $arr2);var_dump($arr_merged);</span></span>


3 使用 ab 测试两个php脚本的速度:(ps:惊人的时刻开始了)

bad.php


goods.php



对于这两个测试,我们明显的看出这的差的不是一点半点啊,在执行bad.php 的时候我明显的感觉电脑的风扇翁的一下,你懂得!

bad.php 每秒响应174个请求, 每个请求处理572ms

goods.php 每秒响应4050个请求, 每个请求处理24ms

ps: 如果还要小伙伴在使用bad的写法,赶快改掉它,小心不要你的领导知道哦!



4 究其原因

对于这个结果我也很吃惊,但是事实就在眼前,没办法啊,那么到底为什么会有这样的效果呢,咱们继续一探究竟:

*.php(php代码) -----Scanner(zend引擎逐行扫描变为zend可以识别的语法)----> exprs  

-----parser(解析为opcode)-----> opcodes ------exec(执行最后输出)-------> output


可以知道 一个php文件执行zend需要先扫描,然后解析为opcode 在执行输出,问题就出在这里,当我们使用php自身的函数的时候其实他就属于zend 引擎,所以zend 解析起来就比较顺手,速度那叫个快(goods.php), 但是当执行bad.php 的时候就会比较慢,因为读别人写的代码肯定没有读自己写的代码快大家说对吧,所以还是使用原创,不要自己造轮子比较好啊!


多说一点,这也就是为什么现在好些Php扩展(比如 apc)都来缓存opcode 因为这样就少了扫描与解析的环节,那肯定是快了!


5 总结

优化点:少写代码,多用php自身提供的能力

性能问题:

自己写的代码冗余较多,可读性不好,并且性能低

为什么性能低?

php代码需要编译解析为底层语言, 这一过程每次请求都会 处理一遍,开销大。

好方法:

多使用php内置变量,常量, 函数(spl 可以带给您好像好用的功能)


Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools