提升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 相关文章推荐
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
php 用sock技术发送邮件的函数
Jul 21 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
关于PHP开发的9条建议
Jul 27 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
浅析php如何实现爬取数据原理
Sep 27 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 PHP
PHP7变量处理机制修改
Mar 09 PHP
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 #PHP
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 #PHP
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 #PHP
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 #PHP
在同一窗体中使用PHP来处理多个提交任务
Oct 09 #PHP
使用MaxMind 根据IP地址对访问者定位
Oct 09 #PHP
Zend公司全球首推PHP认证
Oct 09 #PHP
You might like
十天学会php(2)
2006/10/09 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python及PyCharm下载与安装教程
2017/11/18 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
对python模块中多个类的用法详解
2019/01/10 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python如何绘制疫情图
2020/09/16 Python
python 递归相关知识总结
2021/03/03 Python
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
Python如何使用循环结构和分支结构
2022/04/13 Python
python数字图像处理之图像的批量处理
2022/06/28 Python