Holmesian Blog

PHP 性能优化技巧

在 Google 的 Google Code 所制作的 "Let's make the web faster"(让我们使 Web 运行得更快)网站中,分享了一些网页性能优化的技巧、教程以及工具。信息来源:LSY

一、不要随意复制变量

有时候,为了让 PHP 代码看起来更加整洁,一些 PHP 新手(包括我自己)会将预定义好的变量复制到一个名称更简短的变量中。然而,这样做的结果是会增加一倍的内存消耗,进而导致程序运行速度变慢。想象一下,在以下例子中,如果用户恶意将 512KB 的内容插入到文本输入框中,将会消耗 1MB 的内存!

错误示例(BAD)

$description = $_POST['description'];
echo $description;

正确示例(GOOD)

echo $_POST['description'];

二、对字符串使用单引号

PHP 引擎允许使用单引号和双引号来包含字符串变量,但二者存在很大差别。使用双引号时,PHP 引擎会先读取字符串内容,查找其中的变量,并将其替换为相应的值。一般情况下,字符串中通常没有变量,所以使用双引号会影响性能。建议使用字符串连接而不是双引号来表示字符串。

错误示例(BAD)

$output = "This is a plain string";

正确示例(GOOD)

$output = 'This is a plain string';

错误示例(BAD)

$type = "mixed";
$output = "This is a $type string";

正确示例(GOOD)

$type = 'mixed';
$output = 'This is a '. $type.' string';

三、使用 echo 函数输出字符串

使用 echo() 函数输出结果不仅更易于阅读,而且在性能方面表现更好,如下例所示。

错误示例(BAD)

print($myVariable);

正确示例(GOOD)

echo $myVariable;

四、避免在 echo 中使用连接符

许多 PHP 程序员(包括我自己)可能不知道,在输出多个变量时,其实可以使用逗号将它们分隔开,而不必先使用字符串将它们连接起来。在下面的第一个示例中,由于使用了连接符,会产生性能问题,因为这会使 PHP 引擎首先将所有变量连接起来,然后再输出;而在第二个示例中,PHP 引擎会按顺序输出它们。

错误示例(BAD)

echo 'Hello, my name is'. $firstName. $lastName. ' and I live in '. $city;

正确示例(GOOD)

echo 'Hello, my name is', $firstName, $lastName, ' and I live in ', $city;

五、使用 switch/case 代替 if/else

对于仅涉及单个变量的判断,使用 switch/case 语句会比 if/else 语句具有更好的性能,并且代码的可读性和可维护性更强。

错误示例(BAD)

if($_POST['action'] == 'add') {
  addUser();
} elseif ($_POST['action'] == 'delete') {
  deleteUser();
} elseif ($_POST['action'] == 'edit') {
  editUser();
} else {
  defaultAction();
}

正确示例(GOOD)

switch($_POST['action']) {
    case 'add':
      addUser();
      break;
    case 'delete':
       deleteUser();
      break;
    case 'edit':
       editUser();
       break;
    default:
       defaultAction();
       break;
}

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »