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

Таким образом, в Web-технологии логика приложения распределена между клиентом и сервером. Поэтому есть два направления развития Web-технологии: "клиентское", когда основные вычисления происходят на клиенте, а роль сервера сводится лишь к загрузке в клиентскую систему необходимых программ и, может быть, взаимодействию с ними; и "серверное", при котором выполнение программ осуществляется на сервере, а клиенту предоставляются лишь результаты их работы. Java является классическим представителем вычислений, выполняемых на стороне клиенте. Однако сейчас активно начинает развиваться и другое направление использования этой технологии - серверные вычисления, типичными представителями которых являются сервера Web-приложений.

Какую же модель вычислений избрать при проектировании приложений - серверную или клиентскую? Одним из основных критериев выбора, видимо, должна служить производительность приложения, на которую влияет ряд факторов, описанных ниже.

Фактор 1: Производительность клиента

Первым фактором, влияющим на производительность Web-приложений, является скорость работы клиента. Собственно, для вывода на экран HTML-страницы большой скорости не требуется, однако если на клиенте должно работать Java-приложение, то общая производительность будет сильна зависеть от скорости его загрузки. Правда, следует заметить, что загрузившись в клиентскую систему, Java-приложение может работать автономно, без связи с сервером (если ему не требуются услуги сервера). В этом случае скорость работы приложения определяется лишь эффективностью его программного кода и производительностью клиентской системы (т.е. никак не зависит от таких факторов, как качество канала связи и производительность сервера). Системы, основанные на серверных вычислениях, автономно работать не могут.

Фактор 2: Интерпретация HTML

Следующим фактором является скорость интерпретации страниц HTML и протокола HTTP. Как правило, на это большого времени не требуется, так как и протокол и язык разметки являются очень простыми. Этот фактор может сказываться только на самых древних компьютерах, например 286-ых и 386-ых. В случае же, когда связь с сервером настолько плохая, что по ней невозможно передавать даже текстовые страницы, Java может предложить обходное решение - использовать альтернативный протокол связи, который бы максимально использовал особенности канала. Правда, в этом случае само Java-приложение придется передавать на клиент не через этот канал, а, например, на дискете.

Фактор 3: Пропускная способность линии

От качества линии связи зависит скорость обмена между клиентом и сервером, а следовательно, и производительность системы в целом. Если для связи используется соединение по телефонной линии, то это может существенно снизить производительность. Однако, HTML-документ, содержащий только текст, имеет небольшой объем и поэтому его можно быстро передать даже по очень надежным линиям. В то же время, для Java-программ пропускная способность канала связи с клиентом может оказаться самым узким местом. Долго передавать по медленным каналам приложение - занятие утомительное. Однако, если оно ориентировано на сложные действия пользователей или динамичную графику, то без программ на Java все равно не обойтись.

Фактор 4: Производительность сервера

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

Фактор 5: Производительность приложений

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

Из вышесказанного понятно, что для увеличения производительности Java-приложения необходимо иметь достаточно скоростной компьютер и канал связи с сервером, что можно сделать только в локальной или корпоративной сети. Поэтому клиентские программы на Java в основном используются в корпоративных сетях типа intranet. Использование сложных клиентских программ в сети Internet, для доступа к которой нередко используется модемная связь, вряд ли целесообразно. Видимо, в этих случаях более оправданным решением является использование серверных вычислений, в которых клиент-браузер выполняет роль простого интерфейса с пользователем.

Для сложных систем, к которым необходимо обеспечить удаленный доступ, видимо, разумнее всего использовать оба подхода. То есть приложения, которые достаточно загрузить один раз и потом долго использовать (например, текстовый процессор), вполне логично написать на Java. В то же время, в таких приложений, которым необходима оперативная доставка текстовой информации (например, для чтения электронной почты), лучше всего использовать технологию серверных вычислений.

Многие до сих пор продолжают считать, что Web и Java - "близнецы-братья". На самом деле это совсем не так. Технология Java шагнула далеко за пределы Web - к распределенным вычислениям, которые на Web реализовать практически невозможно. Поэтому основное развитие этой технологии в дальнейшем, видимо, будет происходить в направлении распределенных вычислительных систем, аглетов и хранилищ Java-элементов. О многих из этих направлений мы уже писали на страницах JavaWorld.