使用PHP的最大1个优势就是速度快。一般情况下,PHP总是具有足够的速度支持Web内容动态生成,许多时候甚至无法找出比它更快的方法。然而,当面对庞大的访问量、高负荷的应用、有限的带宽,以及其他各种带来性能瓶颈的因素时,就需要考虑怎样提高PHP的性能了。

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函数。

转载于:https://blog.51cto.com/leexiaobo/1051982

提高PHP运行速度的小技巧相关推荐

  1. 一个提高查找速度的小技巧

    在一个数组中查找某一个元素,或是在一个字符串中查找某个字符,我们一般都会写出如下代码.这样的代码虽然简洁明了,但在数组元素很多的情况下,并不是一个很好的解决方案,今天我就来分享一个提高查找速度的小技巧 ...

  2. 有效提高效率的PDF小技巧,你确定不了解下嘛?

    有效提高效率的PDF小技巧,你确定不了解下嘛? 当今是快节奏的时代,时间如此宝贵,不论是学习或是办公,掌握些提高效率的小技巧必不可少. PDF文档可以说是学生党和办公党都不陌生甚至经常接触的文档类型了 ...

  3. 使用vtwinfx插件时fcpx意外退出_10个提高 uTools 使用效率的小技巧

    uTools 作为一款「生产力工具集」软件,旨在通过丰富的插件.智能的「场景功能」匹配,让我们能够更专注,效率 up! 本期,小编整理了10个提高 uTools 使用效率的小技巧.通读此篇后,必定操作 ...

  4. xp下优化OpenGL模式运行速度的小技巧

    转发一个xp下优化OpenGL模式运行速度的小技巧,修改工具已经传上了 从一个linux论坛看来,原本用于让linux跑war3流畅些,一直没有在windows中使用过.晚上在XP里试验了一下成功了, ...

  5. 提高计算机水平的小技巧,五大电脑小技巧

    而随着生活水平的提高,家家现在都有一台电脑,使用电脑的技巧也是五花八门.以下是YJBYS小编搜索整理的关于五大实用的电脑小技巧,供参考阅读,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业 ...

  6. 为什么居家办公后我更累了?提高远程工作效率小技巧~【互联网大厂打工人居家办公指南】

    文章目录 大厂打工人居家办公现状 1. 一日三餐是大问题 2. 沟通成本上升 3. 效率急剧下降 4. 工作与生活没有界限 提升远程办公效率的小技巧 1. 设立工作地点,还原办公环境 2. 制定工作计 ...

  7. 分享9个提高代码运行效率的小技巧

    学习之余看到的一片文章,转载出来,经常看看,好处多多! 我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使 ...

  8. 9个提高代码运行效率的小技巧你知道几个?

    我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素.通常,我们必须在程序的简 ...

  9. 11个提高开关电源效率的小技巧

    1.在开关电源次级输出端的肖特基上并一个小功率快速二极管来代替RC吸收,效率一般可以提高1~2个点. 2.在体积和面积的允许下,尽量选用PQ RM型的变压器,在安规允许的情况下,变压器不加挡墙效率可以 ...

最新文章

  1. 机器学习-斯坦福:学习笔记6-朴素贝叶斯
  2. ThreadLocal 简介
  3. 最大字段和各种不同算法实现(参考编程珠玑)
  4. 【数据使用】3问视觉项目中的数据整理,这点小事你是不是都掌握好了?
  5. boost::math模块使用指定宽度的浮点 typedef估中等复杂的数学函数的测试程序
  6. ASP.NET Web API教程 分页查询
  7. 从centos7默认安装的/home中转移至根目录/ (LVM操作简明教程)
  8. git add 文件夹_软件测试学习资源—Git 基础使用
  9. 15年来这8门编程语言位置十分稳定,C#从低谷开始爬升
  10. 搭建MIPS平台GDB调试环境
  11. php如何开发网络电话,利用开源软件30分钟搭建自己的voip网络电话系统V1.1
  12. 西门子g120变频器接线图_西门子G120变频器怎么样?好用吗?
  13. 在线CHM阅读器(2)——文件提取及关键文件解析
  14. 工程总承包(EPC)项目经理培训项目背景介绍
  15. html 字体样式斜体,CSS font-style斜体字体倾斜体样式
  16. SP许可证延期需要的东西
  17. Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
  18. 锐龙r5 6600u和r5 5600u区别 r56600u和r55600u对比
  19. 解决webpack报错:ERROR in multi ./xxx/xxx.js ./xxx/xxx.js Module not found: Error: Can't resolve '.\xxx\
  20. matlab 热传导方程,热传导方程有限差分法的MATLAB实现

热门文章

  1. 计算机分级存储的特,一种分级存储的方法、系统、设备及介质技术方案
  2. python打开网页存图_python 获取网页图片 保存在本地
  3. win10鼠标灵敏度怎么调_和平精英最稳压枪灵敏度怎么调教程,适合所有段位以及适合国际版PUBG手游压枪...
  4. Spring复习笔记:3
  5. 【基础知识】如何在word中粘贴出漂亮整洁的代码
  6. 选课微信小程序开发 java
  7. uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
  8. TypeScript 1
  9. 微信小程序swiper组件宽高自适应方法
  10. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿