优化PHP程序
先我们了解一下我们的php程序是怎样执行的,首先他被编译为中间代码,然后中间代码被送入执行引擎执行,然后销毁。每个请求的中间代码在执行完之后被销毁,这样的好处在于他完全隔离了不同的请求,使内存使用率降低。但是这样的缺点也显而易见,因为他需要再重复请求一个界面的时候对一个代码连续编译两次,编译的中间代码没有一点复用性。
我们拿ZPS来说事,看他能提供什么优化功能:
一, 自动优化
,也就是我们的zend
optimizer提供的功能,他可以对中间代码进行优化,这些优化是语言方面的,将效率低的转化为效率高的,但他的优化目标只限定在中间代码,因此不会影响你编写的源代码。这个能提高20%左右的性能。
二,
代码编译缓存
,就是使中间代码更有复用性。因为他会把中间代码进行缓存,下次使用的时候就不需要编译了,这个有50%到300%的性能提升。
三,
动态内容缓存
,也就是把php代码执行完之后生成的内容进行缓存,这个适用于幂等的请求,而且请求不会对服务器端的数据造成修改,而只是get数据内容。这个提升效果最大,但对于个性化的界面不太适合,您可以选择使用部分缓存的方式,但明显提高了复杂度。
四,内容压缩
:他主要是提高HTTP的传输效率,使传输量减少90%左右,但他也有牺牲,就是增加了两端(c/s)的计算量。但ZPS使用对压缩文件也进行缓存的方式来减少压缩所带来的性能影响。
另外就是细节方面的性能考虑:
1.对于require和include:
不是说使用上apc就一劳永逸了。
Include_once(),require_once()比include,require要慢,因此可以考虑将require_once()换成require().
另外包含一个文件会增加许多内存使用,因此对于大的包含文件你应该考虑如何切割成多个小文件,因为opcode缓存只能优化加载时间,而不会减少内存使用大小。
2.少用define ,在类中使用const变量来代替,因为据说后者可以被opcode缓存,而前者不能。
3.使用C语言。很多人认为“你应该到达不到这种优化需求吧”,但是确实我在写一个推荐系统的时候遇到这个需求,如何在php中使用c来优化性能这个问题留给以后吧,等我研究明白了再贴。
4.使用面向过程代替面向对象。具体原因不知道为什么。另外http://www.javaeye.com/topic/143440
这篇文章中提到的”php的最佳实践就是数组编程”也很有新意,大部分也是基于性能的考虑。
另外一些小的优化技巧,我这里就不说了,看下面链接。
40条优化PHP代码的
相关文档:
使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,别说,php还真有这样的功能。
我没有在手册中看到。
如我想增加bcmath支持,这是一个支持大整数计算的扩展。windows自带而且内置,linux“本类函数仅在 PHP 编译时配置了 --ena ......
PHP 中巧用数组降低程序的时间复杂度
王 丹丹, 高级软件工程师, IBM
2009 年 11 月 26 日
本文主要是介绍在 PHP 的编程中,如何巧用数组来降低因多层循环而引起的时间复杂度的问题。特别是当程序需要多次与数据库交互时,用此方法来优化你的代码,将会带给意想不到的效果。
通常开发人员在写程序的时候,往往是把已经设 ......
<?php
$link=mysql_connect("localhost","root","root");
$db=mysql_select_db("bustest",$link);
$sql1="select name from info group by name order by id asc";
print("<table border='1'>");
$res1=mysql_query($sql1);
while($row1=mysql_fetch_array($res1)){
$name=$row1["name"];
$sql2="select i ......
腾讯的QQ空间根据会员资料计算生日并提醒好友发送生日祝福,一些网站也有类似的功能,比如提前几天向会员发送祝福邮件。
大致过程如下:设置一个自动执行程序,比如Linux下可以用CronTab 实现。此程序每天执行一次读取会员资料中的birth_day,
判断是否符合设置的发送要求。假如设置提前三 ......