17

趣味の目的で、私はホスティング サーバー上に共有スペースを持っています。ホスティング サーバーの多くは、PHP と Perl CGI の両方を提供しています。私はいくつかの場所で CGI スクリプトが現在廃止されていることを読みましたが、主にパフォーマンスの問題 ( PHP またはバニラ Perl CGI はより高速ですか?など) のためだと思います。

しかし、Perl の勉強を始めたばかりなので、Perl ではるかに簡単な (または Perl でのみ可能である) ソリューションを PHP で実装することに時間を無駄にしたくありません。

ボイラープレートの問題もあります。私は CPAN のことは知っています (つまり、存在は知っていますが、コンテンツはまだ知りません)。ログイン手順や基本的なユーザー管理を最初から 10^10 回目から書く準備はできていません。

現時点では、趣味のプロジェクトの研究に多くの時間を費やす余裕はないので、専門家に有利なスタートを切ろうと思いました。

4

8 に答える 8

34

CGI が「時代遅れ」であることは、多くのページ ビューを持つ大規模で複雑なサイトを運営している場合にのみ問題になります。

多くの人は、CGI が時代遅れであるという考えを押し付けていますが、CGI が何であるかを本当に理解していません。CGI は本質的に Perl ベースのテクノロジであるという誤解が広まっています。多くの人が CGI を、自分がサポートしている言語をサポートする Perl に対するカルト的な攻撃を行う手段として攻撃しています。真の技術者になりたい場合は、基本的な問題を理解し、状況の事実に基づいて選択を行う必要があります。

CGI は、インタラクティブなページを任意の言語( befungeを含む) で作成できる Web サーバーとのインターフェースです。サーバーが CGI スクリプトによって制御されるページの要求を受け取ると、サーバーはスクリプトを実行し、要求元に結果を返します。

プログラミング言語が実行のたびに VM、インタープリター、またはコンパイラーをロードする必要がある場合、ページにアクセスするたびにこの起動時間が必要になります。

FastCGI、mod_php、mod_perl などの CGI アクセラレータは、インタープリター/VM を常にメモリに保持し、ライブラリをロードしたままにし、スクリプトのバイトコードをキャッシュして、スクリプトの起動オーバーヘッドを削減します。

簡単な個人や趣味のサイトを作るならCGIで十分です。PHPも同様です。

サイトがより高速なテクノロジを必要とするように成長する場合は、mod_perl、FastCGI、またはその他の CGI アクセラレーション テクノロジに移行できます。

使用する言語は、提供されるツールと、それらがニーズにどのように適合するかによって決定する必要があります。

  1. 必要な機能のリストを作成します。
  2. 契約違反者のリストを作成します。
  3. 次に、これら 2 つのリストに対して、使用可能なツールセットをそれぞれ確認してください。
  4. どれが一番よく出ますか?試して。
  5. それは吸う?それをリストから外して、ステップ 4 に戻ります。

また、befungeを使用しないことをお勧めします。可能だからといって、それを使うべきだという意味ではありません。


更新: mpeters が指摘しているように、mod_perl、mod_php、mod_ruby などは、単なる CGI アクセラレーターではありません。Apache API へのアクセスを提供します。それらは CGI アクセラレータとして機能しますが、さらに多くのことができます。

FastCGI は純粋な CGI アクセラレータです。

更新 2: PHP と CGI は相互に排他的ではありません。 PHP は CGI としてインストールできます。PHP は、FastCGI でよく使用されます。

于 2009-05-05T15:18:03.710 に答える
9

これは、趣味に何を使用するかを決定するためのかなり主観的な問題です。PHP を調べた後、趣味として Perl を学ぶことにしました。PHP のほとんどを読むことができず、組み込み関数のリストに圧倒されるという事実が気に入らなかったのです。

最初に行ったのは、連絡先フォームの CGI スクリプトとフォト アルバム ジェネレーターです。私は安価な共有ホスティング プランを使用していましたが、パフォーマンスの問題は発生していなかったので、パフォーマンスの問題は発生しませんでした。

代わりに、comp.lang.perl.misc と CPAN の存在により、PHP を掘り下げないという私の決定を再考することは決してありませんでした。

その間、自分の Web サイトのほとんどのコンテンツは一度生成されると静的であることに気付きました。そのため、現在はコンテンツをオフラインで生成する Perl スクリプトを記述しています。

だから、私の答えは、小さなプロジェクトを選んでください。どんなものでも構いません。Perl と適切な CPAN モジュールを使用して実装し、気に入るかどうかを確認してください。

于 2009-05-05T13:15:29.417 に答える
5

PHP を使用するか Perl を使用するかは、PHP と C で記述された Web アプリケーションの違いが意味をなさないのと同じように、スケーリングの観点からは意味がありません。違いが本当に重要なら、私たちは皆、C またはアセンブリを書いているでしょう。

PHP は遅いですが、ウィキペディア、Facebook、および Yahoo が PHP を広く使用することを妨げているわけではありません。

スケーリングの観点から、どちらの言語を選択しても問題にならない主な理由が 2 つあります。

  1. Squid のようなキャッシング リバース プロキシを使用します。Apache のワークロードのほとんどをオフロードすることで、CGI 呼び出しの負荷を大幅に削減できます。
  2. Web 層のスケーリングは簡単です。難しいのは、データベース層のスケーリングです。ファームにはいつでも別の Web サーバーを追加できます。mod_php で 1 秒あたり 1000 リクエスト、CGI で 1 秒あたり 500 リクエストを処理できる場合、CGI を開発する方が安価で高速な場合は、それを実行してください。2 倍のウェブ ヘッドが必要になりますが、次のいずれかが必要です。
    1. あなたは Web の下位 90% にいて、実際に必要なのは 1 つの Web サーバーだけです。
    2. あなたは Web の上位 10% に属しており、複数の Web サーバーが必要ですが、追加コストを正当化するのに十分なトラフィックがあります。

あなたとあなたのチームが最も効率的に開発できる言語を選択してください。

于 2009-05-22T00:09:44.740 に答える
3

以下は、 Squatting Web マイクロフレームワークを使用して CGI で実行される単純な "hello world" の例です。

use strict;
use warnings;

{
    package MyApp;
    use base 'Squatting';
    use base 'Squatting::On::CGI';
}

{ 
    package MyApp::Controllers;
    use Squatting ':controllers';

    our @C = (
        C(
            Index => [ '/' ],
            get   => sub { 
                my ( $self ) = @_;
                my $v = $self->v;
                $v->{say} = 'hello world!';
                $self->render( 'hello' );
            },
        ),
    );
}

{
    package MyApp::Views;
    use Squatting ':views';
    use HTML::AsSubs;

    our @V = (
        V(  'html',

            layout => sub { 
                my ( $self, $v, @yield ) = @_;
                html (
                    head ( title( 'My CGI App' ) ),
                    body ( @yield ),
                )->as_HTML;
            },

            hello => sub {
                my ( $self, $v ) = @_;
                p ( $v->{say} );
            },
        ),
    );
}

use CGI;
my $q = CGI->new;
MyApp->init;
MyApp->relocate('/cgi-bin/myapp.cgi');
MyApp->cgi($q);

「myapp.cgi」として保存し、cgi-bin に配置します。

于 2009-05-22T09:56:56.227 に答える
2

ホスティングを使用する場合、多くの場合、PHP も CGI として実行されます。FastCGI または mod_perl を実行したくない場合は、CGI::Application フレームワークを使用できます。CGI::Application は FastCGI または mod_perl でも実行されますが、Catalyst とは異なり、CGI としても実行されます。Catalyst と CGI::Application はどちらも、独自の Web サーバーで実行することもできます。

于 2009-05-06T13:17:58.997 に答える
2

私は Web サイトに Perl と PHP の両方を使用しています。歴史的な理由から、主に職場では Perl を使用し、家庭では PHP を使用しています。それらの中から選択することはあまりないと思います。

ページの大部分が HTML に固定されており、計算量が少ない場合は、HTML に埋め込まれているため、PHP の方が少し簡単です。

PHP は Perl よりも規律があり、したがって、より制限的な言語であることがわかります。PEAR は CPAN と非常によく似ています。それほど大きくはないと思いますが、CPAN は非常に大きいため、多くのドロスが含まれています。

HTH

コリン

于 2009-05-05T13:13:39.623 に答える
1

Template ToolkitでCatalystを試してみてください。

sub hello :Path('/hello') :Args(0) {
    my ( $self, $c ) = @_;

    # Hello World
    $c->response->body( $c->welcome_message );
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<html>
  <頭>
    <タイトル>[% タイトル %]</タイトル>
  </head>
  <本体>
    <div id="ヘッダー">
      <a href="/index.html" class="logo" alt="ホームページ"></a>
      <h1 class="headline">[% タイトル %]</h1>
    </div>

    [% コンテンツ %]

    <div id="フッター">
      <div id="著作権">
        &コピー; [%著作権%]
      </div>
    </div>
  </body>
</html>
于 2009-05-05T15:54:37.523 に答える
1

PHP と Perl の両方にそれぞれの瞬間がありますが、これは本当に主観的なものです。Perl には CPAN で利用可能な大規模なフレームワークがあり、純粋な CGI 環境であっても、PHP と同等またはそれ以上に動作させることができます。同時に、PHP には多くの支持者がいて、Web サイトのプログラミングを簡単にするためのすぐに使える機能がたくさんあります。私にとって、選択は個人的な好みに要約されます。個人的には、PHP で物事を行う機能的な方法をすべて見つけようとするよりも、Perl を使用する方が好きです。幸運を!

于 2009-05-05T14:25:11.747 に答える