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

 更新时间:2016年11月25日 16:15  点击:2197
  (一)简介
  本文尝试对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--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Android应用程序启动时出现白色背景问题

    Android应用程序启动时出现白色背景问题要如何来解决呢,我们下面就一起来看一篇关于启动时的一些小问题,具体的如下文介绍. Android应用程序开发过程中,为了使应用...2016-11-01
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25
  • php中echo <<< 的应用

    <? $a="变量的值将被带入"; echo <<< help <pre> php中echo <<< 的应用 虽然echo "...";可以断行,但若其中如出现",则仍需做转义 处理。需写做: echo " ...2016-11-25
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • Vue中keep-alive的两种应用方式

    这篇文章主要介绍了Vue中keep-alive的两种应用方式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • ajax简单与ajax+php实例应用(1/4)

    [ajax介绍]   ajax是使用客户端脚本与web服务器交换数据的web应用开发方法。web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用ajax,用户可以创建接近本地...2016-11-25
  • css中Float属性深入剖析与应用

    这篇文章介绍了css中的float属性的应用和理解,让设置的标签产生浮动效果。希望能帮助到有需要的同学。 一、Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框...2017-01-22
  • php ob_start() ob_end_flush()缓存技术简单应用

    本文章介绍了一个简单的关于php入门篇-缓存技术简单应用,有需要的朋友可以看看哦,这里是利用了ob_start(); ob_end_flush(); 来实例的。 代码如下 复制...2016-11-25
  • Android 应用包 apk 的内部结构详解

    Android应用程序会通过一个工具将应用所有的CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。 Android 是Google开发的基于Linux平台的开源手机操...2016-09-20
  • Android应用程序组成部分 Manifest文件 Manifest文件节点

    本文我们讲讲Android开发中比较高级的内容,应用程序组成部分,Manifest文件,Manifest文件节点,在Android平台的应用程序开发过程中,Manifest文件举足轻重。每一个应用程序...2016-09-20
  • 时隔数日苹果又发布了iOS 10.2 Beta3:TV应用来了

    网易科技讯 11月14日消息,据美国媒体报道,当日苹果开始推出iOS 10.2 Beta3公开测试版,距离发布iOS 10.2 Beta2发布后仅数日。此外,苹果还推出数周前发布MacBook Pro时提到的TV应用,现在该应用有了Up Next功能。...2016-11-22
  • 使用 Rails API 构建一个 React 应用程序的详细步骤

    这篇文章主要介绍了使用 Rails API 构建一个 React 应用程序的详细步骤,主要包括后端:Rails API部分,前端:React部分及React组件的相关操作,具有内容详情跟随小编一起看看吧...2021-08-09
  • c#多线程的应用全面解析

    这篇文章主要介绍了c#多线程的应用,有需要的朋友可以参考一下...2020-06-25
  • 重新应用默认的安全设置 : 安全配置和分析

    安全配置和分析概述“安全配置和分析”是分析和配置本地系统安全性的一个工具。...2016-01-27