提高php性能的4个方法,加快网站的打开速度

代码优化:通过Zend引擎产生的中间代码,并对它进行优化,从而获得更高速度;使用缓存:现在已经有许多缓存方案可供选择;压缩网页内容;其它技巧

提高php性能的4个方法,加快网站的打开速度

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

代码优化

代码优化不仅仅是写出干净和清晰的代码,而是对代码进行一定的简化。可以使用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。

使用缓存

如果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获得。对于产品应用来说,它的性能很稳定,而且也能在很大程度上提高响应请求的速度。

压缩网页内容

影响站点的访问速度还有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不支持

(1)用i+=1代替i=i+1,既符合c/c++的习惯,效率相对还更高。

(2)尽可能使用PHP内部函数。

(3)能使用单引号字符串时,尽量使用单引号字符串。单引号字符串的效率要高于双引号字符串。

(4)用foreach代替while遍历数组,foreach的效率明显高于while循环,而且不需要调用reset函数。

以上四种方法就是唐山网站建设总结的一些个人经验,希望对大家有帮助,转载请留个链接谢谢了!

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年5月5日 05:25:03
下一篇 2024年5月5日 05:27:09

相关推荐

  • c语言输入数组,C语言输入数组的方法

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    5100
  • java的split方法的源码,如何理解java中的split方法

    请问java中split()方法怎么用? 1、split 的实现直接调用的 matcher 类的 split 的方法。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 2、split() 方法用于把一个字符串分割成字符串数组。 语法 stringObject.split(separator,howmany) 参数与描述 separato…

    2024年5月23日
    4500
  • linux增加目录空间,linux目录空间不足时的扩容方法

    Linux下调整根目录和home目录的空间大小 1、由此可见,home减少了100G空间,根目录增加了100G空间。 2、备份 home 查看未调整前的根目录容量,可以看到默认是分配 50G,但大都数的软件安装都默认在根目录 所以这里将home的容量分给根目录。 3、首先,你得有空余的空间,比如,你发现你的/home所在分区还有好多G的剩余空间,那你就可以把…

    2024年5月23日
    5400
  • java怎么实现多个接口,java多个接口有相同的方法

    java中接口可以实现多个接口吗? 1、但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。 2、首先,java中的接口别说实现多个接口了,一个接口也不能实现。因为接口中的方法是没有方法体的,所以不能实现任何接口。其次,一个接口可以继承多个接口。 3、java中没有多继承(就是不能继承多个父类),只有多重继承。 java怎么定…

    2024年5月23日
    3500
  • java截取字符串的方法,JAVA截取字符串中的一段字符

    java怎么获取字符串中指定的值? 在一个String字符串中 查找某个汉字的索引 可以使用str.indexOf(字) 获取在字符串中的索引位置,同样索引从0开始,若字符串中没有该汉字, 返回-1就行了。 用substring.具体用法:字符串截取,substring(int beginindex)返回一个新的字符串,它是此字符串的一个子字符串。subst…

    2024年5月23日
    4000
  • java字符串反向遍历,java 字符串反转方法

    java请问如何用reverse().toString();进行倒序输入字符串? 其实不需要用for循环,StringBuffer中已经提供了倒置的方法,貌似方法名也是叫reverse。 方法一:利用String类的toCharArray(),再倒序输出数组。 用两个StringBuilder,一个作全部的、一个作每一行的。 String类型对象的内容是不可…

    2024年5月23日
    4800
  • java调用函数的方法,java中调用函数的方法

    如何实现Java调用C或C++函数 1、(1)创建DLL文件使用某一种C/C++开发工具创建DLL文件,实现某一功能,供Java调用,例如本文在此使用Visual studio 2005创建一个名为testdll的动态库文件。(2)使用JNIJNI是Java Na***tive Interface的缩写,中文为Java本地调用。 2、首先创建Java文件 H…

    2024年5月23日
    4400
  • java字符串转码,java字符串转码方法

    java怎么把utf-8的字符串转换为gb2312格式 1、java不同编码之间进行转换,都需要使用unicode作为中转。 2、如果你想把utf-8转为GB2312 用记事本打开源码,把换成;如果是JS不需要加这句,如果是网页最好加上这句和你页面对应的编码。用记事本打开源码,另存为,编码 哪里选择 ANSI 即可。 3、如果只有一两个文件,用记事本打开 U…

    2024年5月23日
    3900
  • java快速排序法,java快速排序的两种方法

    如何用java实现快速排序,简答讲解下原理 1、【答案】:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)快速排序的伪代码。 2、最主要的是冒泡排序、选择排序、插入排序以及快速排序冒泡排序 冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下…

    2024年5月22日
    4900
  • 网络安全知识和维护方法,网络安全知识和维护方法有哪些

    怎样维护网络安全 1、第一,保持计算机系统和软件更新。为了防范网络攻击,我们必须定期更新安全补丁和操作系统。这些补丁都是为解决已知的漏洞和安全问题而发布的。下载升级补丁可以让你的电脑系统更加安全。第二,安装杀毒软件并定期扫描。 2、维护网络安全的应对之策有物理措施、访问控制、数据加密等。物理措施 例如,保护网络关键设备(如交换机、大型计算机等),制定严格的网…

    2024年5月22日
    3200

发表回复

登录后才能评论



关注微信