PDA

Просмотр полной версии : CGI в Дельфях. Для чего это нужно??


Тарифы: МТС, Билайн, МегаФон
Выгодные непубличные тарифы МТС, Билайн, МегаФон, Безлимитный интернет ✅
ТИМОТИ
24-05-2002, 12:12
Научился писать CGIки используя не Перл, а Дельфи. Просто интересно было как это делается. И какой прикол во всем этом?
Входящие на сайт данные можно обрабатывать и при помощи того же ПХП или СGIки на Перле писать (кому как нравится)...
Да и экзешник каждый раз надо новый компилить...Неудобно..

Может быть кто-нибудь мне скажет приимущества??

admin
24-05-2002, 12:24
Э-э, таких технологий много. Стараются не отстать от моды, типа с помощью нашего продукта вы можете сделать любой Интернет-приложение. Например, у Oracle весь сайт можно держать внутри базы данных. Но это решение как правило не очень универсальное, если захочется перенести его на что-то другое, то придется заново переписывать. Лучше уж использовать то, что и другие.

Есть ещё такое понятие как хостинг. У себя на сервере ты можешь вешать что угодно, а вот для переноса на хостинговый сервер тебе придётся писать под то, что стоит на сервере.

ТИМОТИ
24-05-2002, 12:32
И все же...Может быть есть свои плюсы?

Или это только для того, чтоб кто всегда на Паскале(Дельфи теперь) писал...мог стать полноценным веб-программистом , не изучая чего то кроме...?

admin
24-05-2002, 12:43
Плюсы в том, что можно использовать какие-то готовые компоненты. Не знаю, как насчёт Delphi, но к примеру, есть у вас какая-то важная программа, и к ней есть библиотеки и интерфейсы на C. Естественно, самый простой случай для связи с этой программой - это через cgi, написанный на том же С, благо ничего в этом сложного нет.

boco
24-05-2002, 12:46
плюсы есть - машинный код выполняятся быстрее пи-кода. хотя я не уверен, что дельфи генерит машинный код. =)

Nameless
24-05-2002, 14:00
Kylix точно машкод генерит, я его дизассемблял :]]

Кстати, я предпочитаю писать CGI на сях - и быстрее, и паранойя не грызет. Для регекспов есть libpcre :]]

ТИМОТИ
24-05-2002, 16:15
А скорость действительно бешено отличается.
Попробывал вывести 100 000 строк типа
0
1
2
...
на ПХП - около 8 сек (localhost)

CGIка, написаная на Дельфи...Какие то доли секунды..Даже не заметно

:))) Вот так вот)

AkKort
24-05-2002, 16:49
сравнил... если на сях писать и еще промежуточный буфер сделать на выход, то вообще... проблема в другом - если тебе захочется повесить сервак, а то и грохнуть винт, то на делфях и сях это займет те же доли секунды. причем, грамотный программист в состоянии в код встроить бэкдор так, что на глаз никто и никогда не определит ее.

Sen
24-05-2002, 16:58
пхп версии 4 и перл компилируют скрипты (пхп 3 и ранних версий только интерпритировал)... так, что всеравно скорость вполне достаточная...

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

Sen
24-05-2002, 17:02
дык это и не нужно... ты же не получишь все 100000 строк на свой комп сразу :)... используя функцию flash() в пхп можно отправлять данные до конца их формирования... так, что будет идти закачка одновременно с генерацией и толку от дельфи никакого...

ТИМОТИ
24-05-2002, 17:04
PHP компилирует??????? Ты откуда упал?
PHP интерпритатор...Smarty пхпешный конечно компилирует шаблоны, но все равно это не то!!!
Эх..
Жалко, что под Линуху на Дельфях не напишешь. Где можно Kylix взять???

AkKort
24-05-2002, 17:07
чем с точки зрения CGI делфи лучше С или Basic ?

ТИМОТИ
24-05-2002, 17:19
На С++ я уже года 4 ничего не делал...Забылось многое , да и привычнее уже как то на Дельфи писать, хотя опять таки за него я брался несколько месяцев назад не считая вчера и сегодня. В основном на PHP приходится писать на работе.
CGIки не пробывал еще в C - надо будет попробывать.

Поэтому не могут меня устраивать или не устраивать C или Basic что касается cgi.

AkKort
24-05-2002, 17:26
типовая болванка для cgi на с

char query[8192];
int main(int argc, char* argv[])
{

char *p;
int maxlen;

printf("Content-type: text/html\n\n");

p=getenv("QUERY_STRING");
printf("<!-- GET=%s-->\n",p);

p=getenv("CONTENT_LENGTH");
printf("<!-- POST size=%s-->\n",p);

if (p!=NULL) {
maxlen=atoi(p);
if ((maxlen<8190)&&(maxlen>0)) {
fread(query,1,maxlen,stdin);
query[maxlen]=0;
}
printf("<!-- POST=%s-->\n",query);
}

p=getenv("REMOTE_HOST");
printf("<!-- REMOTE_HOST=%s-->\n",p);

return 0;
}

AkKort
24-05-2002, 17:32
неоспоримое преимущество си перед делфи - это отличная оптимизация, возможность посмотреть, как конкретная последовательность операций преобразуется в машинный код, какие действия выполняются. ну и компактность со скоростью тоже имеют немаловажное значение. код делфи далек от оптимальности как по скорости, так и по размеру. про бейсик я вообще молчу.

более того, отладив приложение на ansi c под wintel, его очень легко перенести на linux или другую операционку, поковырявшись по мелочи с особенностями gcc и размернсотью опарандов на конкретном процессоре.

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

admin
25-05-2002, 21:39
Несколько размышлений, возможно, и неверных по поводу того, что для создания динамических приложений всё-таки лучше использовать простые интерпретируемые языки типа Perl и php:

1) Обычно динамические сайты постоянно подвергаются переделке. И чем проще, удобнее и распространённее язык, на котором это всё написано, тем легче будет непосвящённому человеку туда что-нибудь добавить. Так что у тебя не будет голова болеть о том, что мол им ничего не доверишь, а нужно самому всё вспоминать и делать.

2) Как правило в 95% случаев интерпретируемый язык будет работать с приемлемой скоростью, так как основная задержка происходит всё равно при доставке информации по сети.

3) Код для какого-нибудь С будет многократно больше, сложнее и глючнее, чем для того же php. С одним только выделением и сбором памяти замучаешься. Да ещё нужно тянуть нужные библиотеки с исходником.

4) Те же php и Perl используются большим количеством других разработчиков, соответственно есть масса уже готовых решений, из которых можно что-нибудь полезное выдрать.
Наличие множества встроенных функций для php и модулей с http://search.cpan.org для Perl тоже вызывает щенящий восторг.

Nameless
25-05-2002, 22:19
Все это хорошо, конечно. Вот только отучился ли Perl от постоянных memory leaks?

Я уж лучше сам память выделю, сам и освобожу :]]

Sen
25-05-2002, 22:27
Не откуда я не упал - еще как то!

ПХП3 - типичный интерпретатор, который при каждом обращении снова анализировал скрипт, написанный юзверем... процесс долгий, тупой по содержанию, едва приемлемый по скорости...

ПХП4 использовал такую же фичу, что и Perl, а именно, в момент обращение к скрипту - происходил анализ (как в пхп3), а затем компиляция его в память в так называемое "внутреннее представление", после чего дальнейшая работа с полученным байт-кодом шла в сотни раз быстрее.

Это можно сравнивать с запуском программ в VisualBasic IDE и уже EXEников VB.

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

ЗЫ. Повсеместно продается книженция "Самоучитель по PHP4" от Д.Котерова (красные такие буковки на синих клеточках - она везде есть). Открой там страницу 106 и почитай главу "Интерпретатор или компилятор?"... Там подробно это объясняется, у меня такого таланта нету, так, что взваливаю "это" на плечи других. Еще можно на сайте php.net "о достоинствах php4 перед php3"...

ЗЫ. В этом, кстати, коренное отличие ПХП4 от ПХП3...

ЗЫ. Проги от Дельфи намана идут под Линухом ;) ... и под MacX'ом тоже через "виртуальный рабочий стол".

ТИМОТИ
27-05-2002, 10:27
to Sen:
Действительно, то что делае PHP4 называется компиляцией...но все-таки как это далеко от привычного понимания этого понятия...

А "болезнь" прошла...Буду как и раньше использовать PHP и Перл)) На фуй нужны эти заморочки с уже откомпилироваными cgi'ками...

admin
27-05-2002, 11:10
А их там особо и не было, GC там достаточно эффективный. В общем-то для cgi варианта это не так уж и важно, скрипт выполняется, заканчивается, и вся память освобождается. Если нужно писать демон, то да, нужно тщательней анализировать всё и не полагаться на умолчания; например, закрывать соединения с базой данных, когда они уже не нужны. Хотя там проще запустить отдельный процесс и забыть про него.


Между прочим, для динамических сайтов не так важно, на чём написано приложение: на интерпретаторе или компиляторе. Для обеспечения скорости там используют совсем другие фокусы.

Обычно для ускорения вывода таких страниц на загруженных сайтах используют специальную технологию кеширования. Что-то типа: определённая страница формируется за счёт нескольких запросов в базу данных. Мы можем поступиться актуальностью данных и записывать полученную в результате запроса страницу куда-нибудь на время, ставя время кеширования. Перед выводом результата смотрим, есть ли страница в кеше, не вышло ли время, в результате чего можем выложить по-быстрому страничку прямо из кеша.

Sen
27-05-2002, 12:53
А если посмареть на скорость работы PHP3 и PHP4 - не так важно?

boco
27-05-2002, 13:32
я имел в виду, тот факт, что генерируемый дельфой машкод вряд ли сильно отличается от васиковского пи-кода по производительности - уж больно там оверхед на всякое говно большой. =)

admin
27-05-2002, 15:15
Наверно, сильно зависит от операционки. Кажется, php3 был мультипроцессный, а php4 сделали мультитредовым. Соответственно, под win разница существенная.

По-моему, смысл переписывать приложения под компилируемые языки в том, чтобы они жрали меньше памяти и процессорного времени. Но это так муторно. Сейчас торжествует другая идеология: интерфейс на простом языке, а backend на основе базы данных, которая всё-таки предназначена для хранения большого количества данных, умеет чего-то там кешировать, к тому же к ней можно обращаться из нескольких источников даже и на разных языках.

Например, когда я анализировал различные форумы на предмет поставить сюда, то встречал сообщения от некоторых типа: "Да я, да я создам крутейший форум на свете на С". Как пойдешь, посмотришь, оказывается что-то простенькое типа гостевухи.


Да и при программировании даже опытные программисты обычно пишут прототип программы на каком-нибудь Perl, отлаживают алгоритмы, смотрят как всё работает, и уже только потом начинают перенос на С. Можете почитать книгу Керниган и Пайк "Практика программирования" на этот счёт http://tpop.awl.com.

Sen
28-05-2002, 00:15
в принципе верно, но все же скорость была маленькая не по-ентому... она была маленькой даже на *никсах...

на самом деле пхп3 не создает байт-код и постоянно анализирует скрипт - на всякие кавычки, завершения, баксы, корректность введенных данных (напоминает кнопощку Compile в C++, чтобы позырить где ошибка и т.д.).

пхп4 анализирует ВСЕГО ОДИН РАЗОК... потом создает байт-код, который уже проверять не нужно, он и так проверенный.
(идею стыбзили у пёрла - по признаниям разработчиков)...

циклы в пхп4 работают в тысячи раз быстрее, чем в пхп3, потому как стадия повторного анализирования опускается...

2 ALL: ПРО КОМПИЛЛЯЦИЮ ПХП И ОТЛИЧИЕ ПХП3 ОТ ПХП4 МОЖНО ПОЧИТАТЬ ТУТ: http://php4you.kiev.ua/docs/newPHP4.htm - перевод на русский язык официальной доки

Nameless
28-05-2002, 00:25
Угу. Одна необходимость на каждый чих _динамически_ клепать объект VCL/CLX чего стоит :]