Home Backend Development PHP Tutorial 向PHP要效率――加速你的代码执行速度

向PHP要效率――加速你的代码执行速度

Jun 13, 2016 pm 01:01 PM
array echo float php

向PHP要效率――加快你的代码执行速度

脚本语言效率都是低下的,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/>");    

?>

Copy after login

?

我机器的输出结果是:

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; 
} 
?> 

Copy after login

?

用数组改变你的所有能改变的控制结构。这不仅包括三元运算符,还有: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, 我觉得,可以不管它。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

In this chapter, we are going to learn the following topics related to routing ?

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP Creating Validators CakePHP Creating Validators Sep 10, 2024 pm 05:26 PM

Validator can be created by adding the following two lines in the controller.

See all articles