Как JavaScript повзрослел и стал настоящим языком

Java Script

Мало кто представлял себе, что этот язык превратится в профессиональную платформу

Если ещё лет 20 назад вы бы сказали, что JavaScript станет одним из самых популярных языков в мире, на вас бы посмотрели как на умалишённого: JavaScript на рубеже веков был не способен выполнять задачи, с которыми справлялись профессиональные языки программирования. Разработчики, создававшие веб-приложения, не считали его серьёзным инструментом для работы с кодом. В их арсенале уже имелся готовый инструмент — Java с компонентом апплет.

Но в 1995 году в компании-разработчике первого веб-браузера Netscape Navigator пришли к необходимости создания более простого инструмента. Действовать приходилось в сложной ситуации: они воевали за рынок с Microsoft, были на грани разрыва отношений в рамках стратегического партнёрства с Sun Microsystems и к тому же крайне ограничены во времени. Нужно было создать новый язык и при этом вписаться в строгие временные рамки. Для этого в компанию взяли Брендана Эйха. Первая версия JavaScript была готова за десять дней, и её тут же включили в этот симпатичный браузер.

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020Netscape 2: дебют JavaScript

На самом деле, Эйху хотелось создать браузерную версию языка программирования типа Scheme. Но в Netscape вышла другая версия: в компании решили, что язык внешне должен походить на Java. Схожесть названий — Java и JavaScript — привела впоследствии к многолетней путанице.

«Руководству хотелось сделать его похожим на Java, чтобы получилось что-то вроде его младшего брата, не хватающего с неба звёзд и держащегося в его тени». — Брендан Эйх

Эра интерактивных кнопок

В первые пять лет жизни JavaScript был инструментом для людей, неискушённых в программировании на Java. Помимо любителей и тех, у кого не хватает времени на что-то более сложное, им активно пользовались и веб-разработчики — только-только появившиеся компьютерщики, которые занимались созданием графического пользовательского интерфейса веб-страниц. Им хотелось сделать его стильным и элегантным, использовав что-то более замысловатое, чем тег <blink>, и более модное, чем вращающийся шар в формате GIF.

Первоначальной задачей JavaScript было создание связующего элемента пользовательского интерфейса, который бы объединял веб-страницы. Всякий раз, когда нужна была интерактивная кнопка, всплывающее меню или эффект полёта, на помощь приходил JavaScript.

Кому была нужна интерактивная кнопка? Да всем!

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020Интерактивная кнопка circa 2000

Уже очень скоро JavaScript активно использовался для замены одного изображения на другое при наведении курсора и/или щелчке мышью.

Может показаться безумием то, с каким упорством разработчики совершенствовали код ради светящихся кнопок на веб-страницах. Но сегодня у нас есть возможность с помощью CSS применять все эти эффекты, используя больше настройки стиля и анимацию, нежели предварительно сгенерированные файлы с изображениями. Мало кто ожидал от JavaScript чего-то большего: разработчики были довольны уже тем, что у них есть язык программирования на стороне сервера. Мысль о том, что JavaScript может реализовывать логику предметной области приложения казалась такой же абсурдной, как и то, что хранимые процедуры баз данных можно заменить на макросы Excel.

В плену тестовой среды

Критика JavaScript сегодня обычно обусловлена ограничениями в самом языке — запатченные средства объектно-ориентированного программирования, слабая безопасность типов, громоздкая модель DOM, путаница == против === и так далее. Но таких ограничений не было в первые годы жизни JavaScript, когда этот инструмент программирования казался просто ужасным. Между прочим, многие из таких ужасных языков программирования стали незаменимыми, оказавшись в нужном месте в нужное время (среди них BASIC, COBOL, SQL и PHP). И JavaScript, будучи единственным языком, имеющим встроенную поддержку в любом веб-браузере — появившийся в то время, как веб-сайты покоряли мир — он оказался в нужном месте в нужное время.

Реальным ограничением для JavaScript стала тестовая среда — жёстко контролируемая среда, которая привязывает код к определённому месту. Тестовая среда отрывает JavaScript от десктопного мира. Например, код на JavaScript не имел прямого доступа к файловой системе, экрану или «железу». Более того, код отрезал JavaScript от всего, что есть на сервере: баз данных со списками клиентов и каталогами продуктов, кода на стороне сервера, управлявшего логикой предметной области приложения. Вынужденному пребывать в таком заточении, JavaScript не оставалось ничего другого, кроме как предоставлять возможность играться с кнопками на странице.

Открытие конвейерной обработки запросов с XMLHttpRequest

Как ни странно, у Microsoft имелась веская причина сохранить JavaScript. И это была не сегодняшняя компания Microsoft, которая ратует за появление открытого ПО в каждой операционной системе. Напротив, это был жёсткий боец, ведущий беспощадную борьбу против общедоступного, бесплатного ПО и уничтожающий конкурентов своей стратегией «Поддержать, настроить и уничтожить».

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

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020Outlook Web Access в 2000 году

Цель была поставлена довольно скромная: создать программу для чтения электронных писем, которая запускалась бы в браузере. Самое главное, чего им хотелось добиться, — избавиться от необходимости постоянно перезагружать страницу. Для этого требовалась технология, которая позволила бы веб-странице проверять, есть ли новые сообщения. Причём делать это в фоновом режиме. Быть может, эта задача не кажется сейчас такой запредельной, но не забывайте: Gmail на тот момент ещё не появился, а сама компания Google существовала всего несколько лет.

В Microsoft создали связующее ПО с компонентом ActiveX, который они назвали XMLHttpRequest. Основная идея XMLHttpRequest была проста — предоставить коду возможность делать веб-запросы. Подобно браузеру, которому надо связаться с сервером, чтобы сделать запрос (например, запросить доступ к какой-нибудь странице), код JavaScript мог использовать объект XMLHttpRequest для своих запросов (например, прислать новые сообщения).

Тогда появилась возможность с веб-страницы подключаться ко всем ресурсам сервера. Нужна информация из базы данных? Вызываем сервер и делаем запрос. Нужно получить от сервера вычисления, тест на безопасность или сверхсекретную проверку подлинности? Обращаемся к серверу и в этом случае. И самое главное: вызов происходит в фоновом режиме и никак не влияет на страницу.

XMLHttpRequest, однако, был не без странностей. Во-первых, его название: смешение строчных букв с прописными могло вызвать недопонимание у такого чувствительного к регистру символов языка, как JavaScript. Во-вторых, название предполагает отправку и получение кодом XML-сообщений. Такими сообщениями может быть практически что угодно — обычный текст, блочные элементы в HTML или объекты JavaScript, сериализованные в формат JSON. Но самой большой проблемой представлялось то, что XMLHttpRequest создавался с использованием ActiveX, то есть работать он мог только на компьютерах с Windows и только в Internet Explorer.

Но надолго эти недостатки не задержались: всего через несколько лет в других браузерах возникли новые реализации XMLHttpRequest — тот же объект в коде, но без головняков с ActiveX.

Несмотря на создание XMLHttpRequest, в Microsoft не торопились задействовать его в своих интернет-разработках (например, в своей общедоступной системе обмена электронной корреспонденцией Hotmail). Они дождались, пока Google не поразит мир веб-программирования, использовав XMLHttpRequest сначала с Gmail в 2004, а затем с Google Maps в 2005. Тут и мелькнула заветная цель: интернет-программы, которые выполнялись бы с быстротой реагирования настольных приложений.

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020Google Maps в 2005

На пути к современности

XMLHttpRequest стал главным элементом, повлиявшим на развитие JavaScript. Однако были и другие важные поворотные пункты в его истории.

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Многие годы язык JavaScript был заморожен во времени. Проблема была в том, что лидер рынка, браузер Internet Explorer, обновлялся в сроки, ограниченные возможностями операционной системы — ну, то есть очень медленно. Разработчики были вынуждены писать код, который проверял версии браузера, пытаясь на ходу адаптироваться.

В 2006 году разработчики нашли решение в виде jQuery. Хотя на сегодня jQuery немного устарел, 10 лет назад он был незаменим в том, чтобы отладить функциональность и не тратить время на выявление и устранение проблем с совместимостью.

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

В 2008 году в Google презентовали новый движок JavaScript под названием V8. Если jQuery впервые решил проблему разработчиков с совместимостью, то V8 дал им высокую производительность. А так как движок V8 был отдельным компонентом с открытым кодом, другие проекты также могли его использовать. Уже гораздо позднее, благодаря этому, появились такие инновационные решения, как Node.js и Electron.

Как JavaScript повзрослел и стал настоящим языком — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Далее в 2008 году появилась первая рабочая версия HTML5. Сам HTML5 не имел отношения к JavaScript, но был из одной плеяды с новыми API-интерфейсами JavaScript. На ровном месте у разработчиков появились инструменты для хранения локальных данных, управления историей просмотров в браузере, использования аудио, а также для выполнения фоновых задач. И снова разрыв между веб-функциями и настольными возможностями сократился.

JavaScript в наше время

Был ли успех JavaScript предопределён его привилегированным положением в браузере? Или это было дело случая: сочетания удачи и идеального времени?

Одно можно сказать наверняка — JavaScript был вынужден пробивать себе дорогу. Большую часть жизни JavaScript не был фаворитом. Люди отдавали предпочтение встраиваемым Java-апплетам, затем Flash и даже Silverlight. JavaScript не спасовал перед конкурентами и одолел их всех.

Пожалуй, самой справедливой оценкой будет тот факт, что JavaScript доказал то, что — по сути — знает каждый разработчик. А именно: самый важный фактор для новой технологии — это её доступность. Если у технологии высокая доступность, не нужно стремиться сделать ее лучшей — достаточно того, что уже есть.

Язык JavaScript стремительно развивается. Его путь можно сравнить с широкой разветвляющейся дорогой. Теперь у нас есть JavaScript, работающий на серверах (благодаря Node.js) и управляющий настольными приложениями (благодаря Node.js и Electron). У нас есть языки типа TypeScript, которые находятся в одном шаге от полноценных языков и компилируются в JavaScript, предоставляя возможность писать для веб-страниц без ущерба для душевной организации разработчиков. А в будущем вполне возможно, что WebAssembly окончательно снесёт языковые ограничения, предоставляя разработчикам возможность использовать язык любого, сколь угодно высокого уровня, на движке JavaScript.

Пора признать: несмотря на все недостатки, JavaScript остаётся одним из лучших языков программирования. Брендан Эйх включил JavaScript в браузер Netscape Navigator. А мы впихнули в браузер весь мир. В результате получилась современная Сеть.

«Никогда не сомневайтесь в JavaScript». — Брендан Эйх

Специально для сайта ITWORLD.UZ. Новость взята с сайта NOP::Nuances of programming