关于PHP的执行效率,网上的专题文章很多,多是PHP、Java几个阵营的争论;应用的方面不同,执行环境不同,效率的差别会差得比较大。这里所说的“ 大型”应用不是说像Google、eBay、Yahoo这类大型网站的具体实施,只是希望大家的系统可以运行得更快更流畅,可以承载更多的用户在线,希望可以给PHP的初学者一点帮助。 这里所说的“大型”应用不是说像Google、eBay、Yahoo这类大型网站的具体实施,我也没有意图劝说读者放弃自己的概念和信仰,只是希望大家的系统可以运行得更快更流畅,可以承载更多的用户在线,希望可以给PHP的初学者一点帮助。 关于PHP的执行效率,网上的专题文章很多,多以PHP、Java几个阵营的争论开始,以一个不确定的期待结束,很少看见一个明确的结论。确实,程序的执行效率是很难从比较中得出的。应用的方面不同,执行环境不同,效率的差别会差得比较大。而且效率也是需要权衡的,大家都知道汇编语言很底层,可以写出非常高效的程序,但是我还很少,应该说是几乎没看过有人用汇编做Web开发,而且有能力用汇编写出高效程序的人似乎都是值得大家仰视的,哈哈~我们没有必要去讨论PHP和汇编到底差多少,只要知道自己的PHP和别人的PHP差多少就可以了。 首先,先要明确这篇文章的前提:必须有一台或更多的可以被自己操纵的服务器,而不是虚拟主机空间。毕竟可以在虚拟主机上运行的通用系统已经有了很多经典的作品和成熟的框架,效率挖掘已经被前辈们做得非常出色了,它们的很多理念也被现在很多PHP用户继承和发展,越来越多的所谓“框架”也像满天繁星一样,我也不想再去写那个,因为第一我自己的水平也不怎么样,写不出什么新鲜玩意来,写出来也招人笑,第二是写这个的文章太多了,说法也太多了,混乱是造成很多富有激情的未来天才程序员夭折的最大元凶。 在独立服务器上执行的程序和在虚拟主机上可以运行的程序在效率优化方面有着很大差别。您当然可以把一套discuz不加修改地安装在一台甚至一堆独立服务器上,不过,它真的得到最大的性能优化吗,您真的对得起这一堆服务器吗? 独立服务器指的是,使用者对这台机器有完全的控制权,包括安装、删除软件,配置系统参数甚至修改源代码。基于这样一个开放的硬件平台,性能也不仅仅是体现在速度上,还包括安全性、稳定性等。和虚拟主机不同,用户必须自己配置Web服务器参数,安装和配置PHP、数据库,以及安装各种乱七八糟的东西(我喜欢这么说),当然还要对它们负责。 首先提出几个名词:执行时间、模板、数据库封装、Cache、Buffer、Hash、守护进程、crontab。 执行时间,谁都知道,就是一个程序从执行开始到执行结束所用的时间。因为Web是瞬时的、无状态的,所以执行时间是Web程序执行效率的一个指标,它并不适合衡量C/S程序或者后台守护的程序,因为它们很多都是持续运行的。页面执行时间的一个典型例子就是Discuz论坛页面最下方的时间显式,通常 Discuz都是几毫秒到几十毫秒,和所用的平台、数据量和当前系统压力有关。 模板大家再熟悉不过,虽然有很多人只是在用,但是不知道为什么在用。模板在传统上来说是划分逻辑层的一种途径,在MVC上结构里,它把表示层和下层分离,在实际使用中,它方便程序员和界面设计人员分工合作。然而,现在很多场合中,由于模板的不当使用,它非但没有起到促进程序员和界面设计人员分工合作,反倒成为程序员和美工互相仇视的罪魁(我好像在以前的帖子里这样说过),很多人在抱怨他们不得不花很多时间在整理模板上。 数据库封装似乎和Java的关系更大,它对多种数据库系统提供一个统一调用接口,通常是一些封装好的类,这些类有时也完成一些比如SQL检查、过滤等工作。PHPLIB里的DB封装、PEAR DB、Adodb等都很有名,用的人也很多。 キャッシュとバッファは同じもののようです。キャッシュはキャッシュと呼ばれ、バッファはバッファリングと呼ばれます。ハードウェアの概念では、キャッシュの目的は、レジスタとメモリ、CPU と PCI バス、IDE バスとハードディスクなど、速度の異なる 2 つのデバイスを接続することです。バッファーの本来の意味は、衝撃の衝撃を軽減または吸収するために使用されるバネ状の緩衝材です。バッファは、データを一時的に保存し、受信速度とは異なる速度で送信するために使用されるデータの事前アクセス方法です。バッファ更新方法は時間間隔に従って自動的に更新できますが、キャッシュは「ヒット率」にさらに注意を払い、現在の期間で頻繁に使用される少量のデータを高速デバイスに配置して読みやすいようにします。そして書くこと。プログラム開発では、高速デバイスや低速デバイスはありませんが、データ ソースの読み取りおよび書き込み効率が異なる場合があります。データ量が少ない場合、通常、テキスト ファイルの読み取りおよび書き込みの方がデータベース アクセスよりも効率的であり、tmpfs での同じテキスト ファイルの読み取りおよび書き込みの効率は、直接ディスク IO の効率よりも優れています。多くの場合、バッファーはプロセス通信とキューに大きく反映されます。これは、受信側が高速に読み取ることができないためではなく、高速に読み取る必要がないためです。 デーモンは、バックグラウンドで継続的に実行されるプログラムであり、通常、プロセスの監視、制御、および外部サービスの提供の役割を果たします。たとえば、Apache 自体はデーモン プロセスとして理解できますが、実際には頻繁に更新される多数のプロセス (メイン プロセスは固定されています) で構成されています。 Crontab は、Windows の「スケジュールされたタスク」に似た UNIX/Linux のスケジュールされたプログラムで、特定の時間間隔または特定の時点で実行されるように特定のプログラムを設定します。通常、自動更新の完了、一時データのクリア、および一定期間に 1 回自動的に実行されるその他の操作に使用されます。 もう 1 つの特別な概念 (特に一般的なシステム開発に慣れている人にとって) は、独立したサーバーを用意した後は、PHP が提供できる機能の範囲内に自分自身を制限する必要がなく、知らず知らずのうちに PHP のマスターになっているということです。このシステムには、使えるものがたくさんあります。 PHP は全能ではなく (これは確かです)、その機能的な欠点は Perl によって完全に補うことができます。一般的な言語として、Perl はより多くの機能的なオプションを提供でき、そのモジュールは根性と同じくらい密度が高く、カジュアルで変態的な言語は無限の機能を提供します。エネルギー。 PHP のパフォーマンスの欠陥は、C を使用して補うことができます。 PHP の基礎は C から継承されています。PHP 自体も C によって開発されています。PHP を拡張するために C を使用することは完全に合理的です。 Linux 自体は C と Perl でサポートされています (Perl の状況を誇張するためにこれを言っているわけではありません。標準 Linux に Perl スクリプトがいくつあるかを見て、Perl をやめた後にシステムが障害者のように感じられるかどうかを確認してください) )。 PHP は構文の大部分を C から継承し、Web の機能、関数、およびオープン ソースに矛盾すると思われる「$」記号 (PHP は初期の頃は Perl スクリプトでした) のほとんどを Perl から学びました。 私が使用しているコードの一部を分析してみましょう (注: Linux スタンドアロン サーバーに適用されます。私は Windows と仮想ホストの大規模な開発を長い間諦めていたようです)。おなじみの方法、なじみのない方法、または異常な方法がいくつか使用されています。私のシステムは RedHat AS3 で、特別なことは何もありません。PHP のバージョンは 4.4.0、MySQL は 4.1 です。本当に必要な場合を除き、PHP5 の新機能を使用しなければならないコードを意図的に書くことはありません。 私の Web ルート ディレクトリは /www の下にあります。Apache と PHP はデフォルトで /usr/local/ にインストールされており、MySQL もそこに残しておきます。テスト用なので、乱雑に見えるのは望ましくありません。実際のプロジェクト、特に複数のサーバーの場合は、システムをうまく配置する必要があります。 システム構造を明確にするために、使用する必要のあるすべてのファイルを 2 番目のディレクトリに置きました。 以下は、共通ヘッダー ファイル /includes/kernel/common.inc.php の一部です。 ﹤?php ﹤?php
if (!define(IN_BSG)) {
exit;
}
?﹥
上記のコードは、合法的なプログラムによってのみ呼び出すことができ、他のファイルにはインクルードされないことを保証します。実行中のプログラムが IN_BSG 定数を定義していない場合、この common.inc.php をインクルードした後にプログラムは終了します。
list($usec, $sec) =explode(" ", microtime());
$page_time_start = $usec + $sec;
?﹥
プログラムの実行開始時間を計算するために使用されるこれら 2 つの行は誰もがよく知っているかもしれません。プログラムの実行にかかった時間を調べるために、プログラムが終了する前に再計算されます。これを気にしない場合は、コメントアウトしても問題ありません。