Когда мне следует использовать Perl CGI вместо PHP (или наоборот)?

StackOverflow https://stackoverflow.com/questions/824730

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

    <Ч>

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

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

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

    Другие советы

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

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

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

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

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

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

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

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

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

    Вот простой «привет мир» пример, который работает под CGI с использованием приседания веб-микрофрейма:

    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.

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

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

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

    ХТХ

    Колин

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

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

    Попробуйте 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>
        <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>
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top