この記事を読んだ後、私は質問をしています http://stevehanov.ca/blog/index.php?id=95
また、fastcgiの代わりにcgiを使用することはペナルティではありませんか?
更新:「パフォーマンスが20〜30%向上する」と答える人がいるのはなぜですか?それは純粋な推測ですか、それともこの数値は確かなベンチマークから来ていますか?私はヒップホップのパフォーマンスが10倍のスケールであるのを見てきました。
この記事を読んだ後、私は質問をしています http://stevehanov.ca/blog/index.php?id=95
また、fastcgiの代わりにcgiを使用することはペナルティではありませんか?
更新:「パフォーマンスが20〜30%向上する」と答える人がいるのはなぜですか?それは純粋な推測ですか、それともこの数値は確かなベンチマークから来ていますか?私はヒップホップのパフォーマンスが10倍のスケールであるのを見てきました。
私は、python、php、perlなど、いくつかの言語とフレームワークでwebdevを実行しました。私はそれらを自分でホストしており、私の最大のサイトは1日に約2万件のヒットを記録しています。
適度な速度の言語とフレームワークは、リソースを投入するだけで1日あたり2万ヒットを達成するようにスケールアップできます。他のものより多くのリソースを必要とするものもあります。(Plone、Joomla。私はあなたを見ています)。
私のWittyサイト(まだ本番環境にはありません)は、たとえば私のpythonサイトよりもはるかに多くの(メモリから約5000%多く)ドキドキ(seigeを使用)します。つまり。私が攻城戦でできるだけ強くそれらを打つとき、機知に富んだサイトは毎秒より多くのページを提供します。
しかし、それは本当の一般的なテストではないことを私は知っています。
機知に富んだ他の速度の利点はあなたに与えます:
マルチスレッド
組み込みのWebサーバー(たとえば、ha-proxyの背後)を使用してデプロイし、アプリをマルチスレッド化する場合、perlまたはphpアプリと言うよりもはるかに少ないメモリをロードします。
通常、phpおよびperlアプリでは、着信接続ごとにApacheがプロセスを起動し、各プロセスがphpインタープリター全体、すべてのコード、変数、オブジェクトなどをロードします。JoomlaやWordpress(プラグインの数によって異なります)のような重いフレームワークでは、各プロセスがメモリ消費量にかなりの負担をかける可能性があります。
Wtアプリでは、各セッションでWApplicationインスタンス(C ++オブジェクト)が読み込まれ、ウィジェットなどのツリー全体が読み込まれます。ただし、接続の数に関係なく、コードが使用するメモリは同じままです。
作り付けのWeb2.0らしさ
一般的に、従来のアプリでは、古い「httpリクエストが入ってくる」「..」「ページを提供する」「..」「完了」スタイルを中心に構築されています。私は彼らが常にAJAXyの種類のthignsをますます追加していることを知っています。
Wtでは、デフォルトで可能な限りWebSocketを使用して、更新が必要なページの部分のみを更新します。標準のAJAXにフォールバックし、それがサポートされていない場合はhttpリクエスト。AJAXおよびWebSocketが有効なクライアントでは、同じWApplication C ++オブジェクトが継続的に使用されるため、新しいセッションのセットアップなどで速度が低下することはありません。
「C++はwebdevには難しすぎる」に応えて
C++には少し学習曲線があります。90年代半ばには、Javaj2eeでWebサイトを作成しました。それは当時商業的に実行可能であると考えられており、開発するのは非常に苦痛でしたが、優れたドキュメントとコーディングの実践を奨励するという良い利点がありました。
スクリプトWebサイトを使用すると、ショートカットを使用するのは簡単で、そこにあることに気づきません。たとえば、私が取り組んだ8年前のperlサイトでは、コードが重複していて、誰も気づいていませんでした。製品のリストが表示されるたびに、同じSQLクエリが2回実行されていました。
C ++サイトでは、perlサイトではプログラミング構造(関数など)がそれほど多くなく、perlと埋め込みHTMLだけだったため、チャンスは少ないと思います。C ++では、名前の付いたメソッドがあり、名前が衝突する可能性があります。
タイプ
ある時、int識別子をとるメソッドがありましたが、後でそれをuuid文字列に変更しました。Pythonコードは素晴らしく、変更する必要はないと思いました。それはうまく走った。しかし、深く埋められた線はほとんどなく、弦を渡すと異なる効果がありました。バグを追跡するのは非常に難しく、データベースが破損しています。(幸いなことに、開発マシンとテストマシンでのみ)。
C ++は確かに多くの不満を持っていたでしょうし、怠惰なバガーではなく、関連する関数を書き直すことを余儀なくされました。
C ++とJavaでは、コンパイラはエラーを起こし、そのような種類の間違いの多くを警告します。
スクリプト言語のアプリと比較して、C ++アプリではユニットテストは一般的に完全には必要ありません(私を撃たないでください)。これは、Pythonアプリなどの単体テストで通常使用する多くのものを強制する言語によるものです。
概要
これまでの私の経験から..Wtは、既存のフレームワークよりも開発に時間がかかります..主に、既存のフレームワークには、すぐに使用できるものがたくさんあるためです。ただし、Wordpress imhoと言うよりも、Wtで非常にカスタマイズされたアプリを作成する方が簡単です。
PHPからWt(C ++ Webフレームワーク)に移行した人と話をした人から、大幅な改善が報告されました。Wtを使用して作成した小さなアプリケーションから、それを学習するために、作成した同じPHPタイプのアプリケーションよりも高速に実行されることがわかりました。あなたが何をするかについての情報を取りなさい、しかし私は売られている。
これは、20〜30年前に人々がAssembly vs Cを配置し、10〜20年前にC vsC++を配置していたことを思い出させます。もちろん、C++はPHP/ Railsよりも高速ですが、保守可能でスケーラブルなアプリケーションを構築するには5倍の労力が必要です。
重要なのは、開発リソースを犠牲にしながら、パフォーマンスが20〜30%向上することです。アプリの動作を30%速くするか、機能の1/2を実装するか。
ほとんどのWebアプリケーションは、プロセッサにバインドされているのではなく、ネットワークにバインドされています。高水準言語ではなくC++でアプリケーションを作成することは、非常に重い計算を行わない限り、あまり意味がありません。また、正しいC++プログラムを作成することは困難です。アプリケーションの作成には時間がかかり、ポインタの誤用、メモリエラー、未定義動作などが原因で、プログラムが見事に失敗する可能性が高くなります。一般的に、それは価値がないと思います。
解釈またはOSの抽象化のレイヤーを排除するときはいつでも、パフォーマンスをいくらか向上させる必要があります。そうは言っても、言語やテクノロジー自体が、すべての問題が自動的に解決されることを意味するわけではありません。比較的単純なレコードのセットを処理するのに何時間もかかったC++コードを修正しました。問題は実装にあり、修正は言語の機能や制限に関連していませんでした。
すべてが正しく実装されていると仮定すると、パフォーマンスが向上するはずです。問題はバグを見つけることです。C ++の問題の1つは、多くの開発者が現在「トレーニング」されているか、オブジェクトの背後にあるメモリ管理に関連する多くの詳細を持つことに慣れていることです。これにより、「このポインタを複数のスレッドに渡すとどうなるか」などを考慮する必要がなくなります。うまくいくこともありますが、常にそうとは限りません。オブジェクトが厄介な詳細をどのように隠しているかに関係なく、考慮する必要のある言語の微妙な点がまだいくつかあります。
私の経験では、バグやメモリリークが手に負えなくなるのを防ぐために、コードを監視している経験豊富なC++開発者が何人か必要です。
私は確かにこれで売られていません。PHPよりもパフォーマンスを向上させたい場合は、Java(またはScala)フレームワークを使用してみませんか?これらはWeb開発にはるかに優れており、フレームワークが比較的使いやすく、C++の多くの頭痛の種を回避できます。私は常に、C / C ++開発に伴う頭痛の種を回避できることとして、Web開発(および最新の非科学/高性能アプリケーション)の主な利点の1つを見てきました。