提升PHP执行速度全攻略(上)


Posted in PHP onOctober 09, 2006

PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了。不过如果站点的访问量很高、带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了。这篇文章将从几个方面介绍如何做到这一点,从而令用户浏览的时候更加“爽”。

代码优化

在这里并不想再次告诉你
如何写更干净的代码,这一点我想每个人都清楚,在需要速度的时候,你可能已经在PHP源代码的优化上面做了不少的工作,这里所提出的是,这个烦琐的工作可以交由其它工具来完成。这就是Zend Optimizer,此程序可以从Zend Technologies的网站(http://www.zend.com/)免费得到。它的原理很简单,通过检测Zend引擎产生的中间代码,并且优化它来得到更高的执行速度。我认为优化代码是一项颇烦琐的工作,而且优化后的代码可能变得难以理解,尤其是当你放下该PHP程序一段时间后,突然间客户要求你做一些修改时,可能你自己也不懂了;-)。因此我建议你在PHP的源代码较为复杂的时候,用Zend Optimizer来做这个优化的工作,好处是它不会令你的代码变得复杂难懂。

安装Zend Optimizer是非常简单的。只要根据你使用的平台,下载相关的预编译库,并且在你的php.ini中加入两行,重新启动你的web服务器就行了!

zend_optimizer.optimization_level=15zend_extension="/path/to/ZendOptimizer.so" zend_loader.enable=Off

你可能有点奇怪,不是说两行吗,怎么变成三行了。不过第三行是可选的,看来禁止这个zend_loader将会令优化的速度更快,因此不妨在你的php.ini文件中多加这一行。要注意的是:只有在你不使用Zend Encoder Runtime的时候,才可以禁止zend_loader,关于Zend Encoder Runtime,还会在下文提到。

要更快吗?使用cache(缓冲)吧

如果你的PHP应用还需要更快的速度,下一个办法是缓冲。要实现这一点,有几种不同的方式。我自己就试用过Zend Cache(评测版本),APC和Afterburner Cache。

以上提到的都是“缓冲模块”。它们的原理都差不多,在php文件被首次请求的时候,通过将你的PHP源代码的中间代码存储在web服务器的内存中,对于以后同样的请求,都直接提供内存中的“编译”版本。由于它可以令磁盘的访问达到最小化,因此这个方法确实可以极大地提高PHP的性能。更为方便的是,当你的PHP源代码修改时,缓冲的模块可以察觉到这些变化,并且重新载入一样,因此你不必担心客户得到的是旧版本的程序。这些缓冲的模块确实不错,但是我应该选用哪一种呢?下面分别介绍一下:

Zend Cache是Zend Technologies的一个商业化的产品(它也是免费为我们提供PHP引擎和Zend Optimizer的公司)。它确实不错。在首次运行后,你可以明显察觉到PHP的速度得到了很大的提高,服务器的空闲资源也更多了。缺点是你要付费购买它,但就性价比来说,还是非常值得的。

Afterburner Cache是Bware Technologies(bwcache.bware.it)提供的免费缓冲模块。当前还只是beta版,它所做的工作看来与Zend Cache差不多,不过性能的提高就比不上Zend Cache,而且现有的版本不能和Zend Optimizer一起工作,不过它是免费的。

APC(Alternative PHP Cache)是由Community Connect(apc.communityconnect.com)提供的另一个免费模块。它的工作很稳定,速度也有不少的提高,要注意的是,我还没有找到一个官方的测试数据,这些只是在我的应用上作测试,因此不能下一个结论

PHP 相关文章推荐
一个分页的论坛
Oct 09 PHP
php5.2.0内存管理改进
Jan 22 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
提升PHP执行速度全攻略(下)
Oct 09 #PHP
如何过滤高亮显示非法字符
Oct 09 #PHP
无限级别菜单的实现
Oct 09 #PHP
综合图片计数器
Oct 09 #PHP
php,不用COM,生成excel文件
Oct 09 #PHP
PHP中GET变量的使用
Oct 09 #PHP
一个ORACLE分页程序,挺实用的.
Oct 09 #PHP
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
JavaScript 学习笔记之语句
2015/01/14 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
利用python分析access日志的方法
2016/10/26 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python根据出生日期返回年龄的方法
2015/03/26 Python
Python实现简单的代理服务器
2015/07/25 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
mac系统安装Python3初体验
2018/01/02 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
中间件分为哪几类
2016/09/18 面试题
论文诚信承诺书
2014/05/23 职场文书
民政局个人整改措施
2014/09/24 职场文书
2014最新实习证明模板
2014/10/02 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
迟到检讨书范文
2015/01/27 职场文书
本溪水洞导游词
2015/02/11 职场文书
离婚律师函范本
2015/05/27 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书