JavaScript – это сценарный и программный язык, позволяющий браузерам пользователей реализовывать сложные объекты на веб-страницах. Каждый раз, когда веб-страница делает больше, чем просто простаивает и отображает статическую информацию, а показывает своевременные обновления контента, интерактивные карты, анимированную 2D/3D-графику, автоматически проигрывает видео и т. д., вы можете быть уверены в задействовании JavaScript.
История создания
Разработка JavaScript началась в 1995 году в компании Netscape Communications, которая также является создателем популярного в то время браузера Netscape. Разработчики поняли, что добавление "связующего языка" для улучшения взаимодействия с пользователями в интернете улучшит его восприятие. Поэтому они наняли Брендана Эйха для встраивания языка программирования Scheme. Однако в то время уже был один очень популярный язык веб-программирования – Java. Так что руководители компании решили сделать свой язык ближе по синтаксису к Java. Результатом их работы стал JavaScript, обладающий функционалом Scheme, объектной ориентацией SmallTalk и синтаксисом Java.
Это интересно: первая версия этого языка изначально называлась Mocha, но уже в сентябре 1995 года он был переименован в LiveScript, а затем еще раз переименована в JavaScript в декабре 1995 года.
В 1996 году JavaScript был представлен в ECMA International для доработки своей основной спецификации. В июне 1997 года была выпущена первая официальная версия в качестве языка ECMA-262. Последняя версия языка – ECMAScript 2017, выпущена в июне 2017 года.
Почему JavaScript стал популярен?
Раньше компьютеры работали намного медленнее, а браузеры плохо взаимодействовали с JavaScript. И так как большинство разработчиков работали с серверной частью приложения в интернете, JavaScript в то время мог показаться не очень хорошим выбором.
С другой стороны, стоимость хостинга файлов была очень высокой. Вот тут-то и пригодился JavaScript: он выполняется на компьютерах пользователей, когда они получают доступ к странице, тем самым делая любую работу в JavaScript незаметной для серверных мощностей. Следовательно, все процессы происходят на стороне клиента. Это сделало сайты намного более отзывчивыми для обычного пользователя и менее дорогостоящими с точки зрения трафика.
Современные браузеры имеют уже хорошо реализованный JavaScript, персональные компьютеры работают намного быстрее, а интернет-соединение стоит намного дешевле, так что большинство старых проблем сейчас уже не так критичны. Тем не менее сокращение количества обращений к серверу за счет выполнения операций в JavaScript по-прежнему приводит к повышению скорости отклика веб-приложений и улучшению взаимодействия с пользователем.
Триада веб-страниц
При рассмотрении компонентов современной веб-страницы можно заметить, что главные роли в ее основе играют следующие элементы: JavaScript, HTML, CSS.
HTML содержит информацию о веб-странице, включая текст, графику и пр. CSS используется для управления настройками внешнего вида страницы, включая цвета, шрифты и пр. JavaScript используется для добавления динамических компонентов на веб-страницу и создает большинство программируемых элементов на ней.
Недостатки использования JavaScript
Но даже со всеми этими плюсами возникает одна загвоздка: JavaScript нестабилен. Не сам язык, а среда, в которой он реализован. Вы не знаете, какой компьютер находится на обратной стороне веб-страницы; вы не знаете, насколько этот компьютер загружен другими процессами; не знаете, открыт ли на другой вкладке еще один JavaScript. Пока браузеры не получат систему распределения отдельных ресурсов обработки для разных вкладок и окон (также называемые потоками), это всегда будет оставаться проблемой. Впрочем, подобие многопоточности в определенной степени было реализовано благодаря новой функции HTML5, называемой Web worker.
Что можно сделать с помощью JavaScript?
JavaScript – это полноценный интерпретатор языка программирования, встроенный в ваш веб-браузер. В JavaScript вы можете делать все, что позволяет обычный язык, такой как Java. Например:
- Объявлять переменные;
- Сохранять и получать значения;
- Определять и вызывать функции;
- Определять свои собственные классы;
- Загружать и использовать внешние модули;
- Создавать обработчики событий, которые отвечают на пользовательские и другие события;
- И многое другое.
Веб-браузер загружает страницу, анализирует HTML и создает из содержимого так называемую объектную модель документа (DOM). DOM представляет в реальном времени веб-страницу для вашего кода JavaScript. Затем ваш код может обновлять DOM и мгновенно представлять его пользователю. Браузер также позволяет вам регистрировать свой код, чтобы получать уведомления о событиях в пользовательском интерфейсе, таких как движение мыши, нажатие кнопок и т. д. Используя все эти средства, вы можете создавать маленькие (и не очень маленькие) классные приложения, которые будут служить любой задуманной вами цели.
Предупреждение: поскольку JavaScript является таким многогранным языком, его можно использовать и для создания вредоносных программ, вирусов, интернет угонщиков и других неприятных вещей, направленных на причинение вреда пользователям. Их задачи варьируются от кражи cookie-файлов браузера, паролей и кредитных карт до загрузки вирусов на ваш компьютер.
Что нельзя сделать с помощью JavaScript?
Возможности JavaScript в браузере всегда ограничиваются ради безопасности пользователей. Задача состоит в том, чтобы предотвратить доступ вредоносных веб-страниц к частной информации пользователей и не дать нанести вреда их личным данным.
Примеры таких ограничений:
- JavaScript на веб-странице не имеет права читать или записывать файлы на жестком диске компьютера, копировать их или запускать приложения. Он не имеет прямого доступа к системным функциям ОС;
- Современные браузеры позволяют ему работать с файлами, но доступ к ним ограничен и предоставляется только в том случае, если пользователь выполняет определенные действия, такие как "перетаскивание" файла в окно браузера или выбор его с помощью тега <input>;
- Имеются способы взаимодействия с камерой/микрофоном и другими устройствами, но они требуют полного разрешения пользователя. Таким образом, страница с поддержкой JavaScript не может незаметно включить веб-камеру, наблюдать за окружением и отправлять информацию органам правопорядка;
- Различные вкладки/окна вообще не знают друг о друге. Иногда они это понимают, например, при использовании JavaScript одним окном для открытия другого. Но даже в этом случае JavaScript с одной страницы не может получить доступ к другой, если они открыты с разных сайтов (из другого домена, протокола или порта). Это называется «Правилом ограничения домена». Чтобы обойти это правило, обе страницы должны содержать специальный код JavaScript, который обрабатывает обмен данными;
- JavaScript может легко общаться через сеть с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это все-таки возможно при полном разрешении (выраженного в заголовках HTTP) с удаленной стороны. Это еще одна мера безопасности.
Как работает JavaScipt?
JavaScript – это то, что называется клиентским скриптом. Большинство веб-приложений, таких как поисковая система, работают из-за взаимодействия между устройством пользователя (например, компьютером, телефоном или планшетом) и удаленным сервером. Программное обеспечение на удаленном сервере отправляет информацию клиенту (то есть машине пользователя), а программное обеспечение на стороне клиента считывает информацию и отображает веб-страницу на экране.
Клиентский скрипт – это язык программирования, который полностью выполняет свои задачи на компьютере клиента и не требует взаимодействия с сервером для работы. Например, если на вашем компьютере загружена веб-страница и ваш интернет-провайдер отключается, вы все равно можете взаимодействовать с веб-страницами, уже загруженными в ваш браузер. Однако вы не сможете переходить на новые веб-страницы или получать доступ к удаленным данным.
Вот некоторые из динамических особенностей веб-сайтов, выполняемые JavaScript:
- Автозаполнение;
- Загрузка нового содержимого или данных на страницу без перезагрузки страницы;
- Эффекты ролловера и выпадающие меню;
- Анимация элементов страницы, таких как затухание, изменение размера или перемещение;
- Воспроизведение аудио и видео;
- Проверка ввода из веб-форм;
- Устранение проблем совместимости браузера.
Хотя JavaScript является клиентским языком, некоторые из его наиболее мощных функций включают асинхронное взаимодействие с удаленным сервером. "Асинхронный" означает, что JavaScript может взаимодействовать с сервером в фоновом режиме, не прерывая взаимодействие с пользователем, происходящее на переднем плане.
Возьмем для примера поисковик. Сегодня поисковые системы почти все имеют функцию автозаполнения. Пользователь начинает вводить слово в поле поиска, а ниже появляется список возможных поисковых терминов или фраз. Это полностью бесшовное действие, предлагаемые поисковые ключи появляются без перезагрузки страницы.
В фоновом режиме JavaScript читает буквы по мере их ввода пользователем, отправляет эти письма на удаленный сервер, а сервер отправляет скомпилированные предложения обратно.
Программное обеспечение на стороне сервера анализирует слова и запускает алгоритмы, чтобы предвидеть поисковый запрос пользователя. Такие программы чертовски велики и сложны. А JavaScript на компьютере клиента настолько прост и мал, насколько это возможно, чтобы не замедлять взаимодействие с пользователем. Связь между JavaScript и серверной программой ограничена пропускной способностью пользователя. Вот почему разработчики отдают приоритет эффективности JavaScript-функций и делают объем данных, передаваемых между программами, как можно меньшим.
Только после того, как пользователь выберет критерии поиска, вся страница перезагрузится и выдаст результаты поиска. Движки наподобие того, которым владеет Google, сократили или полностью исключили необходимость перезагрузки даже на этом этапе. Они просто дают результаты, используя один и тот же асинхронный процесс.
Будущее JavaScript
Хотя JavaScript не является единственным клиентским сценарным языком в Интернете, он был одним из первых и до сих пор имеет широкое распространение. Многие разработчики считают, что JavaScript неэффективен и привередлив, поэтому за годы его существования они внесли в него множество улучшений. Предприимчивые программисты создали библиотеки JavaScript – более компактные языки, построенные на основе JavaScript. Они менее сложные и могут быть предназначены для конкретных приложений.