Когда я должен использовать Perl CGI вместо PHP (или наоборот)? - PullRequest
15 голосов
/ 05 мая 2009

В целях хобби у меня есть общее пространство на хост-сервере, который предоставляет, как и многие из них, и PHP, и Perl CGI. Я читал в нескольких местах, что CGI-скрипты устарели сейчас, я думаю, в основном из-за проблем с производительностью (например, PHP или ванильный Perl CGI быстрее? ).

Но так как я только начал изучать Perl, я бы не хотел тратить время на реализацию решений на PHP, которые намного проще (или только возможны) на Perl.

Также есть типовые проблемы, я знаю о CPAN (то есть о существовании, а не о содержимом), но не знаком с библиотеками PHP (хотя я не сомневаюсь, что они существуют). Я не готов написать процедуру входа в систему или администрирования пользователей с нуля в 10-10 раз.

В этот момент я не могу позволить себе тратить много времени на исследования хобби-проектов, поэтому я подумал, что давайте попросим экспертов дать старт.

Ответы [ 8 ]

31 голосов
/ 05 мая 2009

«Устаревшая» CGI действительно является фактором, если вы создаете большие, сложные сайты с большим количеством просмотров страниц.

Многие люди выдвигают идею, что CGI устарела, не понимая, что такое CGI. Существует широко распространенное заблуждение, что CGI - это технология, основанная на Perl. Многие люди нападают на CGI как способ совершить культовые атаки на Perl в поддержку любого языка, который они поддерживают. Если вы хотите быть настоящим технологом, вам нужно понять фундаментальные проблемы и сделать выбор на основе фактов ситуации.

CGI - это интерфейс с веб-сервером, который позволяет писать интерактивные страницы на любом языке - даже перед . Когда сервер получает запрос на страницу, управляемую сценарием CGI, сервер запускает сценарий и возвращает результаты запрашивающей стороне.

Если вашему языку программирования требуется, чтобы виртуальная машина, интерпретатор или компилятор загружались при каждом его выполнении, то это время запуска будет требоваться при каждом доступе к вашей странице.

Ускорители CGI, такие как FastCGI, mod_php, mod_perl и т. Д., Постоянно хранят интерпретатор / ВМ в памяти, могут сохранять библиотеки загруженными и даже кэшировать байт-код из сценариев для уменьшения накладных расходов при запуске сценария.

Если вы делаете простой, личный или хобби сайт, CGI будет в порядке. Так же будет и PHP.

Если ваш сайт нуждается в более быстрой технологии, вы можете перейти на mod_perl, FastCGI или другие технологии ускорения CGI.

Какой язык вы используете, должно определяться инструментами, которые он предоставляет, и тем, как они соответствуют вашим потребностям.

  1. Составьте список необходимых вам возможностей.
  2. Составьте список нарушителей.
  3. Теперь проверьте каждый из ваших возможных наборов инструментов по этим двум спискам.
  4. Какой из них получается лучшим? Проверьте это.
  5. Это отстой? Вычеркните его из своего списка и вернитесь к шагу 4.

Также я рекомендую не использовать befunge . То, что это возможно, вовсе не означает, что вы должны его использовать.


Обновление: Как указывает mpeters, mod_perl, mod_php, mod_ruby и др. - это гораздо больше, чем просто ускорители CGI; они предоставляют доступ к API Apache. Они действуют как ускорители CGI, но могут многое, многое, многое другое.

FastCGI - чистый ускоритель CGI.

Обновление 2: PHP и CGI не являются взаимоисключающими. PHP может быть установлен как CGI . PHP часто используется с FastCGI.

8 голосов
/ 05 мая 2009

Это довольно субъективный вопрос для решения, что использовать для хобби. Я решил изучить Perl как хобби, изучив PHP, и мне не понравился тот факт, что я не мог читать большую часть PHP там, и меня пугал список встроенных функций.

Первые несколько вещей, которые я сделал, были CGI-скрипты для контактных форм и генератор фотоальбомов. У меня был дешевый план общего хостинга, и у меня не было проблем с производительностью, поэтому проблема с производительностью никогда не возникала.

Вместо этого, существование comp.lang.perl.misc и CPAN гарантировало, что я никогда не пересматривал свое решение не углубляться в PHP.

В то же время я понял, что большая часть контента на моих веб-сайтах статична после генерации, поэтому теперь я пишу сценарии Perl для генерации контента в автономном режиме.

Итак, мой ответ: выберите небольшой проект, все, что подойдет, и реализуйте его, используя Perl и соответствующие CPAN-модули, и посмотрите, нравится ли вам.

4 голосов
/ 22 мая 2009

Если вы используете PHP или Perl является спорным с точки зрения масштабирования гораздо таким образом, что разница между веб-приложение написано в PHP и C является спорным. Если разница действительно имеет значение, мы все будем писать C или сборку.

PHP медленный, но это не мешает Википедии, Facebook и Yahoo широко использовать его.

Существует две основные причины, по которым с точки зрения масштабирования не имеет значения, какой язык вы выберете:

  1. Используйте кеширующий обратный прокси, такой как Squid. Разгрузив большую часть рабочей нагрузки apache, вы можете значительно сократить нагрузку на CGI-вызовы.
  2. Масштабировать свой веб-уровень очень просто. Это масштабирование вашей базы данных, это сложно. Вы всегда можете добавить другой веб-сервер на ферму. Если вы можете обслуживать 1000 запросов в секунду с помощью mod_php и 500 запросов в секунду с помощью CGI, если вы разрабатываете CGI дешевле и быстрее, сделайте это. Вам понадобится вдвое больше веб-голов, но также:
    1. Вы находитесь на нижних 90% веб-страниц, и в любом случае вам нужен только один веб-сервер.
    2. Вы находитесь в топ-10% веб-сайтов и нуждаетесь в нескольких веб-серверах - но у вас достаточно трафика, чтобы оправдать дополнительные расходы.

Выберите язык, на котором вы и ваша команда сможете разработать наиболее эффективно.

3 голосов
/ 22 мая 2009

Вот простой пример "hello world", который работает под CGI с использованием Squatting web-микрофреймера:

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.

2 голосов
/ 06 мая 2009

Если вы используете хостинг, во многих случаях PHP также будет работать как CGI. Если вы не хотите запускать FastCGI или mod_perl, вы можете использовать CGI :: Application framework . CGI :: Приложение будет работать с FastCGI или mod_perl, но, в отличие от Catalyst, будет также работать как CGI. И Catalyst, и CGI :: Application также могут работать на своих собственных веб-серверах.

2 голосов
/ 05 мая 2009

Я использую как Perl, так и PHP для веб-сайтов - по историческим причинам, в основном Perl на работе и PHP дома; Я не думаю, что есть из чего выбирать между ними.

Если ваши страницы в основном представляют собой фиксированный HTML с небольшим количеством вычислений, PHP немного проще, потому что он все равно встроен в HTML.

Я считаю PHP более дисциплинированным и, следовательно, иногда более ограничивающим языком, чем Perl. PEAR очень похож на CPAN - я думаю, он не такой большой, но тогда CPAN настолько велик, что в нем много дросса.

НТН

Colin

1 голос
/ 05 мая 2009

Попробуйте Catalyst с Template Toolkit .

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>
    <title>[% title %]</title>
  </head>
  <body> 
    <div id="header">
      <a href="/index.html" class="logo" alt="Home Page"></a>
      <h1 class="headline">[% title %]</h1>
    </div>

    [% content %]

    <div id="footer">
      <div id="copyright">
        &copy; [% copyright %]
      </div>
    </div>
  </body>
</html>
1 голос
/ 05 мая 2009

У PHP и Perl есть свои моменты, но это действительно субъективно. Perl имеет массивные фреймворки, доступные на CPAN, которые могут заставить его работать или даже лучше, чем PHP, даже в чисто CGI-среде. В то же время, PHP имеет большое количество последователей и множество готовых функций, которые упрощают программирование веб-сайтов. Выбор для меня сводится к личным предпочтениям. Лично я предпочитаю использовать Perl, чем пытаться найти все функциональные способы работы в PHP. Удачи!

...