Когда мне следует использовать Perl CGI вместо PHP (или наоборот)?
Вопрос
В целях хобби у меня есть общее пространство на хостинг-сервере, который, как и многие из них, предоставляет как 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.
Какой язык вы используете, должно определяться инструментами, которые он предоставляет, и тем, как они соответствуют вашим потребностям. Р> <Ол>
Кроме того, я рекомендую не использовать 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 активно его использовать.
Существует две основные причины, по которым с точки зрения масштабирования не имеет значения, какой язык вы выберете:
<Ол>Выберите язык, на котором вы и ваша команда сможете разработать наиболее эффективно.
Вот простой «привет мир» пример, который работает под 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"> © [% copyright %] </div> </div> </body> </html>