Динамический топор
Архив Когда четыре месяца назад я готовил тему номера "От страницы к сайту", мы провели, как нам казалось, некую границу, отделяющую то, что в Интернете принято называть сайтом, от обычной домашней страницы. Однако и места в номере, и творческого запала тогда хватило лишь на то, чтобы обозначить эту границу. Фактически же, станет ваш сайт всего лишь набором страничек или будет полноценным бизнес-инструментом, определяется еще задолго до того, как вы приступили к его созданию. Ведь кроме функциональности надо не забывать и о стоимости владения. И сайтостроение - как раз та область бизнеса, где эта самая стоимость владения способна свести на нет все преимущества, предоставляемые сайтом.
Не зря тема номера называется "Срубаем сайты". Срубить избу, пожалуй, сможет каждый, кто хоть раз видел, как это делается. И изба у него получится красивая, уютная, удобная - на зависть соседям. А потом наступит зима, и выяснится, что изба-то холодная, из щелей дует, потолок промерз, рамы покоробило: А дальше весна, усадка почвы, и стоит прошлогодняя красавица, покосившись.
Так же и с сайтами. "Срубить" красивый и функциональный сайт нетрудно. Какое-то время он будет радовать и вас, и посетителей. Но потом вы вдруг обнаружите, что не можете успеть повсюду. Сайт разрастается, в нем появляются новые разделы, новые функции. И вот уже, чтобы поменять какой-нибудь телефон службы поддержки, вам нужно обойти десятки страниц. С какого-то момента внесение изменений и поддержка работоспособности сайта начинает отнимать столько сил и времени, что не спасает ни дополнительный персонал, ни авралы.
Вы не пробовали что-нибудь купить в магазине по прайс-листам, выложенным в Интернете? Я давно уже перестал и пытаться, ибо знаю весь разговор наперед:
- Добрый день, я хотел бы купить у вас то-то и то-то.
- А с чего вы взяли, что это у нас есть?
- Ну как же, на вашем сайте...
- Хватились, там же информация трехмесячной давности.
- Что же вы не обновите?
- А думаете, так просто? У нас же сотни позиций, пока все введешь, уже устаревает.
Меня так и подмывает спросить: "Что же вы не подключите Web-сервер к своей складской базе данных, чтобы вся информация тянулась оттуда?", но понимаю, что девочке, с которой я разговариваю, это все глубоко до фени, а бесплатно консультировать ее начальство или "Web-мастера" я не намерен. Впрочем, статья Валерия Толкова, посвященная как раз организации баз данных на сервере, может быть, и поможет владельцам магазинов содержать свои серверы в порядке.
Кстати, наши коллеги из "ИнфоБизнеса" чуть было не вляпались в подобную историю со своим сайтом. Но, как профессионалы информационных технологий, смогли углядеть проблему, пока она еще не успела показать зубы. И переделали на ходу всю технологию работы сайта, когда это еще можно было сделать. Я думаю, что статья Михаила Писарева "Мемуары сайтостроителя", где он описывает свои мытарства и победу, многим поможет не наступить на те грабли, на которые то и дело наступают не только начинающие, но и многие "опытные" Web-мастера.
На самом деле решение этой проблемы известно давно (Web существует уже более десятка лет). Оно заключается в двух словах: "динамический HTML". Что это значит? Это значит, что все файлы на сервере, для которых не требуется наличия мыслительных и творческих способностей человека, должны делаться автоматически и без его участия. Загляните на сайт "Компьютерра онлайн" (www.computerra.ru) и нажмите на ссылку "свежий номер". Увидите оглавление. Однако такого HTML-файла на нашем сервере нет. В тот момент, когда вы нажимаете на ссылку, CGI-программа пробегает по каталогу свежего номера, вытаскивает из файлов заголовки и формирует оглавление. Добавили материал - он появился в оглавлении, убрали - исчез. Поменяли название статьи, изменилось и ее название в оглавлении. Представляете, сколько времени отняли бы эти действия, если бы оглавление делалось традиционным способом, в виде HTML-файла. Недавно у одного из наших авторов поменялся e-mail. При обычном раскладе Web-мастеру пришлось бы целый день лазить по всем статьям, где этот e-mail упоминается, и менять его вручную. Он же сделал это за десять секунд, изменив адрес в одном-единственном файле, откуда берется информация для всех страниц.
Ну да ладно, сайт "Компьютерра онлайн" спрограммировала студия Лебедева, а ее программисты дело знают. Но ведь в Сети сейчас предлагают свои услуги десятки Web-студий. И, как показало небольшое исследование, которое я провел, готовя эту тему, примерно в половине из них нет должности программиста, а руководители даже не знают, зачем он нужен. А ведь правильно сделанный сайт - это вовсе не набор HTML-страниц, а прежде всего программное обеспечение. Не зря, упоминая о студии Лебедева, я употребил глагол не "сделала", но "спрограммировала".
К слову сказать, во множестве контор, которые предлагают в русском Интернете место для размещения сайта, ситуация похожа. Лишь немногие понимают, что для нормального бизнеса нужно предоставить клиенту не только место на диске, а еще множество других услуг. Именно поэтому свой личный сайт я разместил у американского провайдера. Впрочем, я уже писал об этом в теме номера "От страницы к сайту".
Вообще-то ситуация напоминает мне конец восьмидесятых годов с тогдашним всплеском бухгалтерского программирования. В те времена каждая контора норовила создать свою собственную бухгалтерскую или складскую программу, приглашала программиста со стороны, чтобы тот написал программу специально под них, с учетом их специфики. Где теперь те самопальные программы?! На рынке - коробочные продукты от десятка фирм-профессионалов. Похоже, ситуация повторяется. Сейчас каждый, делая себе сайт, приглашает программиста специально для своего случая. Месяца три назад у меня мелькнула мысль: странно, что до сих пор нет "коробочного" продукта для динамического Web-сайта. Ан нет, оказалось, я поторопился. На "Comdex" в Лас-Вегасе экспонировалось аж три таких продукта. Правда, цена - закачаешься, не дешевле трех тысяч долларов, но зато и возможностей!.. Дух захватывает. Не в пример продуктам, сделанным на заказ. Правда, сами вы такой софт не поставите - уж очень разнообразны платформы в Интернете. Поэтому к вам должен приехать специалист фирмы, поставить, настроить. А это значит, что до нас это веяние дойдет еще нескоро.
Именно поэтому я советую вам прочитать статью "Краткий путеводитель для начинающих" Павла Черкашина, где подробно рассказывается, как надо подходить к заказыванию Web-серверов.
Ну, и в заключение немного об инструментах динамического HTML, названия которых вам будут встречаться в теме.
SSI
Расшифровывается это как Servers Side Include - система команд на стороне сервера. Дело в том, что включение в HTML некоторых тегов может заставить сервер, где расположена страница, выполнить некие действия, которые не по зубам самому браузеру. Например, запустить внешнюю программу и вставить результат ее работы прямо в текущий документ. Или даже ничего не запускать, а просто взять с диска текстовый файл или картинку и вставить их куда надо.
Зачем это нужно?
Вот простейший пример. На рисунке - сайт автора. Слева - меню. Это меню присутствует на всех страницах сайта, а их более полусотни. Теперь представьте, что в меню надо добавить одну кнопочку. И сколько времени потребуется, чтобы добавить эту кнопочку на всех страницах? На самом же деле, этого меню в HTML-коде страниц нет. Там есть только одна SSI-команда "!-#include virtual="/toc" -", которая говорит серверу, что надо взять с диска файл toc и вставить в это место документа. А файл toc как раз и содержит меню. Поэтому кнопочка, добавленная в этот файл, тут же добавится на всех страницах.
Если бы вместо #include в команде стояло #exec, сервер запустил бы на исполнение программу toc и вставил в документ данные, полученные в результате ее работы. SSI имеет большой набор команд, и не будет преувеличением сказать, что она является основой динамического HTML. Подробно c SSI можно ознакомиться по адресу www-sbras.ict.nsk.su/win/docs/html-gd/ssi.html.
CGI
Аббревиатура CGI встречается в сайтостроении на каждом шагу. CGI-программирование, CGI-скрипты, страницы, генерирующиеся через CGI... Эти три буквы пугают многих, впервые с ними встретившихся, кажется, за ними скрывается что-то страшное: сложное, многогранное, нечто вроде C++. Впрочем, неудивительно, ведь эта аббревиатура используется так часто, к месту и не к месту, что почти утратила свой первоначальный смысл. Точно так же, как в годы моего детства словом "транзистор" в быту называли не полупроводниковый элемент, а радиоприемник, собранный на этих самых транзисторах.
На самом же деле CGI - это не язык программирования и даже на командный язык. Это просто способ передачи данных от браузера к вызванной им программе. Представим, что мы заполнили в браузере какую-то анкетку и нажимаем на кнопочку "готово". Данные должны быть записаны на диск сервера. Но как? Браузер этого сделать не может: нет в HTML такой функции - записать на диск. Поэтому браузер запускает на сервере программу, которая может это сделать. Но вот как браузер передаст программе те данные, что мы ввели?
Действительно, когда мы запускаем программу из командной строки DOS или Unix, мы вводим данные с клавиатуры в ответ на ее запрос. В Windows-программу мы вводим данные при помощи мышки или опять-таки с клавиатуры в какое-нибудь окошечко. А в WWW на помощь приходит CGI - Common Gateway Interface.
Как это работает? Все очень просто. При нажатии кнопочки браузер заключает полученные данные в переменные и отправляет их в некую стандартную область памяти, откуда они могут быть прочитаны запустившейся программой. Имена переменных строго стандартны. К примеру, данные которые мы ввели в анкету, будут записаны в переменную с именем QUERY_STRING, а адрес страницы, с которой пришел запрос, будет записан в переменную HTTP_REFER. Поэтому для того, чтобы написать так называемую CGI-программу, не нужно быть семи пядей во лбу. Сгодится практически любой язык программирования, но чаще используют языки С, Perl и Visual Basic. Это дело вкуса, один мой знакомый пишет такие программы исключительно на Паскале. А дальше просто. Прочитал в программе переменную QUERY_STRING (точно так, как если бы она вводилась с клавиатуры) - получил данные нашей анкеты, прочитал перeменную HTTP_USER_AGENT - узнал имя браузера, который передал данные. Стандартный поток вывода в CGI отправляется не на экран, а обратно, в браузер.
Так что все искусство CGI-программирования заключается в том, чтобы знать, в какие переменные какая информация помещается. Очень подробную информацию об этом можно найти на сайте agora.leeds.ac.uk/nik/Cgi/start.html.
Perl
Это слово преследует всех, кто занимается сайтостроением. Что же это такое? Это просто язык программирования, когда-то очень популярный на платформах Unix, а затем перенесенный и на другие платформы. Программы на Perl называются сценариями (скриптами). Это связано с тем, что Perl не компилятор, а интерпретатор (как BASIC), и его программа - это не бинарный файл, а текст. Это дает огромные преимущества. Во-первых, легкую переносимость с платформы на платформу. Текст он и есть текст, и интерпретатор Perl исполнит его абсолютно одинаково и под Unix, и под Windows NT. Во-вторых, если что-то не так, поправить текст - минутное дело. И, наконец, если вам в руки попадает чужая Perl-программа, вы без труда можете модернизировать ее, приспособив для своих нужд. Все эти обстоятельства обусловили чрезвычайно широкое распространение Perl в Интернете. Однако у Perl есть и недостатки, и прежде всего то, что его программы выполняются очень медленно. Когда сервер посещает несколько человек в час, это несущественно. А если десяток человек в секунду, как это сейчас происходит на сервере "Компьютерра онлайн"? Тогда перегрузка, вызванная одновременной работой многих Perl-скриптов, может запросто обрушить сервер. Именно поэтому мы сейчас стремимся избавиться у себя от Perl-скриптов везде, где только можно.
Java
Java - это тоже язык программирования, который обладает тем же преимуществом, что и Perl. Программа на Java будет работать на любой платформе. Но гораздо быстрее, поскольку Java-программы - это не текст, а бинарный файл, уже откомпилированный в систему команд условной виртуальной машины. Эта система команд одинакова для любой платформы, где работает такая виртуальная машина. Она переводит код Java в команды конкретной операционной системы. Так, например, виртуальными машинами Java комплектуются последние версии практически всех браузеров.
Что дает применение Java? Очень много. К примеру, многие владельцы домашних страниц не могут запускать у себя на сервере CGI-скрипты, это запрещено администрацией сервера из соображений безопасности. Но они могут положить программу на Java в свой каталог, а браузер вытащит ее оттуда и выполнит на машине клиента (как я уже говорил, все современные браузеры комплектуются Java-машинами). Это касается домашних страниц. То же самое можно сказать и о корпоративных серверах. Если на сайте много посетителей, то сервер непременно будет перегружен большим количеством одновременно работающих приложений. Рассредоточение этих приложений по клиентским машинам сильно разгружает сервер. К слову сказать, даже если бы все Java-приложения выполнялись на сервере, они все равно загружали бы его существенно меньше, чем тот же Perl.