提高php运行速度的一些小技巧分享


Posted in PHP onJuly 03, 2012

1、代码优化

代码优化不仅仅是写出干净和清晰的代码,而是对代码进行一定的简化。可以使用Zend Optimizer来自动帮助完成这些繁杂的工作。Zend Optimizer可以从Zend Technologies的网站http://www.zend.com/免费得到,但必须同意它的许可约定,因为它不是以GPL方式发行的。它的原理很简单,即通过检测Zend引擎产生的中间代码,并对它进行优化,从而获得更高的执行速度。
在使用了Zend Optimizer后,复杂的PHP源程序的执行效率马上会得到显著提高,缺点是优化后的代码可读性下降,给代码修改带来困难。

Zend Optimizer的安装方法非常简单,只要根据用户使用的平台,下载相关的预编译版本,把下面2行代码加入到php.ini文件中,重新启动Web 服务器就行了:
zend_optimizer.optimization_level=15
zend_extension=″/path/to/ZendOptimizer.so″
zend_loader.enable=Off

额外增加的第三行代码是可选的,因为禁用zend_loader将会使优化速度更快。需要注意的是,只有在不使用Zend Encoder Runtime的时候,才可以禁用zend_loader。

2、使用缓存

如果PHP程序的规模很大,那么提高速度的办法就是使用缓存。现在已经有许多缓存方案可供选择,其中包括Zend Cache、APC和Afterburner Cache。

上面这几种都是“缓存模块”(caching modules)。第一次调用PHP文件时,缓存模块从PHP源代码生成一些中间代码,并把这些中间代码存储在Web服务器的内存中。以后再调用这些文件时,就可以直接使用内存中“编译”过的代码。这种方法确实能够改善应用的性能,因为它使得磁盘访问量减低到了最少的程度(代码已经读取和解析),代码直接在内存中运行,使得服务器响应请求的速度大大提高。

当然,缓存模块还会监视PHP源文件的变化,必要时会重新缓存页面,从而防止用户得到的页面仍旧由过时的PHP代码生成。由于缓存模块能够明显地降低服务器的负载,提高PHP应用的响应效率,因此它们非常适合于负载较大的网站使用。

Zend Cache是Zend Technologies公司开发的商业软件。在第一次运行后,PHP页面的运行速度立刻会有很大的提高,服务器的空闲资源也更多了。缺点是它不是免费的,但性价比还是很高的。

Afterburner Cache是Bware Technologies公司开发的免费缓存模块。功能与Zend Cache基本一样,但提高性能方面比不上Zend Cache。

APC(Alternative PHP Cache)是由Community Connect公司开发的另一种免费缓存模块,目前版本是2.0.4,可以从http://pecl.php.net/package/APC获得。对于产品应用来说,它的性能很稳定,而且也能在很大程度上提高响应请求的速度。

3、压缩网页内容

影响站点的访问速度还有1个重要因素,那就是下载速度。解决的办法就是压缩网页内容。对于纯文本内容而言,HTTP压缩技术可压缩至原大小的40%以下,从而提供60%以上的数据传输节约。虽然Web服务器会因为压缩导致CPU占用的略微上升,但可以节约大量用于传输的网络IO。

根据IETF规范,大部分浏览器都支持使用gzip压缩算法进行内容压缩。也就是说,可以先用gzip压缩网页内容,然后发送到客户端浏览器,浏览器在接收的时候会自动解压数据,再显示页面。这个过程对用户来说,是完全透明的。同样,压缩Web页面的内容也有不同的方法。

Mod_gzip是1种开放源代码的、标准的Apache模块,也叫互联网内容加速模块。可以将它和Apache一起编译,也可以作为DSO使用。相对于普通的浏览过程,它可以节省40%左右的流量。Mod_gzip不仅可以压缩静态的内容,如HTML、XML,而且对动态生成的,包括SQL、Java、WML、VRML等产生的内容,在服务器端进行实时压缩并传输,其压缩效率惊人,一般都为60%~85%。

压缩动态网页的内容,还可以使用class.gzip来对.php文件编码,class.gzip通过在PHP脚本的开头和结尾调用它的一些函数来压缩网页内容。如果整个站点都需要这样的压缩,可以在php.ini文件中的auto_prepend和auto_append中调用这些函数,但是会占用一定的系统开销。

PHP4.0.4推出了1种新的输出缓冲的处理手段—ob_gzhandler,它的作用和class.gzip完全一样,区别是可以直接把它加到php.ini 文件中,语法如下:

output_handler = ob_gzhandler;

这样将激活PHP的输出缓冲功能,并在发送内容前进行压缩。如果不想在这里设置,只在需要的地方才改变这个默认设置(不压缩),只要在需要压缩的PHP源程序目录中,修改一下.htaccess文件就行了,语法如下:
php_value output_handler ob_gzhandler

或者直接在PHP代码中调用它:

ob_start("ob_gzhandler");
输出缓冲的效果确实很理想,并且不会为服务器带来额外的系统开销。要注意的一点是Netscape Communicator不支持图像的压缩。因此除非知道访问者都使用Internet Explorer,否则必须禁止压缩jpeg和gif图象。

4 其它技巧

在编程时,使用一些小技巧也可以加快PHP的运行速度:
(1)用i+=1代替i=i+1,既符合c/c++的习惯,效率相对还更高。
(2)尽可能使用PHP内部函数。
(3)能使用单引号字符串时,尽量使用单引号字符串。单引号字符串的效率要高于双引号字符串。
(4)用foreach代替while遍历数组,foreach的效率明显高于while循环,而且不需要调用reset函数。
以上四种方法就是唐山网站建设总结的一些个人经验,希望对大家有帮助,转载请留个链接谢谢了!

PHP 相关文章推荐
php的计数器程序
Oct 09 PHP
smtp邮件发送一例
Oct 09 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
php + nginx项目中的权限详解
May 23 PHP
php对象工厂类完整示例
Aug 09 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 #PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 #PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 #PHP
php下载文件的代码示例
Jun 29 #PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 #PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 #PHP
PHP删除数组中的特定元素的代码
Jun 28 #PHP
You might like
PHP安全编程之加密功能
2006/10/09 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
Yii框架form表单用法实例
2014/12/04 PHP
javascript 数组的方法集合
2008/06/05 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
Python操作json的方法实例分析
2018/12/06 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
Python递归函数特点及原理解析
2020/03/04 Python
Django websocket原理及功能实现代码
2020/11/14 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏