6

6


Простая идея распространения информации между людьми имеет столько уровней сложности в своей реализации, что в целом ее решение кажется недос¬тижимым. И все-таки она жизненно необходима: примерно половина всех задач программирования основана именно на ней. Она задействована в решении раз¬нообразных проблем: от обслуживания заказов и операций по кредитным кар¬точкам до распространения всевозможных данных — научных, правительствен¬ных, котировок акций... список можно продолжать до бесконечности. В про¬шлом для каждой новой задачи приходилось создавать отдельное решение. Эти решения непросто создавать, еще труднее ими пользоваться, и пользователю приходилось изучать новый интерфейс с каждой новой программой. Задача клиент/серверных вычислений нуждается в более широком подходе.
Веб как гигантский сервер
Фактически веб представляет собой одну огромную систему «клиент/сервер». Впрочем, это еще не все: в единой сети одновременно сосуществуют все серве¬ры и клиенты. Впрочем, этот факт вас не должен интересовать, поскольку обычно вы соединяетесь и взаимодействуете только с одним сервером (даже если его приходится разыскивать по всему миру).
На первых порах использовался простой однонаправленный обмен инфор¬мацией. Вы делали запрос к серверу, он отсылал вам файл, который обрабаты¬вала для вас ваша программа просмотра (то есть клиент). Но вскоре простого получения статических страниц с сервера стало недостаточно. Пользователи хотели использовать все возможности системы «клиент/сервер», отсылать ин¬формацию от клиента к серверу, чтобы, например, просматривать базу данных сервера, добавлять новую информацию на сервер или делать заказы (что требо¬вало особых мер безопасности). Эти изменения мы постоянно наблюдаем в процессе развития веб.
Средства просмотра веб (браузеры) стали большим шагом вперед: они ввели понятие информации, которая одинаково отображается на любых типах компь¬ютеров. Впрочем, первые браузеры были все же примитивны и быстро переста¬ли соответствовать предъявляемым требованиям. Они оказались не особенно интерактивны и тормозили работу как серверов, так и Интернета в целом — при любом действии, требующем программирования, приходилось посылать информацию серверу и ждать, когда он ее обработает. Иногда приходилось ждать несколько минут только для того, чтобы узнать, что вы пропустили в за¬просе одну букву. Так как браузер представлял собой только средство просмотра, он не мог выполнить даже простейших программных задач. (С другой стороны, это гарантировало безопасность — пользователь был огражден от запуска про¬грамм, содержащих вирусы или ошибки.)
Для решения этих задач предпринимались разные подходы. Для начала были улучшены стандарты отображения графики, чтобы браузеры могли ото¬бражать анимацию и видео. Остальные задачи требовали появления возможно¬сти запуска программ на машине клиента, внутри браузера. Это было названо программированием на стороне клиента.
Программирование на стороне клиента
Изначально система взаимодействия «сервер-браузер» разрабатывалась для интерактивного содержимого, но поддержка этой интерактивности была полно¬стью возложена на сервер. Сервер генерировал статические страницы для брау¬зера клиента, который их просто обрабатывал и показывал. Стандарт HTML поддерживает простейшие средства ввода данных: текстовые поля, переключа¬тели, флажки, списки и раскрывающиеся списки, вместе с кнопками, которые могут выполнить только два действия: сброс данных формы и ее отправку сер¬веру. Отправленная информация обрабатывается интерфейсом CGI (Common
Gateway Interface), поддерживаемым всеми веб-серверами. Текст запроса ука¬зывает CGI, как именно следует поступить с данными. Чаще всего по запросу запускается программа из каталога cgi-bin на сервере. (В строке с адресом стра¬ницы в браузере, после отправки данных формы, иногда можно разглядеть в ме¬шанине символов подстроку cgi-bin.) Такие программы можно написать почти на всех языках. Обычно используется Perl, так как он ориентирован на обработ¬ку текста, а также является интерпретируемым языком, соответственно, может быть использован на любом сервере, независимо от типа процессора или опера¬ционной системы. Впрочем, язык Python (мой любимый язык — зайдите наwww.Python.org) постепенно отвоевывает у него «территорию» благодаря своей мощи и простоте.
Многие мощные веб-серверы сегодня функционируют целиком на основе CGI; в принципе, эта технология позволяет решать почти любые задачи. Одна¬ко веб-серверы, построенные на CGI-программах, тяжело обслуживать, и на них существуют проблемы со скоростью отклика. Время отклика CGI-программы зависит от количества посылаемой информации, а также от загрузки сервера и сети. (Из-за всего упомянутого запуск CGI-программы может занять продол¬жительное время). Первые проектировщики веб не предвидели, как быстро истощатся ресурсы системы при ее использовании в различных приложени¬ях. Например, выводить графики в реальном времени в ней почти невозмож¬но, так как при любом изменении ситуации необходимо построить новый GIF- файл и передать его клиенту. Без сомнения, у вас есть собственный горький опыт — например, полученный при простой посылке данных формы. Вы нажи¬маете кнопку для отправки информации; сервер запускает CGI-программу, ко¬торая обнаруживает ошибку, формирует HTML-страницу, сообщающую вам об этом, а затем отсылает эту страницу в вашу сторону; вам приходится набирать данные заново и повторять попытку. Это не только медленно, это попросту не¬элегантно.
Проблема решается программированием на стороне клиента. Как правило, браузеры работают на мощных компьютерах, способных решать широкий диа¬пазон задач, а при стандартном подходе на базе HTML компьютер просто ожи¬дает, когда ему подадут следующую страницу. При клиентском программирова¬нии браузеру поручается вся работа, которую он способен выполнить, а для пользователя это оборачивается более быстрой работой в сети и улучшенной интерактивностью.
Впрочем, обсуждение клиентского программирования мало чем отличается от дискуссий о программировании в целом. Условия все те же, но платформы разные: браузер напоминает сильно усеченную операционную систему. В лю¬бом случае приходится программировать, поэтому программирование на сторо¬не клиента порождает головокружительное количество проблем и решений. В завершение этого раздела приводится обзор некоторых проблем и подходов, свойственных программированию на стороне клиента.
Модули расширения
Одним из самых важнейших направлений в клиентском программировании стала разработка модулей расширения (plug-ins). Этот подход позволяет программисту добавить к браузеру новые функции, загрузив небольшую про¬грамму, которая встраивается в браузер. Фактически с этого момента браузер об¬заводится новой функциональностью. (Модуль расширения загружается только один раз.) Подключаемые модули позволили оснастить браузеры рядом быст¬рых и мощных нововведений, но написание такого модуля — совсем непростая задача, и вряд ли каждый раз при создании какого-то нового сайта вы захотите создавать расширения. Ценность модулей расширения для клиентского про¬граммирования состоит в том, что они позволяют опытному программисту до¬полнить браузер новыми возможностями, не спрашивая разрешения у его соз¬дателя. Таким образом, модули расширения предоставляют «черный ход» для интеграции новых языков программирования на стороне клиента (хотя и не все языки реализованы в таких модулях).
Языки сценариев
Разработка модулей расширения привела к появлению множества языков для написания сценариев. Используя язык сценария, вы встраиваете клиентскую программу прямо в HTML-страницу, а модуль, обрабатывающий данный язык, автоматически активизируется при ее просмотре. Языки сценария обычно до¬вольно просты для изучения; в сущности, сценарный код представляет собой текст, входящий в состав HTML-страницы, поэтому он загружается очень быстро, как часть одного запроса к серверу во время получения страницы. Расплачи¬ваться за это приходится тем, что любой в силах просмотреть (и украсть) ваш код. Впрочем, вряд ли вы будете писать что-либо заслуживающее подражания и утонченное на языках сценариев, поэтому проблема копирования кода не так уж страшна.
Языком сценариев, который поддерживается практически любым браузером без установки дополнительных модулей, является JavaScript (имеющий весьма мало общего с Java; имя было использовано в целях «урвать» кусочек успеха Java на рынке). К сожалению, исходные реализации JavaScript в разных браузе¬рах довольно сильно отличались друг от друга и даже между разными версиями одного браузера. Стандартизация JavaScript в форме ECMAScript была полез¬на, но потребовалось время, чтобы ее поддержка появилась во всех брау- зерах (вдобавок компания Microsoft активно продвигала собственный язык VBScript, отдаленно напоминавший JavaScript). В общем случае разработчику приходит¬ся ограничиваться минимумом возможностей JavaScript, чтобы код гарантиро¬ванно работал во всех браузерах. Что касается обработки ошибок и отладки кода JavaScript, то занятие это в лучшем случае непростое. Лишь недавно раз¬работчикам удалось создать действительно сложную систему, написанную на JavaScript (компания Google, служба GMail), и это потребовало высочайшего энтузиазма и опыта.
Это показывает, что языки сценариев, используемые в браузерах, были предназначены для решения круга определенных задач, в основном для созда¬ния более насыщенного и интерактивного графического пользовательского ин¬терфейса (GUI). Однако язык сценариев может быть использован для решения 80 % задач клиентского программирования. Ваша задача может как раз входить в эти 80 %. Поскольку языки сценариев позволяют легко и быстро создавать программный код, вам стоит сначала рассмотреть именно такой язык, перед тем как переходить к более сложным технологическим решениям вроде Java.
Java
Если языки сценариев берут на себя 80 % задач клиентского программирова¬ния, кому же тогда «по зубам» остальные 20 %? Для них наиболее популяр¬ным решением сегодня является Java. Это не только мощный язык програм¬мирования, разработанный с учетом вопросов безопасности, платформен¬ной совместимости и интернационализации, но также постоянно совершен¬ствуемый инструмент, дополняемый новыми возможностями и библиотека¬ми, которые элегантно вписываются в решение традиционно сложных задач программирования: многозадачности, доступа к базам данных, сетевого про¬граммирования и распределенных вычислений. Клиентское программирование на Java сводится к разработке апплетов, а также к использованию пакета Java Web Start.
Апплет — мини-программа, которая может исполняться только внутри брау¬зера. Апплеты автоматически загружаются в составе веб-страницы (так же, как загружается, например, графика). Когда апплет активизируется, он выполняет программу. Это одно из преимуществ апплета — он позволяет автоматически распространять программы для клиентов с сервера именно тогда, когда пользо¬вателю понадобятся эти программы, и не раньше. Пользователь получает са¬мую свежую версию клиентской программы, без всяких проблем и трудностей, связанных с переустановкой. В соответствии с идеологией Java, программист создает только одну программу, которая автоматически работает на всех компь¬ютерах, где имеются браузеры со встроенным интерпретатором Java. (Это вер¬но практически для всех компьютеров.) Так как Java является полноценным языком программирования, как можно большая часть работы должна выпол¬няться на стороне клиента перед обращением к серверу (или после него). На¬пример, вам не понадобится пересылать запрос по Интернету, чтобы узнать, что в полученных данных или каких-то параметрах была ошибка, а компьютер кли¬ента сможет быстро начертить какой-либо график, не ожидая, пока это сделает сервер и отошлет обратно файл с изображением. Такая схема не только обеспе¬чивает мгновенный выигрыш в скорости и отзывчивости, но также снижает за¬грузку основного сетевого транспорта и серверов, предотвращая замедление ра¬боты с Интернетом в целом.

Report Page