プログラムを作成するとき、私たちは常に、プログラムが使用するリソースを最小限に抑え、より高速に実行され、より少ないコードで構成されるようにしたいと考えます。これらを追求している間に、私たちは多くのものを失うことがよくあります。次に、PHP の最適化についての私の理解を話したいと思います。最適化の目的は、最速の実行速度と最も簡単なコードの保守と引き換えに、最小限のコストを費やすことです。
特定のプログラムコードを噛み砕くのではなく、大規模な最適化を実行する
私がここで話している最適化は、基本的にサーバー、Apache、データベースの側面からの最適化です。プログラムの実行速度を向上させるために PHP コードを改善することではありません。通常の文字列処理関数を最適化してプログラムの速度を向上させる場合、大規模な最適化のコストはこれよりはるかに小さくなりますが、得られる利益ははるかに豊富です。
コード以外の領域での最適化には次の利点があります。
1. 通常の状況では、効率が大幅に向上します
2. コードの整合性は危険にさらされません
3. 迅速に導入できる
キャッシングテクノロジー
一般的に使用されるキャッシュ テクノロジーについて話しましょう。これらのキャッシュ テクノロジーは効率を大幅に向上させますキャッシュ技術について話すとき、memcached は効率的で高速な分散メモリ オブジェクト キャッシュ システムであり、主に WEB 動的アプリケーションを高速化するために使用されます。
Memcachedの原理
Memcached は 1 つ以上のサーバーでデーモンとして実行され、クライアントからの接続操作の受信を待機します。クライアントはさまざまな言語 (PHP など) で作成できます。 PHP などのクライアントが memcached サービスとの接続を確立したら、次にアクセスするオブジェクトには一意の識別子キーがあり、アクセス操作は memcached に保存されます。 、キャッシュ ファイルに保存されないため、memcached は非常に効率的かつ高速になります。memcached について話した後は、一般的に使用される
キャッシュ方法について話しましょう
1. コンパイルとOPCODEキャッシュ
PHP はインタープリタ型言語であるため、同じファイルに異なるユーザーがアクセスする場合、または同じユーザーが異なるタイミングで同じファイルにアクセスする場合は、毎回再実行する必要があります。コンパイルして実行するには、非常に時間がかかります。コンパイルとキャッシュにより、各ファイルは変更後に 1 回だけコンパイルされるため、ユーザーがアクセスした後、機械語命令はハードディスクから読み取られるのではなく、メモリから直接フェッチされて実行されます。
最も一般的な PHP コンパイル キャッシュ ツールは次のとおりです: APC、Accelerator、xcache
2. グローバルページキャッシュ – Squid Cache
Squid Cache (Squid と呼ばれる) は、人気のあるフリー ソフトウェア (GNU General Public License) プロキシ サーバーであり、Web サーバーのフロントエンド キャッシュ サーバーとして機能し、キャッシュによって Web サーバーの速度を向上させます。関連するリクエスト。
3. ローカルキャッシュのSQLキャッシュ
ほとんどのアプリケーションにおける主なボトルネックは、多くの場合データベース操作に遡ることができます。これは通常、多くの時間を消費する複雑なデータベース クエリによって引き起こされ、SQL キャッシュによって複雑なクエリによって引き起こされる負荷を大幅に軽減できます。SQLキャッシュの例(memcached拡張機能を使用)
コードスニペット:
$key = md5(“何らかのSQLクエリ”);
if (!($result = memcache_get($key))) {
$result = $pdo->query($qry)->fetchAll();
// クエリ結果を 1 時間キャッシュします
memcache_set($key, $result, NULL, 3600);
}
4. ローカルキャッシュコードブロックキャッシュ
PHPプログラムを最適化するために、実行時間を少しでも短縮するために各コードセグメントを最適化する必要がある場合がありますが、複雑な異なるPHPコードセグメントを最適化する代わりに、キャッシュによるこれらのコードセグメントの最適化を直接無視する方が良いでしょう。これを行うことの利点は次のとおりです:
1.効果がすぐにわかります
2. 以前のコードは破壊されません
3. コードを最適化するよりもはるかに高速です
コードブロックキャッシュの例(memcached拡張機能も使用)コードスニペット:
関数 complex_function_abc($a, $b, $c) {
$key = __FUNCTION__ .
(func_get_args());
if (!($result = memcache_get($key))) {
$result = //関数コード
// 実行結果を1時間保存します
memcache_set($key, $result, NULL, 3600);
}
$result を返す;
}
もちろん、上記のメソッド以外にも、ファイルキャッシュ(データベースからデータを取得してファイルに保存する)や、静的HTMLファイルの生成などもできます。ただし、これらのメソッドのキャッシュはまだ残っています。ファイルをメモリではなくハードディスクに保存します。
出力制御
上記のキャッシュ技術に加えて、出力制御を使用してプログラムの実行時間を短縮することもできます
PHP と APACHE による出力制御について話しましょう
1.PHP出力制御
ここでの主な用途は、PHP の ob_start() と OB シリーズ関数です。これらの関数で何ができるのでしょうか?
一つ目は静的テンプレート技術です。いわゆる静的テンプレート技術は、特定のメソッドを使用して、ユーザーがクライアント側の PHP によって生成された HTML ページを取得できるようにします。この HTML ページが更新されなくなると、別のユーザーがこのページを再度閲覧したときに、sina、163、sohu などの大量の情報を含む一部の Web サイトでは、プログラムが PHP および関連データベースを呼び出すことはなくなります。このようなテクノロジーの恩恵は非常に大きいです。
コード例:
ob_start(); //バッファをオープンします
?>
phpページの全出力
$content = ob_get_contents(); //phpページが出力したコンテンツをすべて取得します
$fp = fopen(“output.html”, “w”) //ファイルを作成し、書き込み用に開きます
;fwrite($fp, $content); //phpページの内容をすべてoutput.htmlに書き込み、その後...
fclose($fp);
?>
もちろん、このobシリーズの関数には他にもたくさんの用途がありますが、ここでは一つ一つ説明しません。
2. apacheの出力制御
SendBufferSize をページサイズに設定すると、ページを一度に送信バッファーに配置して処理速度を向上させることができます。
SendBufferSizeコマンド
説明: TCP送信バッファサイズ(バイト)
構文: SendBufferSize バイト
デフォルト値: SendBufferSize 0
スコープ: サーバー構成
ステータス:MPM
モジュール: beos、mpm_netware、mpm_winnt、mpmt_os2、prefork、worker
このコマンドは、サーバーのTCP送信バッファのサイズ(バイト)を設定します。この値を増やすと、高速化と遅延 (約 100ms) という 2 つの影響が生じます。 「0」に設定すると、オペレーティング システムのデフォルトが使用されます。
ソース コードを通じて Apache/PHP/データベースをコンパイルすると、プログラムの速度が 10 ~ 15% 向上します
それではコードを最適化する際に注意すべき点についてお話していきます
1. 短いコードは速いコードと同じではありません
プログラムを書くときにコードをできるだけ簡潔に書きたいと思う人は多いですが、コードが短いほど実行時間が長くなることがあります。そのため、コードを多く使用する場合でも、遅いコードは使用しないでください
2. プログラムを書くときは、速度を追求するのではなく、プログラムのスケーラビリティにもっと注意を払うべきです
3. ほとんどのアプリケーションのボトルネックはコードではなくデータベースであるため、コードを最適化する前に、まずデータベース関連の部分を見てください
4. 微細な最適化には利益の価値はない
マイクロ最適化とは 前述したように、コードの正規表現部分を文字列関数に置き換えます。これには次のような欠点があります:
(1)時間がかかる
(2) パフォーマンスの問題は解決されません
(3) 以前のコードが破壊され、未知のエラーが発生する可能性が非常に高いです
(4) 見返り以上にお金を払う
ここで注意しなければならない誤解もありますが、プログラムをより最適化するために、ビジネスロジックを分析する際に最適化を考慮して、より良いコードを得るためにビジネスロジックを変更する人がいます。プログラムの目的は現実に遭遇する問題を解決し、それらの問題に対処することであるため、これは非常に愚かなアイデアです。
私も最初は階下の人と同じ考えで、どうしてそんなことを質問しなければいけないのかと思いました。
結局、Baidu を試してみたところ、Baidu を見つけるのは非常に難しいことがわかりました。
しかし、ついに見つけました。次の表は、拡張ライブラリ内のすべての拡張の説明、注釈、および説明です。
----------------------------------------------豪華な分割line-- --------------------------------------
拡張ライブラリ記述アノテーション
php_bz2 .dll bzip2 圧縮関数ライブラリなし
php_calendar.dll PHP 4.0.3 以降組み込みのカレンダー変換関数ライブラリ
php_cpdf.dll ClibPDF 関数ライブラリなし
php_crack.dll パスワードクラッキング関数ライブラリなし
php_ctype.dll PHP 以降の ctype ファミリー関数ライブラリ4.3.0 組み込み
php_curl.dll CURL、クライアント URL ライブラリ関数ライブラリには以下が必要です: libeay32.dll、ssleay32.dll (付属)
php_cybercash.dll ネットワーク現金支払い関数ライブラリ PHP <= 4.2.0
php_db.dll DBM関数ライブラリは廃止されました。 DBA (php_dba.dll) に置き換えます
php_dba.dll DBA: データベース (dbm スタイル) 抽象化層関数ライブラリ なし
php_dbase.dll dBase 関数ライブラリ なし
php_dbx.dll dbx 関数ライブラリ
php_domxml.dll DOM XML 関数ライブラリ PHP < ;= 4.2.0 には次のものが必要です: libxml2.dll (付属)、PHP >= 4.3.0 には次のものが必要です: iconv.dll (付属)
php_dotnet.dll .NET 関数ライブラリ PHP php_exif.dll EXIF関数ライブラリにはphp_mbstring.dllが必要です。また、php.ini では、php_mbstring.dll の後に php_exif.dll をロードする必要があります。
php_fbsql.dll FrontBase 関数ライブラリ PHP php_fdf.dll FDF: フォーム データ フォーマット関数ライブラリには次のものが必要です: fdftk.dll (付属)
php_filepro.dll filePro 関数ライブラリ 読み取り専用アクセス
php_ftp.dll FTP PHP 4.0.3 から関数ライブラリが組み込まれました
php_gd.dll GD ライブラリ 画像関数ライブラリは PHP 4.3.2 で削除されました。また、トゥルー カラー関数は GD1 では使用できないことに注意してください。代わりに php_gd2.dll を使用してください。
php_gd2.dll GD ライブラリ 画像関数ライブラリ GD2
php_gettext.dll Gettext 関数ライブラリ PHP = 4.2.3 には libintl-1.dll、iconv.dll が必要 (含まれています)。
php_hyperwave.dll HyperWave 関数ライブラリ なし
php_iconv.dll ICONV 文字セット変換には、iconv-1.3.dll (付属)、PHP >=4.2.1 には、iconv.dll が必要
php_ifx.dll Informix 関数ライブラリには、次のものが必要: Informix ライブラリ
php_iisfunc.dll IIS管理関数ライブラリ なし…残り全文 >>
どの言語でも、必要に応じて簡単にすることも、必要に応じて複雑にすることもできます。その鍵は、どの程度学習したかによって異なります。
PHP が単純であると言うのは、インターネット上の人々が言っているだけです。実際の専門家は、PHP がオブジェクト指向をサポートしていない以前は、小規模な Web サイトしか構築できませんでした。 , PHP のみを削除しました 小規模な Web サイトを作成できる人は、まだ PHP が簡単だと言うのは新人としか言えず、おそらく PHP をまったく知らないでしょう。
一方で、実際のところ、高級言語はもともとプログラマーの作業負荷を簡素化するために設計されており、PHPも例外ではないため、すべての高級言語はシンプルです。したがって、言語が単純であれば、プログラマーは辞めた後にそれを理解できるのは実際には良いことです。
PHP の将来に関しては、国内の電子商取引、Web2.0、いわゆる Web3.0、さらにはクラウド コンピューティングが、LAMP 全体の低コストと高効率と相まって、国内での PHP の人気を促進しました。プラットフォームは、まさに国内市場環境に完璧にマッチしています。
もう一度言っておきますが、PHP が簡単だと言う人は新人か、別の言語を知っている新人、特に言語を相互に比較する新人のどちらかです。