10

Mooseは素晴らしいオブジェクトフレームワークです。問題は、その依存関係と合わせて、それが非常に大きいことです。私たちのプロファイリングは、私たちのプラットフォームでは、Mooseをロードするだけで非永続的なCGIアプリケーションスクリプトに5〜6秒のオーバーヘッドが発生することを示しています。これは、これらの1回限りのアプリケーションには受け入れられません。

対照的に、永続的なプロセスシステム(FCGIなど)を使用している場合、この起動オーバーヘッドは排除され(つまり、一度だけ発生します)、すべてが順調です。私たちが抱えている問題は、すべてのコードが常に永続的なプロセスで実行されることを保証できないことです。

Mooseの機能が制限されたドロップイン置換としてMouseを使用することを調査しましたが、(この回答で述べたように)それは実行可能なオプションではないことが判明しました。Mooseで動作するように作成したライブラリは、微妙ではありますが重要な方法でMouseで動作しません。また、永続的な環境でMooseと「バニラ」CGI用のMouseの両方をサポートできるように、すべてのモジュールをフォークする必要はありません

そのため、次のオプションがあります。

  1. 必要に応じて、社内モジュールをフォークしてMooseまたはMouseのいずれかで動作します。(うん!)
  2. FCGI/Moose用のモジュールのみを開発してください。「バニラ」CGIはもうサポートしていません。永続的でないスクリプトを作成する必要がある場合、社内モジュールを活用することはできません。
  3. MooseまたはMouseのどちらも使用しないでください。ただし、他のオブジェクトフレームワークを使用してください。

どのオプションが最適ですか?現在、2に傾いています。バニラCGIとして何かを実行する必要がある場合は、それを吸い上げます。他のフレームワークはどうですか?私たちが見なければならないもっと軽量なものはありますか?

4

6 に答える 6

10

私の好みは、バニラの CGI サポートをやめることです。最近の FCGI ホスティングは非常に安価であり、バニラ CGI (IMO) に迎合する理由はありません。なぜなら、Perl は遅いという意見を補強するだけだからです。しかし、それを避けることができない場合は、Object::Tinyのようなものを使用できます。しかし、ロール、制約、メタプログラミング、および Moose が提供するその他すべての機能が必要な場合は、バニラの CGI を削除しない限り、運が悪くなります。

于 2009-09-11T14:21:50.087 に答える
8

Mooseを使用してバックエンドサーバーアプリケーションを作成してから、バックエンドを照会する非常に小さく単純なCGIスクリプトを作成できます。

+-------+    +--------------+
| Small |===>|  Persistent  |
|  CGI  |<===| Moose Server |
+-------+  ^  +--------------+
           |
         Socket
       Connection

これは多かれ少なかれFCGIが行うことなので、FCGIを使用する方が理にかなっているかもしれません。

一方、必要に応じて任意の抽象インターフェイスをボルトで固定できる非cgiバックエンドサーバーを使用することには、真のメリットがある場合があります。

たとえば、TCP(またはUDP)ソケットを使用する場合、ネイティブデスクトップアプリケーションをCGIと同じバックエンドにヒットさせることができます。

あなたの場合に最適なものは、実際には特定の状況によって異なります。状況の詳細に応じて、私はこのアプローチまたは上記で概説したアプローチのいずれかを使用することを決定しているのを見ることができます。

于 2009-09-11T15:19:30.463 に答える
5

私の提案は、オプション #2 を使用して、CGI が実行可能になるように Moose のリファクタリングを支援することです。fREW は現在、MooseX::Antlers プロジェクトを有効にするために Moose テスト スイートに取り組んでいます。これにより、Moose が CGI 環境で使用できないことを意味するオーバーヘッドのほとんどが削減されます。

現在 MooseX::Antlers の背後にいる Matt Trout (mst) は、必要に応じて CGI 環境でアプリを実行できるようにしたいという願望を表明しています。今のところ FCGI に固執し、あなたができることを彼にせがむことをお勧めします!

于 2009-09-11T15:27:43.220 に答える
1

別のオプションもあります-PPerl

使ったことがないのですが、確かに面白そうです。そしてそれを書いた人(マットサージェント別名ボー)-それはあなたに良質のコードを実質的に保証します。

于 2009-09-11T14:07:45.303 に答える
1

、、およびおそらく他のいくつかの基本的な考え方はApp::Persistent、Perlプログラムをバイトコードにコンパイルするプロセスは1回だけ実行され、その後の呼び出しで何らかのキャッシュが使用されるというものです。Mooseにはコンパイル時のペナルティがかなりあると言われているので、最初にこのアプローチを試してみます。pperlSpeedyCGI

私は2001年頃に古代のシステムで多くのMRTGpperlグラフを描くことに成功しました。Perlプログラムはすべてのグラフに対して実行されましたが、これはかなりのオーバーヘッドでした。これはおそらくCGIシナリオに匹敵します。

于 2009-09-11T20:10:10.657 に答える
1

Jonathan Rockway はAPP::Peristent (奇妙なことに、これは CPAN にはありません) について数ヶ月前に書きました。私はそれを使用していませんが、上記のリンクのブログ投稿に基づいて、CGI の実際の処理をラップできる、かなり透過的なサーバー/クライアント アーキテクチャを提供しているようです。

于 2009-09-11T19:31:19.847 に答える