16

PHPやJavaScriptなどのインタプリタ型プログラミング言語では、手続き型アプローチよりもオブジェクト指向のアプローチにどのような影響がありますか?速度の比較 - 手続き型の言語とOOの比較

特に私が探しているのは、Webアプリケーションを作成し、手続き型とオブジェクト指向型のアプローチを選択する際に、スピードだけでなく保守性も最適化するためのチェックリストです。引用されたリサーチとテストケースは、これ以上検討している記事を知っていれば役に立ちます。

ボトムライン:OOと手続き型のインタプリタ型言語を使用する場合、実際にどの程度のパフォーマンスが得られますか?

答えて

17

多分私は狂っていますが、このような場合はスピードを心配するのは、解釈言語を使用することは、どの色を塗装するかを判断しようとするようなものです。この種の最適化が完全に成熟しているという考えには至りません。

あなたは「保守性」と言ったときに頭の爪に当たった。私は最も生産的で最も保守的なアプローチを選択したいと思います。後でスピードが必要な場合は、インタプリタ言語内の手続き対オブジェクト指向コーディングのパラダイムの切り替えから来ることはありません。

+0

私は地獄の上司でした。彼はプログラミングについては何も知りませんでしたが、彼はすべてを知っていると思っていました(Unixのタイムスタンプで私に講演しました:「UNIXのタイムスタンプはヨーロッパのタイムスタンプのようなものです。/mm/yyyy "ROFL、どんな馬鹿なの?)だから彼がOO PHPをやっていることを知ったとき、彼はひっくり返って「サイトを遅くする」と言った。私は彼がそれでいっぱいだったことを証明するために見つけることができるあらゆる種類の調査を探していたので、私はOOプログラミングを続けることができました... – cmcculloh

+2

http://clientsfromhell.net/のように聞こえます – Xeoncross

+0

OOPは生産性が低く、 –

5

ボトムライン:いいえ。解釈のオーバーヘッドはメソッドディスパッチのオーバーヘッドを圧倒します。

2

インタープリタ言語を使用している場合、その違いは無関係です。パフォーマンスが問題になる場合、インタプリタ言語を使用すべきではありません。どちらもほぼ同じ性能を発揮します。

0

私は実際に、私が維持しているウェブサイト上でこのようなPythonで小さなテストを行いました。それらはほぼ同じ速度であり、手続き的アプローチは1秒間に数千分の1で勝っていましたが、コードは非常にきれいだったので、私は1回の繰り返しよりも長く運動を続けなかった。

本当に、それは(私の経験ではとにかく)問題ではありません。

1

あなたのパフォーマンスは、言語ではなく実装によって特徴付けられます。最も遅い言語を使用することができ、規模を拡大して設計する限り、世界で最大のサイトになるように拡張できます。

最初の最適化のルールを覚えておいてください。

しないでください。

:)

10

残念ながら、私はあまりにも私のテストを行ってきました。私はテストスピードを出しましたが、それはほぼ同じですが、PHPでmemory_get_usage()を使用するメモリ使用量をテストすると、OOP側では圧倒的に大きな数値が見えました。

OOPの場合は116,576バイト、手順の場合は18,856バイトです。私は "ハードウェアは安い"と知っているが、やって来る!使用量が1,000%増加しますか?申し訳ありませんが、最適ではありません。そして、一度に多くのユーザーがあなたのウェブサイトに当たったので、私はあなたのRAMがちょうど燃え尽きる、または使い果たされると確信しています。私が間違っている?

1

私の経験では、負荷の重いサイトは手間がかかり、OOPコードで手続き的よりもはるかに簡単に応答しなくなります。その理由は分かりやすい。

OOPには、手続き型コードより多くのメモリー割り当て(MALLOC)と多くの操作が必要です。タスクを実行するにはさらに多くのCPU時間が必要です。これは本質的に「オーバーヘッド」であり、手続き型コードを包み込み、特にデータベース操作を実行する際に、CPUの負担を増やして実行します。

多くのプログラマーはOOPの利便性のように、シンプルなインターフェイスの背後に隠れた小さな黒いボックスを作成しています。しかし、私は、ユーザーの負荷が高い場合にはいつまでも応答していたサイトを復活させるためにうまく支払われています。 OOPを取り除き、簡単な手続き関数に置き換えることは大きな違いをもたらしました。

あなたのサイトが非常に混雑していると思わない場合は、ぜひOOPを使用してください。トラフィックの多いシステムを構築する場合は、処理からすべてのCPUサイクルを取り除き、できるだけ出力からすべてのバイトを取り除きたいでしょう。