脚本语言效率都是低下的,PHP也不例外。而效率的高低实际上,都是在你的每一行代码中节省或浪费的。所以,这里向你讲解一些基本的效率常识,让你的代码执行速度快起来。
(注:看过N多版本的优化PHP代码的建议,觉得不系统,也不全面,这里只是给出平常极需要注意的一些。)
一、字符串问题
1、字符中拼接大于数组的implode, 也快于sprintf
你可以执行一下下面的代码:
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start=microtime_float();
// standard string append
$str = '';
for ($i = 300000; $i > 0; $i--) {
$str .= 'String concatenation. ';
}
$end = microtime_float();
echo("<br/> t i m e :" . round( $end - $start ,2) ."<br/>");
$start=microtime_float();
// array join
$str = '';
$sArr = array();
for ($i = 300000; $i > 0; $i--) {
$sArr[] = 'String concatenation. ';
}
$str = implode('',$sArr);
$end = microtime_float();
echo("<br/> t i m e :" . round( $end - $start ,2) ."<br/>");
?>
我机器的输出结果是:
t i m e :0.14
t i m e :0.25
2、字符串替换
同时,如果不能拼接,才考虑替换。而替换方式,要按以下的优先方式考虑写代码:
sprintf 快于 str_replace 快于 preg_replace 快于 strstr
3、字符串查找,字符串比较:
网上有人测试的结果是:
Results
ereg .956
preg_match .050
strstr .222
strpos .033
可见:
strpos 快于 preg_match 快于 strstr 快于 ereg
有人说,strstr快,但,preg_match_all肯定比for循环中的strstr快,如果能够explode,则还要比preg_match_all快
3、字符串输出:
echo 快于 print, 这不用讲了。 但是,如果将echo用到最快?
$foo = 'John SMITH';
echo "Hello $foo, welcome on my blog.";
echo "Hello " . $foo . " welcome on my blog.";
echo 'Hello ' . $foo . ' welcome on my blog.';
echo 'Hello ', $foo , ' welcome on my blog.';
我想,你能看得懂的,最后一个最快。
二、数组问题:
foreach 快于 for 这是大家都明白的。 不仅如此。如果真的用for ,你这样写是最好的
for($i=0,$j=count($array);$i<$j;$i++){
}
前面说了,数组用来做字串拼接,会慢,因为,你走了两循环。但很多操作,如果能用数组协助完成,则会很快。
比如:array_mar('trim',$array)肯定比你写for,foreach要快很多。
能先用explode拆成数组,最好不要在for循环中使用strpos.
in_array函数的效率问题。如果in_array频繁使用,而数组很大,建议将这个数组排序,然后,用fast_in_array
这是PHP手册中的用户添加的函数。(注:有待测试结果,小数组,in_array还是快于它)
This function is five times faster than in_array(). It uses a binary search and should be able to be used as a direct replacement:
<?php
function fast_in_array($elem, $array)
{
$top = count($array) -1;
$bot = 0;
while($top >= $bot)
{
$p = floor(($top + $bot) / 2);
if ($array[$p] < $elem) $bot = $p + 1;
elseif ($array[$p] > $elem) $top = $p - 1;
else return TRUE;
}
return FALSE;
}
?>
用数组改变你的所有能改变的控制结构。这不仅包括三元运算符,还有:if,switch。这还有另一好处,那就是能培养你的软编码模式的思维。
Instead of
$class = $class == 'even' ? 'odd' : 'even'
we have
$flip = array('even' => 'odd', 'odd' => 'even');
$class = $flip[$class];
三、函数问题
使用正名函数,不要用函数的别名。别名在PHP中是用于PHP的推广(比如split,join是VB中有的函数,implode,explode则是正名函数),或用于向旧版本兼容。一般速度没有正名的快。
count 快于 sizeof
is_integer 快于 is_int
floatval 快于 doubleval
implode 快于 join
ini_set 快于 ini_alter
当然,也有极个别的例外,比如:fputs 快于 fwrite, 我觉得,可以不管它。
分享到:
相关推荐
ZendOptimizer-3.3.0-Windows-i386是一个针对32位Windows系统的PHP性能优化工具,它通过优化PHP代码执行,提高Web应用的响应速度,同时提供版权保护和性能监控功能。为了利用这些优势,用户需要下载提供的exe文件...
PHP加速缓存扩展是用于提升PHP应用性能的一类工具,它们通过不同的机制减少服务器资源消耗、减少数据库访问次数,以及加快脚本执行速度。本文将详细介绍PHP中几个流行的加速缓存扩展——eAccelerator、memcached、...
标题中的“PHP7如何开启Opcode打造强悍性能详解”是指通过启用PHP7的内置模块Opcache,提升PHP脚本的执行效率,降低CPU和内存的消耗。描述中提到,Opcache是PHP官方公司Zend开发的优化加速组件,能够将PHP代码预编译...
首先,我们要了解Laravel的核心——Artisan命令行工具。Artisan是Laravel自带的一个强大的命令行接口(CLI),用于生成控制器、模型、迁移、路由等基础结构,甚至自定义命令。通过Artisan,开发者可以快速创建项目...
同时,启动和关闭服务的速度也有所加快,提升了开发者的工作效率。 “稳定”是这个版本的另一个关键亮点。PHPStudy20180211在前代基础上进行了大量的错误修复和稳定性测试,确保在各种环境下都能稳定运行。这使得...
2. **自动刷新**:通过开启实时刷新(LiveReload)功能,Elixir 可以在代码更改时自动刷新浏览器,无需手动刷新,加快了开发迭代速度。 3. **文件版本控制**:Elixir 可以自动为编译后的文件添加时间戳或哈希,确保...
同时,其自动完成功能能减少手动输入,加快编程速度。 3. **项目管理与多文档界面**:EditPlus提供了项目管理功能,允许用户同时打开并管理多个文件或项目,这对于需要处理大量文本的用户来说非常实用。多文档界面...
3. **自动完成**:输入代码时,提供智能提示,加快编码速度。 4. **宏功能**:录制和播放宏,重复执行一系列操作。 5. **文件搜索**:快速搜索文件内容,定位代码。 6. **FTP/SFTP集成**:直接通过编辑器上传和下载...
另外,Laravel Horizon的引入提供了队列监控,有助于优化后台任务的执行效率。 3. MySQL与MariaDB数据库集成: 作为任务跟踪系统的核心,数据库用于存储任务信息、用户数据和权限设置等。MySQL与MariaDB都是广泛...
2. **加快开发速度**:在开发早期发现问题可以避免后期修复成本高昂的问题,从而加快整个项目的进度。 3. **简化维护工作**:随着软件系统的不断演化,良好的单元测试覆盖可以显著减少未来维护时的工作量。 4. **...
- **索引**:为了提高查询效率,MySQL提供了索引机制,通过创建索引可以大大加快数据检索的速度。 #### 2. SQL基础 - **SELECT语句**:用于从数据库中查询数据,是最常用的SQL语句之一。 - **INSERT语句**:用于向...
而“织梦CMS文章主动推送百度插件”为站长们提供了将新内容快速推送给百度的途径,使新内容被索引的速度大大加快,从而提升网站的搜索排名。 该插件使用起来十分便捷。站长们首先需要下载最新版本的插件压缩包,并...