Вбрасывание ошибки на самом деле звучит хорошо, что можно сделать довольно элегантно:
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();
«Устаревшая» CGI действительно является фактором, если вы работаете с большими и сложными сайтами с большим количеством просмотров страниц.
Многие люди выдвигают идею, что CGI устарела, не понимая, что такое CGI. Существует широко распространенное заблуждение, что CGI - это технология, основанная на Perl. Многие люди нападают на CGI как способ раскладывать культовые атаки на Perl в поддержку любого языка, который они поддерживают. Если вы хотите быть настоящим технологом, вам нужно понять фундаментальные проблемы и сделать выбор, основываясь на фактах ситуации.
CGI - это интерфейс с веб-сервером, который позволяет вам писать интерактивные страницы на любом языке: даже лучше . Когда сервер получает запрос на страницу, управляемую сценарием CGI, сервер запускает сценарий и возвращает результаты запрашивающей стороне.
Если вашему языку программирования требуется, чтобы виртуальная машина, интерпретатор или компилятор загружались при каждом запуске, то это время запуска будет требоваться при каждом доступе к вашей странице.
Ускорители CGI, такие как FastCGI, mod_php, mod_perl и т. Д. в-четвертых, всегда сохраняйте интерпретатор / ВМ в памяти, сохраняйте загруженные библиотеки и даже кэшируйте байт-код из сценариев, чтобы уменьшить накладные расходы при запуске сценария.
Если вы создаете простой, персональный или хобби-сайт, CGI будет хорошо. То же самое будет и с PHP.
Если ваш сайт нуждается в более быстрой технологии, вы можете перейти на mod_perl, FastCGI или другие технологии ускорения CGI.
Какой язык вы используете, должно определяться инструментами, которые он предоставляет, и тем, как они используются. соответствовать вашим потребностям.
Также я рекомендую не использовать 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.
Это довольно субъективный вопрос для решения, что использовать для хобби. Я решил изучить Perl как хобби, изучив PHP, и мне не понравился тот факт, что я не мог читать большую часть PHP там, и меня пугал список встроенных функций.
Первые несколько вещей, которые я сделал, были скрипты CGI для контактных форм и генератора фотоальбомов. У меня был дешевый план совместного хостинга, и у меня не было проблем с производительностью, поэтому проблема с производительностью никогда не возникала.
Вместо этого наличие comp.lang.perl.misc и CPAN гарантировало, что я никогда не пересматривал свое решение. вникать в PHP.
В то же время я понял, что большая часть контента на моих веб-сайтах статична после генерации, поэтому теперь я пишу сценарии Perl для генерации контента в автономном режиме.
Итак, мой ответ - выбрать небольшой проект,
Я использую как Perl, так и PHP для веб-сайтов - по историческим причинам, в основном Perl на работе и PHP дома; Я не думаю, что есть из чего выбирать между ними.
Если ваши страницы в основном представляют собой фиксированный HTML с небольшим количеством вычислений, PHP будет немного проще, потому что он все равно встроен в HTML.
Я считаю PHP более дисциплинированным, а потому и более ограничивающим языком, чем Perl. PEAR очень похож на CPAN - я думаю, он не такой большой, но тогда CPAN настолько велик, что в нем много дросса.
НТН [+1295] Колин
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.
У PHP и Perl есть свои моменты, но это действительно субъективно. Perl имеет массивные фреймворки, доступные на CPAN, которые могут заставить его работать, или даже лучше, чем PHP, даже в чисто CGI-среде. В то же время, PHP имеет большое количество поклонников и множество готовых функций, которые упрощают программирование веб-сайтов. Выбор для меня сводится к личным предпочтениям. Лично я предпочитаю использовать Perl, чем пытаться найти все функциональные способы работы в PHP. Удачи!
Попробуйте 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"> © [% copyright %] </div> </div> </body> </html>
Вопрос о том, используете ли вы PHP или Perl, с точки зрения масштабирования во многом так же, как разница между веб-приложением, написанным на PHP и C. Если бы разница действительно имела значение, мы бы все писали C или ассемблер.
PHP медленный, но это не мешает Wikipedia, Facebook и Yahoo широко его использовать.
Есть две основные причины, по которым это происходит. С точки зрения масштабирования не имеет значения, какой язык вы выберете:
Выберите язык, на котором вы и ваша команда сможете разработать наиболее эффективно.
Вот простой пример «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 -бин.