PHP性能优化(1)-从一个简单的例子开始
2008-03-09 16:27
489 查看
[align=center]前言[/align]
[align=left][/align]
[align=center][/align]
PHP 本身已经是一种非常快速的语言,不过除了执行速度,PHP仍然有许多可以被优化的地方。
在本文中我们将介绍一下几点:
1. 为什么中PHP中优化过程中有许多因素是和代码没有关系的
2. 在提升PHP性能的过时中,为什么我们还需要了解更多的关于其它方面的知识
3. 系统中导致瓶颈的原因以及解决的方法
4. 我们还讨论如何调整以及优化PHP代码以使其拥有更佳的性能
达到高性能
当我们谈论高性能时,我们并不仅仅指一个PHP脚本运行的有多么快速,性能是指速度和可伸缩性的折中权衡。使用较少资源的脚本因该会比另一个使用了缓存的脚本要慢,但是在web服务器中,某一时刻可能运行同一个脚本的多个拷贝。
在下面的例子中,我们假设脚本a.php是一位跑得十分快速赛跑选手,而b.php是一位马拉松长跑健将,他的速度是基本不变的。在负载较轻时,a.php 运行的要比b.php快,然而随着web服务器的负载不断增加,b.php的性能只是降低了一些,而a.php却大势已去!
现在我们以一个现实中的例子来解释上面发生的情况。我们要写一个PHP脚本,它从一个250k的文件中读取数据,并且生成一个HTML文件。为了便于比较,我们写了两个实现同样功能脚本:“hare.php” 将文件一次性读入内存,并且一次性处理所有的数据;“tortoise.php” 一次只从文件中读取一行,并且决不在内存中保留多于一行的信息。结果是tortoise.php因为使用了更多的系统调用而明显的慢与hare.php。
脚本hare.php要求有0.04秒的CPU时间和10M的内存,tortoise.php要求有0.05秒的CPU是时间和5M的内存。此时Web服务器有100M的物理内存,和99%的空闲CPU。为了简化问题,我们不考虑内存碎片的情况。
当有10个脚本被同时运行时,hare.php将会占用掉所有的内存(10M×10=100M),而tortoise.php则可以剩下50M的空闲内存。如果第11个脚本要在服务器中运行,hare.php将不得不使用虚拟内存,这可能导致其速度降低一半,这时所有对hare.php的请求都将耗费0.88秒的CPU时间,与此同时,tortoise.php将仍然使用0.06秒的CPU时间。
下表中较快的PHP脚本使用了粗体以示区别:
上面的例子说明:提供好的性能并不仅仅指编写一个快速的PHP脚本。实现高性能的PHP还要求对底层硬件、操作系统、以及常用的配套软件(像web服务器和数据库系统)都有良好的认识。
[align=left][/align]
[align=center][/align]
PHP 本身已经是一种非常快速的语言,不过除了执行速度,PHP仍然有许多可以被优化的地方。
在本文中我们将介绍一下几点:
1. 为什么中PHP中优化过程中有许多因素是和代码没有关系的
2. 在提升PHP性能的过时中,为什么我们还需要了解更多的关于其它方面的知识
3. 系统中导致瓶颈的原因以及解决的方法
4. 我们还讨论如何调整以及优化PHP代码以使其拥有更佳的性能
达到高性能
当我们谈论高性能时,我们并不仅仅指一个PHP脚本运行的有多么快速,性能是指速度和可伸缩性的折中权衡。使用较少资源的脚本因该会比另一个使用了缓存的脚本要慢,但是在web服务器中,某一时刻可能运行同一个脚本的多个拷贝。
在下面的例子中,我们假设脚本a.php是一位跑得十分快速赛跑选手,而b.php是一位马拉松长跑健将,他的速度是基本不变的。在负载较轻时,a.php 运行的要比b.php快,然而随着web服务器的负载不断增加,b.php的性能只是降低了一些,而a.php却大势已去!
现在我们以一个现实中的例子来解释上面发生的情况。我们要写一个PHP脚本,它从一个250k的文件中读取数据,并且生成一个HTML文件。为了便于比较,我们写了两个实现同样功能脚本:“hare.php” 将文件一次性读入内存,并且一次性处理所有的数据;“tortoise.php” 一次只从文件中读取一行,并且决不在内存中保留多于一行的信息。结果是tortoise.php因为使用了更多的系统调用而明显的慢与hare.php。
脚本hare.php要求有0.04秒的CPU时间和10M的内存,tortoise.php要求有0.05秒的CPU是时间和5M的内存。此时Web服务器有100M的物理内存,和99%的空闲CPU。为了简化问题,我们不考虑内存碎片的情况。
当有10个脚本被同时运行时,hare.php将会占用掉所有的内存(10M×10=100M),而tortoise.php则可以剩下50M的空闲内存。如果第11个脚本要在服务器中运行,hare.php将不得不使用虚拟内存,这可能导致其速度降低一半,这时所有对hare.php的请求都将耗费0.88秒的CPU时间,与此同时,tortoise.php将仍然使用0.06秒的CPU时间。
下表中较快的PHP脚本使用了粗体以示区别:
连接数 | 1个HTTP连接时的CPU时间 | 10个HTTP连接时的CPU时间 | 11个HTTP连接时的CPU时间 |
hare.php | 0.04 | 0.40 | 0.88 (使用了虚拟内存) |
tortoise.php | 0.06 | 0.06 | 0.66 |
相关文章推荐
- 关于PHP中启用Zend Optimizer后性能优化程度的简单测试
- Shiro —— 从一个简单的例子开始
- JNI官方规范中文版——从一个简单的例子开始
- 从一个简单的例子体会ARM环境下的C代码优化
- php mysql 一个查询优化的简单例子
- php mysql 一个查询优化的简单例子
- JNI官方规范中文版——从一个简单的例子开始
- kubernetes 从一个简单例子开始 Centos7
- Shiro —— 从一个简单的例子开始
- 大家须知简单的php性能优化注意点
- JNI知识(二)从一个简单例子开始
- 大家须知简单的php性能优化注意点
- nginx+php-fpm性能参数优化原则
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- PHP性能优化
- Go语言入门——从一个简单例子入门
- nginx 性能优化简单案例
- ASP.NET MVC Framework体验(1):从一个简单实例开始
- PHP7优化提高性能的几个Tips