提高PHP运行速度的小技巧
使用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运行速度的小技巧相关推荐
- 一个提高查找速度的小技巧
在一个数组中查找某一个元素,或是在一个字符串中查找某个字符,我们一般都会写出如下代码.这样的代码虽然简洁明了,但在数组元素很多的情况下,并不是一个很好的解决方案,今天我就来分享一个提高查找速度的小技巧 ...
- 有效提高效率的PDF小技巧,你确定不了解下嘛?
有效提高效率的PDF小技巧,你确定不了解下嘛? 当今是快节奏的时代,时间如此宝贵,不论是学习或是办公,掌握些提高效率的小技巧必不可少. PDF文档可以说是学生党和办公党都不陌生甚至经常接触的文档类型了 ...
- 使用vtwinfx插件时fcpx意外退出_10个提高 uTools 使用效率的小技巧
uTools 作为一款「生产力工具集」软件,旨在通过丰富的插件.智能的「场景功能」匹配,让我们能够更专注,效率 up! 本期,小编整理了10个提高 uTools 使用效率的小技巧.通读此篇后,必定操作 ...
- xp下优化OpenGL模式运行速度的小技巧
转发一个xp下优化OpenGL模式运行速度的小技巧,修改工具已经传上了 从一个linux论坛看来,原本用于让linux跑war3流畅些,一直没有在windows中使用过.晚上在XP里试验了一下成功了, ...
- 提高计算机水平的小技巧,五大电脑小技巧
而随着生活水平的提高,家家现在都有一台电脑,使用电脑的技巧也是五花八门.以下是YJBYS小编搜索整理的关于五大实用的电脑小技巧,供参考阅读,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业 ...
- 为什么居家办公后我更累了?提高远程工作效率小技巧~【互联网大厂打工人居家办公指南】
文章目录 大厂打工人居家办公现状 1. 一日三餐是大问题 2. 沟通成本上升 3. 效率急剧下降 4. 工作与生活没有界限 提升远程办公效率的小技巧 1. 设立工作地点,还原办公环境 2. 制定工作计 ...
- 分享9个提高代码运行效率的小技巧
学习之余看到的一片文章,转载出来,经常看看,好处多多! 我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使 ...
- 9个提高代码运行效率的小技巧你知道几个?
我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素.通常,我们必须在程序的简 ...
- 11个提高开关电源效率的小技巧
1.在开关电源次级输出端的肖特基上并一个小功率快速二极管来代替RC吸收,效率一般可以提高1~2个点. 2.在体积和面积的允许下,尽量选用PQ RM型的变压器,在安规允许的情况下,变压器不加挡墙效率可以 ...
最新文章
- 机器学习-斯坦福:学习笔记6-朴素贝叶斯
- ThreadLocal 简介
- 最大字段和各种不同算法实现(参考编程珠玑)
- 【数据使用】3问视觉项目中的数据整理,这点小事你是不是都掌握好了?
- boost::math模块使用指定宽度的浮点 typedef估中等复杂的数学函数的测试程序
- ASP.NET Web API教程 分页查询
- 从centos7默认安装的/home中转移至根目录/ (LVM操作简明教程)
- git add 文件夹_软件测试学习资源—Git 基础使用
- 15年来这8门编程语言位置十分稳定,C#从低谷开始爬升
- 搭建MIPS平台GDB调试环境
- php如何开发网络电话,利用开源软件30分钟搭建自己的voip网络电话系统V1.1
- 西门子g120变频器接线图_西门子G120变频器怎么样?好用吗?
- 在线CHM阅读器(2)——文件提取及关键文件解析
- 工程总承包(EPC)项目经理培训项目背景介绍
- html 字体样式斜体,CSS font-style斜体字体倾斜体样式
- SP许可证延期需要的东西
- Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
- 锐龙r5 6600u和r5 5600u区别 r56600u和r55600u对比
- 解决webpack报错:ERROR in multi ./xxx/xxx.js ./xxx/xxx.js Module not found: Error: Can't resolve '.\xxx\
- matlab 热传导方程,热传导方程有限差分法的MATLAB实现
热门文章
- 计算机分级存储的特,一种分级存储的方法、系统、设备及介质技术方案
- python打开网页存图_python 获取网页图片 保存在本地
- win10鼠标灵敏度怎么调_和平精英最稳压枪灵敏度怎么调教程,适合所有段位以及适合国际版PUBG手游压枪...
- Spring复习笔记:3
- 【基础知识】如何在word中粘贴出漂亮整洁的代码
- 选课微信小程序开发 java
- uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
- TypeScript 1
- 微信小程序swiper组件宽高自适应方法
- [iOS]调和 pop 手势导致 AVPlayer 播放卡顿