优化PHP程序

 网上很多文章介绍优化php程序,是通过安装Zend Optimizer之类的加速软件实现的,但这种加速是有限的。本文主要从程序代码着手介绍一些优化手段。

1、程序的抽象层越多,各抽象层分离得越严格,程序效率越低。

最原始的应用于网页的php程序模式莫过于脚本嵌入模式,即仅仅在一个网页中需要动态处理或显示数据的地方通过加入标识符嵌入php脚本。一般来说这是php程序员最早学习的模式,它只有一个抽象层,就是网页,故本文称其为单层模式。

随着网站规模逐渐增大,程序员可能会发现单层模式的程序很难维护,当想对程序修改或扩充功能时,会发现代码非常混乱,感觉无从下手。于是模板类诞生了,它使一个网页由两个文件组成:一个php程序文件,一个html模板文件。常用的模板类有PHPLib库带的Template模板类,Smarty模板类等。由于加入了额外的处理程序(模板类),程序效率下降了。你若不信可自己测试一下。其实一般情况下,不用函数(最原始的编程方法)比用函数(面向过程)的效率高,而用函数的效率又比对象封装(面向对象)高。所以就算在编译语言中,需要高效率的地方会用C写而不用C++,例如FreeBSD操作系统的内核;而需要极端高效的地方还要用汇编写。

为了使程序可以适应多种数据库系统,或者方便随时转换数据库系统,常常还会用一个类把跟数据库打交道的函数封装起来,这样当转换数据库系统时只要把封装类换掉就行了,主程序不需要修改。这里又用了一个类,效率又打折扣了。

上述模板类的使用,使程序分成两个抽象层:程序层和表现层。而数据库类的使用又把程序层分为数据接口层和数据处理层。

项目越庞大,需要分离的抽象层就越多,这样使得分工清晰,方便管理,但是以牺牲程序执行效率为代价。

对于抽象层造成的效率下降,优化的方法有二:减小抽象层、优化抽象层之间的接口。一般地,不应该为了提高效率而盲目减小抽象层,这样会使得代码混乱、难于管理。但是不应该为小项目建立过多的抽象层,除非你有将来把它做得很大的计划。关于如何恰当分割抽象层,本文不作更深入讨论。

对于上文说的两个分层例子,优化抽象层之间的接口分别是模板类和数据库操作类。抽象层接口在程序中需要被频繁调用,以在不同层之间交换信息,所以层接口是很值得优化的。对于数据库接口类,可能仅仅是封装一些数据库函数,优化余地恐怕不大。对于模板类,很多时候是有较大优化余地的。一般地,模板模型越通用,模板类功能越强大,效率就越低,例如PHPLib库带的Template类就有极大的优化余地。而Smarty模板类比PHPLib的Template更复杂,我没有用过,据称有缓存机制,不知是否可以弥补其性能损耗。下面就来看看PHPLib的Template类有多少东西可以优化掉。

(1) 读入模板文件时,file函数效率低,改用get_file_content函数。

(2) 匹配子模板时,正则表达式替换函数preg_replace效率低,改用str_pos函数进行定位和用str_replace函数进行替换操作。此优化手段后文会详细分析。

(3) 模板模型通用性很强,能适应各种情况,但在具体细节的处理上,通用的方法效率可能很低。可以对模板模型作适当修改。我的做法是建一个相对通用的模板类,然后再派生出一个只适用于特定程序的模板类。在通用模板类的模板模型上可以作些优化(相对于PHPLib的Template),例如在处理二维数据表的时候用PHPLib的Template处理就比较复杂,需要多次调用类方法(本质上是函数调用),所以重写的时候可以把处理二维数据表的功能封装到一个高效率的方法中,直接避免方法的多次调用。

(4) 调试功能在小项目上不需要用,跟调试相关的代码全部去掉。

我在按上面4点重写了模板类之后,一个复杂页面的执行时间缩小了一个数量级(除模板外没有作其它优化)。

现在就优化你的程序的抽象层之间的接口,特别是当这些接口是使用现成的函数或类的时候。因为这些函数或类在设计时会为了适应普遍情况而牺牲一些效率,而且它们的作者也可能没有考虑效率问题。像如此著名的PHPLib的模板类的效率也不见得就高。

2、细节代码优化

(1) 上文模板类优化已提到的,正则表达式匹配比一般字符串匹配慢得多,尽可能用字符串匹配而不用正则表达式匹配。有时候虽然用正则表达式匹配使程序代码更简洁,而一般字符串匹配使代码更冗繁,但很多时候字符串匹配仍比正则表达式高效。

(2) 字符串替换函数str_replace和preg_replace都是可以接受数组参数的。有时候需要对字符串进行批量替换,则用数组参数比循环调用替换函数来得高效。例如下面的代码:

for ($i = 0; $i < $n; $i++) {
$str = str_replace($search[$i], $replace[$i], $str);
}

应该换成:

$str = str_replace($search, $replace,

时间: 2024-09-24 19:59:00

优化PHP程序的相关文章

SQL Server 利用锁提示优化Row_number()-程序员需知

原文:SQL Server 利用锁提示优化Row_number()-程序员需知 网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速度.   直接上菜   脚本环境可在SQL Server优化技巧之SQL Server中的"MapReduce"找到   如下查询在分页中比较常见 set statistics time on select *

数据-哪位有微电网容量优化的程序啊

问题描述 哪位有微电网容量优化的程序啊 微电网各种分布式电源的容量的优化配置,要数据和程序一起,感谢感谢 解决方案 是这个吗?http://wenku.baidu.com/link?url=bp7kmXEHIOKG7Go6Mq-DAKfsuR_-HOBJO-VlvwhiFkNWwQ5ERPjkeFUjPkn-8uTRnZKIQV1c6FycP0hX-pNR3JECPrUbcudKYiPifIz6wD7 解决方案二: 参考:http://www.docin.com/p-280011835.html

关于blog系统中最合适做优化的程序

本篇文章主要是介绍的关于blog系统中最合适做优化的程序. ASP程序的blog程序典型代表推荐:Z-blog Z-blog程序优化特点: 01.支持自定义内容页面url. 02.支持自定义栏目url. 03.模板定制功能.   04.可视化编辑器. 05.可以将文章生成静态html页. Z-blog程序综合点评 这是目前国内使用最多的asp语言的blog程序了.已经超过了L-blog,成为国内asp blog的老大,升级更新也比较快,模板比较多.很多功能对seo很是方便.但是Z-blog的操作

完全优化ASP程序性能

ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在 HTML 页面中的脚本程序得以运行的环境,而在ASP中最常用的脚本语言就是VBScript了.虽然ASP的脚本语言很简单,但是要想让一个ASP程序能够最优化的运行也不是一件简单的事情. 现在国内的网络带宽很有限,网络十分拥挤,如何使得自己的ASP应用程序能够快速的运行就成为了每一个ASP程序员的梦想了.那就跟随我来一同加速你的ASP程序吧! 一. 有关操作数据库的优化方法 我们使用ASP最主要的用途就是对数据库进行操作了,如何更快速的完成

优化ASP程序技巧四则

程序|技巧|优化 本文将向大家介绍四则优化ASP应用程序的技巧. 1.将经常使用的数据缓存在 Application 或 Session 对象中 ASP的Application和Session对象为将数据暂存在内存中提供了方便的容器.你可以将数据指派到 Application和Session对象中,这些数据在HTTP调用之前保留在内存中.Session数据是按每个用户分别存储的,而Application数据则在所有用户之间共享. 什么时候将数据装载到 Application 或 Session

PHP技巧:使用APC缓存优化PHP程序

Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存.它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码. 在 Windows 下,APC 要求有 c:\tmp 目录,并且该目录要对 Web 服务器进程可写. 1.安装 以PHP extension 形式安装 2.配置 apc.enabled        boolean apc.optimization   optimization 选项在脚本中可以改变 APC PHP.ini配置选项详解

优化ASP程序

程序|优化   ASP编程应该是比较容易上手,运用frontpage.VI等工具,可以十分方便地构键WEB页面,而VBScript/JavaScript等脚本语言也很容易上手.当掌握了ASP编程之后,也许你比较关心的是程序的效率问题,即怎样使你的程序更加迅速地执行,而少占用服务器的CPU和内存开销,这一点很重要,如果有很多人访问你的网站,这种因数必须被考虑,否则系统崩溃可不是好玩的.  这里我们的讨论以VBScript讨论为主.  1.避免使用VBScript的动态数组.    VBScript

优化Asp程序的性能

ASP 能快速执行你的动态网页,但你还可以通过紧缩代码和数据库连接以使它们执行更快.这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度的详细文章.对于一个急燥的用户来说,任何在按下用户按钮到结果出现在它们的屏幕之间的延迟可能意味着它们会转到浏览其它的站点?假如你的是商业站点,这有可能意味着失去潜在的销售. 我们没有任何办法控制用户的带宽,但我们的确能通过优化Asp 站点来获得最佳的性能.大部分潜在性能的提升是通过系统改变而不是紧缩代码,一个不合适的想法是,一旦遇到系统效率问题,就向系统管理

PHP中使用APC缓存优化PHP程序

Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存.它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码. 在 Windows 下,APC 要求有 c:\tmp 目录,并且该目录要对 Web 服务器进程可写. 1. 安装: 以PHP extension 形式安装. 2. 配置 apc.enabled boolean apc.optimization optimization 选项在脚本中可以改变 APC PHP.ini配置选项详解 [APC