Когда я должен использовать 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.

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

  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.

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

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

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

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

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

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

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

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

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

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

Вот простой пример «привет мир», который работает под 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-bin.

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

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

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

НТН

Colin

Если вы используете хостинг, во многих случаях 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 с 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>
   <Голова>
     <title> [% title%] </ title>
   </ HEAD>
   <Тело> 
     <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">
         & Копировать;  [% Авторские права %]
       </ DIV>
     </ DIV>
   </ Body>
 </ Html>