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

Вбрасывание ошибки на самом деле звучит хорошо, что можно сделать довольно элегантно:

 const cancellable = fn => (...args) => {
  let cancel = false;
  const breakpoint = () => {
    if(cancel) throw new Error("Cancelation");
  };

  return {
    result: fn(breakpoint, ...args).catch(console.log),
    stop() { cancel = true; },
  };
};

Это можно использовать как:

const doSomeStuff = cancellable(async function doSomeStuff(breakpoint) {
  await aLongTask();
  breakpoint();
  await anotherBigOldTask();
  breakpoint();
  await bigNestedTaskThatTakesForever();
  return "Done";
 });

 let task = doSomeStuff();
 task.stop();
15
задан Community 23 May 2017 в 12:02
поделиться

8 ответов

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

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

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

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

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

Если вы создаете простой, персональный или хобби-сайт, CGI будет хорошо. То же самое будет и с PHP.

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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

Они действуют как ускорители CGI, но могут делать многое, многое, многое другое.

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

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

Они действуют как ускорители CGI, но могут делать многое, многое, многое другое.

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

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

31
ответ дан 1 December 2019 в 00:16
поделиться

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

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

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

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

Итак, мой ответ - выбрать небольшой проект,

8
ответ дан 1 December 2019 в 00:16
поделиться

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

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

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

НТН [+1295] Колин

2
ответ дан 1 December 2019 в 00:16
поделиться

If you use hosting, in many cases PHP would be run as CGI too. If you don't want to run FastCGI or mod_perl, you can use CGI::Application framework. CGI::Application will run with FastCGI or mod_perl too, but unlike Catalyst will run as CGI too. Both Catalyst and CGI::Application also can be run with their own web servers.

2
ответ дан 1 December 2019 в 00:16
поделиться

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

1
ответ дан 1 December 2019 в 00:16
поделиться

Попробуйте 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
ответ дан 1 December 2019 в 00:16
поделиться

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

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

Есть две основные причины, по которым это происходит. С точки зрения масштабирования не имеет значения, какой язык вы выберете:

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

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

4
ответ дан 1 December 2019 в 00:16
поделиться

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

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 -бин.

3
ответ дан 1 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: