PHP パフォーマンスの最適化

WBOY
WBOYオリジナル
2016-06-20 12:45:581549ブラウズ

出典: Chuanshan Jia

序文

php は非常に人気のあるスクリプト言語であり、現在多くの企業 (Sina、Youku、Baidu) で使用されています。 、捜狐、淘宝網など)はウェブサイト開発にこの言語を使用しています。この記事では、php スクリプトのパフォーマンスが向上することを願っています。 PHP スクリプトのパフォーマンスは、多くの場合、PHP バージョン、Web サーバー環境、コードの複雑さに依存することに注意してください。

コード内のボトルネックを最適化する

ホア氏はかつて、「時期尚早な最適化はすべての不幸の根源である」と言いました。 Web サイトの実行を高速化したい場合は、最適化を行う必要があります。コードを変更する前に何をする必要がありますか? システムが遅くなる原因は何ですか?次のガイダンスやその他の方法で PHP を最適化できます。PHP コードを最適化することで、システムのボトルネックを見つけることができます。

php のバージョンをアップグレードする

チームメンバーは、長年にわたって php エンジンのパフォーマンスが大幅に改善されてきたと示唆しています。 Web サーバーが php3 や php4 などの古いバージョンをまだ実行している場合。したがって、コードの最適化を試みる前に、バージョン間のアップグレードについて詳しく調べる必要があります。

具体的な詳細については、次のリンクをクリックしてください:

PHP 4 から PHP 5 への移植
PHP 5.0.x から PHP 5.1.x への移植
PHP 5.1.x から移植PHP 5.2.x へ

キャッシュを使用する

キャッシュ処理には、キャッシュ モジュール (Memcache など) またはテンプレート システム (Smarty など) を使用します。データベースの結果をキャッシュし、ページの結果を抽出することで、Web サイトのパフォーマンスを向上させることができます。

出力バッファーを使用する

スクリプトがレンダリングしようとすると、PHP はメモリ バッファーを使用してすべてのデータを保存します。キャッシュを使用すると、結果がユーザーに返される前に、応答するすべてのデータでバッファーがいっぱいになるため、ページが遅く見える場合があります。幸いなことに、バッファーがいっぱいになる前に PHP がユーザーに応答するように変更を加えることができ、これにより Web サイトの表示が速くなります。

  • 出力キャッシュ制御

単純なセッターとゲッターの作成を避ける

PHP クラスを作成する場合、オブジェクトのプロパティを操作できますこれにより、時間を節約し、スクリプトのパフォーマンスを向上させることができます。人々を幼稚でばかばかしいと感じさせるようなセッターやゲッターではなく。

以下はいくつかのケースです: Dog クラスは setName() と getName() を使用して name 属性を操作します。

class dog {  public $name = '';  public function setName($name) {    $this->name = $name;  }  public function getName() {    return $this->name;  }}

注: setName() と getName() は、name 属性を格納して返すこと以外は何も行いません。

$rover = new dog();$rover->setName('rover');echo $rover->getName();

name 属性を直接設定してアクセスすると、パフォーマンスが 100% 向上し、開発時間も短縮されます。

$rover = new dog();$rover->name = 'rover';echo $rover->name;

変数をコピーしない理由はありません

時々、ジュニア Phper は、コードをより「きれい」にするために、定義された変数をよく再割り当てします。別の変数。これにより、実質的にメモリ消費量が 2 倍になり (変数変更時)、スクリプトのパフォーマンスが低下します。たとえば、ユーザーが 512KB の変数を別の変数に挿入すると、1MB のメモリが消費されます。

$description = strip_tags($_POST['description']);echo $description;

上記のコードは、理由もなく変数をコピーします。追加のメモリを消費せずに変数をインラインで出力するだけで済みます。

echo strip_tags($_POST['description']);

SQL 操作を実行するループを避ける

よくある間違いは、SQL 操作をループ内に配置することです。これにより、頻繁なデータベース アクセスなどが発生します。 、これはスクリプトのパフォーマンスの低下に直接つながります。次の例では、ループ操作を単一の SQL ステートメントにリセットできます。

foreach ($userList as $user) {  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';  mysql_query($query);}

手順:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

このループ スキームの代わりに、データを単一のデータベース操作に結合できます。

$userData = array();foreach ($userList as $user) {    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; }$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);mysql_query($query);

手順:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
  • MySQL INSERT 構文

その他のリソース

  • PHP Memcache モジュール
  • Smarty テンプレート エンジン
  • http://3v4l.org ? さまざまなバージョン間のコード実行効率を分析する、非常に優れた Web サイト
  • http:/ /www.php-internals.com/ ???PHP カーネルを学ぶための Web サイトです。

概要

この点についてより深く理解している場合は、一緒に議論することができます。他の PHPer が参照できるように、ブログ投稿にも優れた提案が含まれています。 phper として、多くの phper の能力を向上させることができることは非常に誇りです
。 ??多くの人が PHP を草の根言語だと考えていますが、私は個人的には、PHP 言語が将来さらに発展し、PHPer の手に渡るお金がもっと増えることを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。