ホームページ バックエンド開発 PHPチュートリアル 优化php效率,提高php性能的一些方法_php技巧

优化php效率,提高php性能的一些方法_php技巧

May 17, 2016 am 09:20 AM
PHPのパフォーマンス PHP効率

1、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
2、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
3、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
4、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
5、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
6、多维数组尽量不要循环嵌套赋值;
7、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
8、foreach效率更高,尽量用foreach代替while和for循环;
9、用单引号替代双引号引用字符串;
10、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
11、对global变量,应该用完就unset()掉;
12、在for或者foreach中,用 $tempArray[] = $field代替 $tempArray[count($tempArray)] = $field
13、静态调用的成员一定要定义成 static (PHP5 ONLY)
贴士:PHP 5 引入了静态成员的概念,作用和 PHP 4 的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多,所有类的实例共享同一个静态变量。

QUOTE:

复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
class foo {
function bar() {
echo 'foobar';
}
}
$foo = new foo;
// instance way
$foo->bar();
// static way
foo::bar();
?>

静态地调用非 static 成员,效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告,内部也需要做转换。
使用类常量 (PHP5 ONLY)
贴士:PHP 5 新功能,类似于 C++ 的 const。
使用类常量的好处是:
- 编译时解析,没有额外开销
- 杂凑表更小,所以内部查找更快
- 类常量仅存在于特定「命名空间」,所以杂凑名更短
- 代码更干净,使除错更方便
(暂时)不要使用 require/include_once
require/include_once 每次被调用的时候都会打开目标文件!
- 如果用绝对路径的话,PHP 5.2/6.0 不存在这个问题
- 新版的 APC 缓存系统已经解决这个问题
文件 I/O 增加 => 效率降低
如果需要,可以自行检查文件是否已被 require/include。
不要调用毫无意义的函数
有对应的常量的时候,不要使用函数。
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
php_uname('s') == PHP_OS;
php_version() == PHP_VERSION;
php_sapi_name() == PHP_SAPI;
?>

虽然使用不多,但是效率提升大概在 3500% 左右。
最快的 Win32 检查
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
$is_win = DIRECTORY_SEPARATOR == '\\';
?>

时间问题 (PHP>5.1.0 ONLY)
用系统变量$_SERVER['REQUEST_TIME'],代替系统函数time()
加速 PCRE

这样 PHP 不用为符合的内容分配内存,省。效率提升 15% 左右。
- 能不用正则,就不用正则,在分析的时候仔细阅读手册「字符串函数」部分。有没有你漏掉的好用的函数?
例如:
strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()
加速 strtr
如果需要转换的全是单个字符的时候,用字符串而不是数组来做 strtr:
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
$addr = strtr($addr, "abcd", "efgh"); // good
$addr = strtr($addr, array('a' => 'e',
// ...
)); // bad
?>

效率提升:10 倍。
不要做无谓的替换
即使没有替换,str_replace 也会为其参数分配内存。很慢!解决办法:
- 用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换
效率:
- 如果需要替换:效率几乎相等,差别在 0.1% 左右。
- 如果不需要替换:用 strpos 快 200%。
邪恶的 @ 操作符
不要滥用 @ 操作符。虽然 @ 看上去很简单,但是实际上后台有很多操作。用 @ 比起不用 @,效率差距:3 倍。
特别不要在循环中使用 @,在 5 次循环的测试中,即使是先用 error_reporting(0) 关掉错误,在循环完成后再打开,都比用 @ 快。
善用 strncmp
当需要对比「前 n 个字符」是否一样的时候,用 strncmp/strncasecmp,而不是 substr/strtolower,更不是 PCRE,更千万别提 ereg。strncmp/strncasecmp 效率最高(虽然高得不多)。
慎用 substr_compare (PHP5 ONLY)
按照上面的道理,substr_compare 应该比先 substr 再比较快咯。答案是否定的,除非:
- 无视大小写的比较
- 比较较大的字符串

不要用常量代替字符串
为什么:
- 需要查询杂凑表两次
- 需要把常量名转换为小写(进行第二次查询的时候)
- 生成 E_NOTICE 警告
- 会建立临时字符串
效率差别:700%。

不要把 count/strlen/sizeof 放到 for 循环的条件语句中
贴士:我的个人做法
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
for ($i = 0, $max = count($array);$i ?>

效率提升相对于:
- count 50%
- strlen 75%
短的代码不一定快
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
// longest
if ($a == $b) {
$str .= $a;
} else {
$str .= $b;
}
// longer
if ($a == $b) {
$str .= $a;
}
$str .= $b;
// short
$str .= ($a == $b ? $a : $b);
?>

你觉得哪个快?
效率比较:
- longest: 4.27
- longer: 4.43
- short: 4.76
不可思议?再来一个:
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
// original
$d = dir('.');
while (($entry = $d->read()) !== false) {
if ($entry == '.' || $entry == '..') {
continue;
}
}
// versus
glob('./*');
// versus (include . and ..)
scandir('.');
?>

哪个快?
效率比较:
- original: 3.37
- glob: 6.28
- scandir: 3.42
- original without OO: 3.14
- SPL (PHP5): 3.95
画外音:从此也可以看出来 PHP5 的面向对象效率提高了很多,效率已经和纯函数差得不太多了。
提高 PHP 文件访问效率
需要包含其他 PHP 文件的时候,使用完整路径,或者容易转换的相对路径。
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
include 'file.php'; // bad approach
incldue './file.php'; // good
include '/path/to/file.php'; // ideal
?>

物尽其用
PHP 有很多扩展和函数可用,在实现一个功能的之前,应该看看 PHP 是否有了这个功能?是否有更简单的实现?
QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
$filename = "./somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
// vs. much simpler
file_get_contents('./somepic.gif');
?>

关于引用的技巧
引用可以:
- 简化对复杂结构数据的访问
- 优化内存使用

QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
$a['b']['c'] = array();
// slow 2 extra hash lookups per access
for ($i = 0; $i $a['b']['c'][$i] = $i;
// much faster reference based approach
$ref =& $a['b']['c'];
for ($i = 0; $i $ref[$i] = $i;
?>

QUOTE:
复制代码 代码如下:

// PHP CODE Highliting for CU by dZ902
$a = 'large string';
// memory intensive approach
function a($str)
{
return $str.'something';
}
// more efficient solution
function a(&$str)
{
$str .= 'something';
}
?>
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP を使用してパフォーマンス分析とチューニングを行う方法 PHP を使用してパフォーマンス分析とチューニングを行う方法 Jun 06, 2023 pm 01:21 PM

PHP は人気のあるサーバーサイド言語として、Web サイトの開発と運用において重要な役割を果たしています。ただし、PHP コードの量が増加し続け、アプリケーションが複雑になるにつれて、パフォーマンスのボトルネックが発生する可能性がますます高まっています。この問題を回避するには、パフォーマンスの分析とチューニングを実行する必要があります。この記事では、PHP を使用してパフォーマンス分析とチューニングを行い、アプリケーションにより効率的な実行環境を提供する方法を簡単に紹介します。 1. PHP パフォーマンス分析ツール 1.XdebugXdebug は、広く使用されているコード分析ツールです。

同時プログラミング フレームワークを使用して PHP のパフォーマンスを向上させる方法 同時プログラミング フレームワークを使用して PHP のパフォーマンスを向上させる方法 Aug 12, 2023 am 09:33 AM

同時プログラミング フレームワークを使用して PHP のパフォーマンスを向上させる方法 Web アプリケーションの複雑さが増し続けるにつれて、開発者は高い同時実行処理が直面する課題となっています。従来の PHP 言語には、同時リクエストを処理する際にパフォーマンスのボトルネックがあり、開発者はより効率的なソリューションを見つける必要がありました。 Swoole や ReactPHP などの同時プログラミング フレームワークを使用すると、PHP のパフォーマンスと同時処理能力を大幅に向上させることができます。この記事では、Swoole と ReactPHP を使用して PHP アプリケーションのパフォーマンスを向上させる方法を紹介します。私達はします

PHP CI/CD と PHP のパフォーマンス: プロジェクトのパフォーマンスを向上させるには? PHP CI/CD と PHP のパフォーマンス: プロジェクトのパフォーマンスを向上させるには? Feb 19, 2024 pm 08:06 PM

PHPCI/CD の概要 CI/CD (継続的インテグレーションおよび継続的デリバリー) は、開発チームが高品質のソフトウェアをより頻繁に配信するのに役立つソフトウェア開発手法です。 CI/CD プロセスには通常、次の手順が含まれます。 開発者はコードをバージョン管理システムに送信します。ビルド システムは自動的にコードをビルドし、単体テストを実行します。ビルドとテストに合格すると、コードがテスト環境にデプロイされます。テスターはテスト環境でコードをテストします。テストに合格すると、コードが実稼働環境にデプロイされます。 CI/CD は PHP プロジェクトのパフォーマンスをどのように向上させますか? CI/CD は、次の理由により PHP プロジェクトのパフォーマンスを向上させることができます。 自動テスト。 CI/CD プロセスには自動テストが含まれることが多く、開発チームがバグを早期に発見して修正するのに役立ちます。これ

PHP におけるセキュリティとパフォーマンスのトレードオフ PHP におけるセキュリティとパフォーマンスのトレードオフ Jul 06, 2023 pm 08:57 PM

PHP におけるセキュリティとパフォーマンスのトレードオフの概要: 人気のある Web プログラミング言語として、PHP は柔軟な開発環境と豊富な機能を提供するだけでなく、セキュリティとパフォーマンスのトレードオフにも直面します。この記事では、PHP のセキュリティとパフォーマンスの問題を検討し、この 2 つのバランスをとる方法を説明するコード例をいくつか示します。はじめに: Web アプリケーション開発では、セキュリティとパフォーマンスは相互に関連していますが、独立して重要な 2 つの側面です。サーバーサイド言語 PHP は優れたプログラミング機能と強力な機能を備えていますが、次のような用途には適していません。

コンテナ化環境における PHP 関数のパフォーマンスの向上 コンテナ化環境における PHP 関数のパフォーマンスの向上 Apr 13, 2024 pm 03:42 PM

コンテナ化環境における PHP 関数のパフォーマンス最適化戦略には、次のものが含まれます。 PHP バージョンのアップグレード PHP 構成の最適化 (メモリ制限の増加、OPcache の有効化など) PHP 拡張機能の使用 (APC、Xdebug、Swoole など) コンテナ構成の最適化 (たとえば、メモリと CPU の制限の設定として))

Memcache を使用して PHP アプリケーションのパフォーマンスを向上させるにはどうすればよいですか? Memcache を使用して PHP アプリケーションのパフォーマンスを向上させるにはどうすればよいですか? Nov 07, 2023 pm 12:02 PM

Memcache は、PHP アプリケーションのパフォーマンスを大幅に向上させる効率的なキャッシュ ソリューションです。この記事では、Memcache を使用して PHP アプリケーションのパフォーマンスを最適化する方法を説明し、実践的な PHP コード例を示します。 Memcacheとは何ですか? Memcache は、データをメモリに保存して高速応答を提供するオープンソースの分散キャッシュ ソリューションです。データはメモリに保存されるため、クエリは非常に高速です。他のデータベースで解決

マイクロサービスを使用して PHP 関数のパフォーマンスと応答性を向上させるにはどうすればよいですか? マイクロサービスを使用して PHP 関数のパフォーマンスと応答性を向上させるにはどうすればよいですか? Sep 18, 2023 pm 12:03 PM

マイクロサービスを使用して PHP 関数のパフォーマンスと応答性を向上させるにはどうすればよいですか?ますます発展するインターネット時代において、Web サイトやアプリケーションに対するユーザーの基本的な要件は、高性能と高速応答です。一般的に使用されるバックエンド開発言語として、PHP はユーザーのニーズを満たすためにパフォーマンスと応答速度を継続的に向上させる必要もあります。マイクロサービス アーキテクチャは、PHP アプリケーションのパフォーマンスを向上させるだけでなく、スケーラビリティと保守性も向上させる優れたソリューションとなっています。この記事では、マイクロサービスを使用して PHP 関数のパフォーマンスを向上させる方法について説明します

PHP を使用してパフォーマンス分析とチューニングを行う方法 PHP を使用してパフォーマンス分析とチューニングを行う方法 Jun 06, 2023 pm 01:21 PM

PHP は人気のあるサーバーサイド言語として、Web サイトの開発と運用において重要な役割を果たしています。ただし、PHP コードの量が増加し続け、アプリケーションが複雑になるにつれて、パフォーマンスのボトルネックが発生する可能性がますます高くなります。この問題を回避するには、パフォーマンスの分析とチューニングを実行する必要があります。この記事では、PHP を使用してパフォーマンス分析とチューニングを行い、アプリケーションにより効率的な実行環境を提供する方法を簡単に紹介します。 1. PHP パフォーマンス分析ツール 1.XdebugXdebug は、広く使用されているコード分析ツールです。

See all articles