首页 > 编程技术 > php

PHP应用程序加速探索之简介

发布时间:2016-11-25 16:15

  (一)简介
  本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。
  (二)是否需要加速?
  这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。
  我想对于大部份人(包括我自己)来说,很多WEB项目都是在很紧张的时间里完成的,通常没有经过缜密的思考和严格的测试。当开始一个新的WEB项目。很多人都在构建那种“快而乱”的应用,缺乏必要的时间来调整和改良代码,这时优化和加速就是我们必须采取的措施。
  然而需要特别指出的是,并不是所有程序都需要加速。
  优化已完成的代码是很浪费时间的,最好的方法是在写代码的时候就注意到效率,然后完成项目后只优化确实需要优化的那部份。一般一个程序只会有少数几个影响速度的瓶颈,将它们找出来并解决掉,程序就可以很好地运行。另外,当遇到执行效率低下的情况,首先要用大局的眼光来找出影响效率的主要因素,而不要拘泥于细节—例如数据量过大,服务器带宽不够,或硬件配置过低,在这样的情况下,优化代码于事无补。
  另外,在没有发现程序有明显的执行缓慢的迹象时,就不要太吹毛求疵,为了改进一些非常细节的代码而浪费时间。用这些时间,你可以完成另一个项目或为原来的项目完成一个扩展功能。当然你可以笑话我不够负责,没有把工作做得尽善尽好,我也可以说你是完美主义者。
  
  综上,在你决定为你的PHP程序提速之前,问问自己是否有必要。
  (三)如何加速?
  要回答“如何加速”这个问题前,需要先回答以下两个小问题:
  1. 你的程序慢在哪一部份?
  2. PHP可以从哪几个方面考虑加速?
  第一个小问题显然我无法给你答案,但我建议你用“测试脚本执行速度”的方法来解决。只有找出限制速度的瓶颈,才能考虑如何去解决。
  第二个小问题我大概的答案是:代码优化,压缩输出,内容缓存输出,函数缓存输出,加速/缓存工具软件。如果你知道更多请告诉我。
  下面我们来详细地研究一下这几个方面的相关技术。当然实际上每个方面都有无数的细节可以讨论,下面的内容难免会有片面的地方,欢迎补充。


  服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的Apache服务器为例。
  Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。
  在命令行下输出:

./ab -n number_of_total_requests
-c number_of_simultaneous_requests
http://your_web_server/your_php_app.php
  例如:

./ab -n 1000 -c 50 http://www.domain.com/myapp.php
  AB将同时向http://www.domain.com/myapp.php发出50个并发请求,共发出1000次。
  测试结果将可能是这样的:

Server Software: Apache/2.0.16
Server Hostname: localhost
Server Port: 80
Document Path: /myapp.php
Document Length: 1311 bytes
Concurrency Level: 50
Time taken for tests: 8.794 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1754000 bytes
HTML transferred: 1311000 bytes
Requests per second: 113.71
Transfer rate: 199.45 kb/s received
Connection Times (ms)
min avg max
Connect: 0 0 5
Processing: 111 427 550
Total: 111 427 555
  myapp.php每秒钟可以处理的请求数为113.71个。将请求数增加,看看服务器能否处理更大的压力。你也需要调节Apache的MaxClients,ThreadsPerChild,MaxThreadsPerChild等参数,基于你的httpd.conf中的MPM模块选择。
  如果你想得到更详细的信息,请到www.apache.org上查阅一些更深入的文档,包括模块和第三方的提高效率的工具。修改httpd.conf后,要重启Apache服务器,然后再用AB测试。你会看到每秒请求数增加或减少。
  记下每次的参数,最后选择最佳效率的那种配置。
  要指出的是,除了AB,还有许多优秀的服务器性能测试软件。另外,如果你的服务器不是Apache,请自行寻找测试方法。
  PHP是常用的Web网站开发工具之一,以简单和库函数丰富闻名。与.NET和Java不同的是,PHP没有大公司为后台,他的支持主要来源于开源社区。在PHP的发展历程上PHP4和PHP5是两个很重的历程,在PHP4中加入了Zend引擎,在PHP5中提供了完善的面向对象支持,成为真正的OO语言。
  在微软发布.NET以及Sun推出J2EE后,很多人认为PHP会逐渐衰落下去,不好意思也包括小编,但5年过去了,PHP的爱好者有增无减,PHP社区依然热闹非凡,小编经过痛苦反思后,决定自我救赎,于是组织了这个针对PHP初学者的专题。
  1.PHP5.0安装配制
  
一、 安装APACHE1.3.9(配置conf目录下的httpd.conf文件)
  1.
   #BindAddress * 改为 BindAddress 127.0.0.1
   #Servername new.host.name 改为 Servername localhost
  
  2.
  让你的APACHE来支持PHP4.加上下面这么几句:
  ScriptAlias /php4/ "C:/php4/"
  AddType application/x-httpd-php4 .php
  AddType application/x-httpd-php4 .php3
  AddType application/x-httpd-php4 .php4
  Action application/x-httpd-php4 "/php4/php.exe"
  3.
  设置Apache虚拟目录,加入以下行:
  Alias /test/ "c:/php3/test/"
  Alias /jjjj/ "d:/timenet/"
  4.
  增加默认启动文档:
  DirectoryIndex index.html
  DirectoryIndex index.htm  
  DirectoryIndex index.php
  DirectoryIndex index.php3
  DirectoryIndex index.php4
  5.
  测试文件info.php:
  <? phpinfo(); ?>
  在浏览器中输入http://localhost/info.php
  二、php4安装(php-4.0.2pl2-Win32.zip)
  1.将软件包解压到c:php4下。
 
  2. 再将目录下的所有dll文件拷到c;winntsystem32下,不要覆盖已有的dll文件。将目录下的php.exe和php.ini-dist两个文件拷到c:winnt下;
  3. 将winntphp.ini-dist改名为php.ini,并找到;Windows Extensions项将
  extension_dir =c:php4
  extension=php_zlib.dll
  extension =php_ldap.dll
  extension =php_zlib.dll
  extension =php_calendar.dll
  extension =php_exif.dll
  extension =php_ftp.dll
  extension =php_mssql70.dll (这一项不要加,没有MSSQL7.0呀)
  extension =php_imap.dll
  有就去掉前面的分号,没有就自己加上。这个部分容易出现错误,是因为在php.ini文件中指定加载了无效的或者不存在的php_*.dll文件,加载这些错误信息还可能导致浏览器寻找不到服务器。
 
  4. PHP.INI其他设置:
  asp_tags = On ; 允许使用ASP风格的标记
  upload_max_filesize = 2097152;上载文件的最大字节 (关于mysql的设置)
要实现下列功能,请确保 php.ini 中的 com.allow_dcom 选项已设为 true。
一、准备工作
新建一个ACCESS数据库,并命名为db.mdb,然后在这个数据库中新建一个表 comtest,包含 id 和 title 两个字段,最后随便插入一些数据。
二、实现代码
<?php
// 就是刚建的数据库
$db = 'd:wwwrootdb.mdb';
// 建立连接,并打开
$conn = new COM('ADODB.Connection') or die('can not start Active X Data Objects');
//$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db");
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// 执行查询并输出数据
$rs = $conn->Execute('SELECT * FROM comtest');
?>
<table border="1">
<tr><th>ID</th><th>Title</th>
</tr>
<?php
while (!$rs->EOF) {
echo '<tr>';
echo '<td>'. $rs->Fields['id']->Value .'</td>';
echo '<td>'. $rs->Fields['title']->Value .'</td>';
echo '</tr>';
$rs->MoveNext();
}
?>
</table>
<?php
// 释放资源
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: