T.Powell."Особенности языка Java-script"
T.Powell
Особенности языка JavaScript
Хотите, чтобы созданные вами кнопочки оживали, когда над ними проходит указатель мыши? А как насчет динамически генерируемых страниц, внешний вид которых зависит от времени дня, или форм, не позволяющих посетителям Web-узла вводить в них некорректные данные? Язык JavaScript может делать все это и даже гораздо больше.
На многих узлах Сети уже нашли применение прокручивающиеся строки состояния, "пульты дистанционного управления" и многие другие "штучки", выполненные с использованием JavaScript. Глядя на них, можно подумать, будто этот язык только и годен на то, чтобы создавать небольшие украшения для Web-страниц. На самом же деле JavaScript способен делать значительно больше. Позвольте предложить вам небольшую экскурсию по возможностям этого языка: по ходу ее мы рассмотрим, как он вписывается в общую картину программирования для Web, как работает и какова его роль в построении Web-страниц будущих поколений.
Что такое JavaScript?
Разработанный специалистами корпорации Netscape язык программирования JavaScript впервые получил распространение в составе броузера Navigator 2.0. Первоначально названный LiveScript, он предназначался для описания сценариев в рамках среды разработки Web-приложений корпорации Netscape, которая именовалась LiveWire. Своим нынешним названием, приобретенным в конце 1995 г., JavaScript обязан начавшейся шумихе вокруг языка программирования Java.
С самого начала JavaScript был задуман как удобный язык описания сценариев, которым проектировщики Web-материалов могли бы пользоваться для размещения дополнительных элементов на HTML-страницах. В этом его отличие от Java и других более традиционных языков программирования, применяемых в Internet и требующих определенных навыков для работы с ними. Нередко далекие от программирования люди рассматривают JavaScript как облегченный вариант Java или как язык создания Web-приложений, предназначенный для "остальных из нас". Однако это ни то и ни другое. Хотя JavaScript и может использоваться для построения мощных Web-приложений, он не является самодостаточным средством для этого.
Разработчики HTML-документов и другие специалисты с небольшим опытом программирования или вообще без такового обычно неверно представляют себе концепцию JavaScript. Рассматривая его как некий "черный ящик", они просто включают в свои страницы (для их украшения и усовершенствования) готовые к использованию сценарии. JavaScript способен на значительно большее, однако, чтобы воспользоваться всем его потенциалом, необходимы некоторые навыки в программировании. Истинное предназначение JavaScript станет более ясным, если рассматривать его в общем контексте парадигмы Web-программирования.
Зачем понадобился JavaScript
Существует множество технологий, которые можно было бы применить для придания динамических программируемых свойств статическим Web-страницам. Один из распространенных подходов заключается в использовании CGI-программ, которые размещаются и исполняются на Web-сервере. Пользователь взаимодействует с такой программой, заполняя HTML-формы, которые затем отправляются на сервер, CGI-приложение анализирует введенные пользователем данные и выполняет те или иные действия. Результат выдается в виде еще одной Web-страницы. Этот подход к Web-программированию целесообразен для передачи на обработку запросов к БД, поисковым серверам или каталогам.
К сожалению, пользователи жалуются, что CGI-программы работают медленно и не сохраняют текущее состояние при переходе от страницы к странице. Эти недостатки присущи не только технологии CGI. Нельзя даже сказать, что это именно ее недостатки. Например, если CGI-программа написана на относительно медленном интерпретируемом языке, таком как Perl, а не на компилируемом C, она и исполняться будет медленно. Далее, многие операционные системы запускают каждый раз новую копию CGI-программы, неоправданно расходуя системные ресурсы.
Улучшение программной интеграции на серверной стороне посредством интерфейсов прикладного программирования Netscape API (NSAPI), Microsoft Internet Server API (ISAPI) или Apache поможет избавиться от многих проблем с накладными вычислительными расходами CGI-программ, однако главная проблема остается: вся работа должна выполняться сервером. А когда вся нагрузка ложится на сервер, он становится узким местом вычислительной системы.
Более того, такое распределение функций может привести к неэффективной организации вычислений. Допустим, вы, заказывая в электронном обувном магазине туфли, нечаянно ввели размер 38 (см). Такого размера не бывает, но тем не менее заполненная форма будет передана на сервер, которому придется тратить время на обработку некорректного заказа. Было бы намного лучше проверять допустимость введенных данных еще до того, как форма будет передана на сервер. Тогда можно одновременно получить и более дружественный интерфейс, и освободить сервер от части работы (см. рисунок).
Хотя JavaScript разрабатывался для программирования как раз таких задач, он представляет собой нечто большее, чем просто язык, описывающий процедуры контроля допустимости пользовательского ввода. Его можно рассматривать как своеобразный "клей", который связывает Web-страницы на клиентской стороне воедино.
С помощью JavaScript реализуются программы, определяющие тип используемого броузера и состав установленных интегрируемых модулей к нему, а также решающие другие несложные задачи, которые встречаются при построении динамических страниц. С появлением технологии LiveConnect корпорации Netscape JavaScript становится языком управления и организации взаимодействия между такими объектами Web-страниц, как дополнительные интегрируемые модули, слои представления, фреймы, списки стилевых компонентов и мини-программы Java. Роль JavaScript как связующего языка еще не до конца изучена, однако потенциал его таков, что он может затмить технологию HTML.
Как использовать JavaScript
Имеются две основные разновидности JavaScript: интерпретируемый язык для создания приложений, исполняемых на клиентской стороне, и компилируемый - для разработки серверных программ. Последний существует исключительно в рамках продукта Netscape LiveWire. Мы же сосредоточим внимание на первой разновидности, с которой обычно имеют дело пользователи Web. Клиентский вариант JavaScript представляет собой просто набор команд, предназначенных для встраивания в HTML-страницы, как правило, между тегами . Хотя этот способ использования JavaScript, по-видимому, не отличается от принятого в HTML, последний предназначен для описания компоновки и структуры документов, встроенных в них объектов и междокументных ссылок, тогда как JavaScript добавляет логику и функции программирования.
JavaScript-команды помещаются в файлах HTML в основном в трех местах: в тегах
и , а также в тегах конкретных элементов форм. Когда страница со встроенными JavaScript-командами загружается в поддерживающий этот язык броузер, такие команды интерпретируются и исполняются строка за строкой. Некоторые из них, в частности команда вставки даты внизу страницы, исполняются немедленно, другие же, такие как связанная с экранной кнопкой, - только по совершении пользователем соответствующего действия.Тем, кому приходилось пользоваться языками, подобными C, сравнительно несложный синтаксис JavaScript должен показаться знакомым. (Дополнительную информацию можно получить из обучающего материала "JavaScript Tutorial", опубликованного по адресу www.netguidemag.com/techshop.) Сложнее всего при применении JavaScript понять то, что все множество объектов, отображаемых в окне броузера (окна, фреймы, формы, списки и т. д.), может управляться из JavaScript-сценария просто при помощи соответствующих объектных ссылок на них.
Объекты имеют внутренне присущие им свойства (атрибуты), а объектно-ориентированные программы, обладая широкими возможностями, легко поддаются модернизации. Используя объектно-ориентированные концепции броузеров, сам броузер можно смоделировать как совокупность составляющих его объектов - окна, фреймов, документа, форм и их элементов и т. п. Так, окно броузера в подобной модели может быть представлено объектом window, обладающим таким атрибутом, как строка состояния внизу экрана, в которой появляются сообщения, допускающие просмотр и модификацию. Содержание строки состояния может быть установлено JavaScript-командой, например window.status = "Hello World".
Кроме того, JavaScript предлагает встроенные функции, или методы, которые могут быть применены к объектам при выполнении стандартных видов работ с ними. Предположим, вам понадобилось создать небольшое окно с уведомлением. Это можно осуществить с помощью объекта window, воспользовавшись командой window.alert("Hello World"). После ее исполнения на экране появится окно с текстом "Hello World" внутри него.
Общее количество свойств и методов в языке JavaScript огромно, и по-настоящему овладеть им можно, только получив представление обо всех доступных возможностях. Пусть вас не беспокоят объектно-ориентированные основы JavaScript: в реальном применении он оказывается весьма понятным и процедурным, напоминая в этом большинство других языков программирования. Пример кода на приведенном рисунке демонстрирует некоторые возможности использования JavaScript в простейшей Web-странице.
Имейте в виду: старые версии броузеров не понимают JavaScript и, получив команды этого языка, выводят их на экран как обычный текст. Поэтому необходимо "прятать" их внутри HTML-комментариев. В настоящее время JavaScript поддерживают только броузеры производства корпорации Netscape (версии 2.0 и более поздних) и Microsoft Internet Explorer 3.0.
К сожалению, все они поддерживают JavaScript различным образом, так что у этого языка появляются все новые диалекты и особенности, связанные с применением его на конкретных платформах. Клон языка JavaScript, созданный специалистами корпорации Microsoft и получивший название JScript, почти идентичен версии JavaScript 1.0 (которая используется в Netscape 2.x). С другой стороны, броузеры Netscape 3.x ориентированы на версию JavaScript 1.1, дополненную такими возможностями, как динамическая замена изображений, которая может применяться для создания анимированных кнопок.
Между реализациями JavaScript в новом продукте компании Netscape под названием Communicator и в Internet Explorer 4.0, несомненно, окажется еще больше различий и несоответствий.
Спецификации языка JavaScript быстро меняются, а его поддержка на различных платформах имеет свои особенности, так что следует быть осторожным, применяя его с броузерами. Не пренебрегайте тщательным тестированием созданных страниц (см. врезку "Подводные камни JavaScript").
Ключ к правильному применению JavaScript - знать, когда и как помещать команды на страницах. Сам по себе этот язык поможет вам украсить Web-страницы несложными анимированными кнопками, всплывающими окнами и строками состояния. Даже минимальных познаний в области программирования достаточно, чтобы скопировать готовый сценарий в страницу через системный буфер обмена.
Истинные возможности JavaScript, однако, откроются только в сочетании его с другими технологиями, такими как HTML, ActiveX, CGI, Java и дополнительные интегрируемые модули к броузерам. По мере того как Web отходит от электронных копий печатных страниц и все больше приобщается к программируемой парадигме, JavaScript постепенно становится таким же необходимым средством в наборе инструментов проектировщика материалов для Web, как и HTML.
NetGuide
Справочный листок
Web-узлы
Acadia Software - www.acadians.com
The JavaScript Index (индексный указатель по JavaScript) www.c2.org~/andreww/javascript
JavaScript Tip of the Week (лучший совет по JavaScript за неделю) - www.webreference.com/javascript
Руководство по JavaScript, опубликованное Netscape home.netscape.com/eng/mozilla/3.0/handbook/javascript/index.html
Подводные камни JavaScript
Разработка на JavaScript каких-либо приложений, за исключением самых простейших, представляет определенные сложности из-за широкого распространения бета-версий броузеров, особенностей использования JavaScript на конкретных платформах и существования нескольких диалектов этого языка, поддерживаемых различными броузерами производства Netscape и Microsoft.
Недавно мне довелось редактировать посвященную JavaScript книгу, которая должна была выйти в издательстве "Prentice-Hall", и в ней более трети примеров исполнялись интерпретатором JScript броузера Internet Explorer неправильно. Даже при использовании продуктов Netscape программы вели себя странно и при определенных сочетаниях версий броузера и операционных платформ вызывали зависание системы. Так, версия интерпретатора JavaScript в броузере Netscape 2.02 для компьютеров Macintosh постоянно зависала при исполнении простейшей JavaScript-программы.34 В среде Solaris броузер Netscape исполнял JavaScript-сценарии с "косметическими" ошибками, которых не возникало под управлением Windows 95 и NT. Было ли это следствием небрежности программиста? Вовсе нет. Поскольку средства низкоуровневого доступа в JavaScript отсутствуют, сделать что-либо неправильно в этом смысле очень трудно. Авторы книги не виноваты. Но тогда кто же?
Еще один источник проблем с JavaScript выявился при применении его для несложного контроля пользовательского ввода на Web-узле одной из расположенных в Сан-Диего компаний, специализирующейся на сложной видеотехнике. Из-за жалоб внешних посетителей на нестабильность работы их броузеров с материалами узла от JavaScript пришлось отказаться. И хотя причиной, по всей вероятности, были ошибки бета-версий броузеров Netscape, пользователи во всем винили компанию.
В отношении технологий, подобных JavaScript, подход "Netscape прямо сейчас!", исповедуемый приверженцами немедленного внедрения всего самого нового любой ценой, нередко приводит к зависанию броузеров и появлению всплывающих окон с сообщениями "Object undefined" ("Объект не определен"). JavaScript может стать сущим наказанием в руках беспечных разработчиков, позволяющих себе небрежность или излишнюю свободу в обращении с кодом или не дающих себе труда достаточно тщательно протестировать свое изделие.