提升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中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
ThinkPHP中使用ajax接收json数据的方法
Dec 18 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 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
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
JavaScript实现美化滑块效果
2019/05/17 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python闭包实现计数器的方法
2015/05/05 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python发送告警邮件脚本
2018/09/17 Python
基于python实现高速视频传输程序
2019/05/05 Python
python绘制规则网络图形实例
2019/12/09 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
高中学生干部学习的自我评价
2014/02/21 职场文书
《春笋》教学反思
2014/04/15 职场文书
2014年党务公开方案
2014/05/08 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
房屋租房协议书范本
2014/12/04 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
浅谈JS的原型和原型链
2021/06/04 Javascript