Не каждый новичок это знает (прекратите читать, если вы не новичок), но есть разные способы использования javascript. Я обрисую в общих чертах эти разные способы, и чтобы понять их полностью, я думаю, будет полезно совершить небольшое путешествие по переулку памяти (необязательно).

Так что имейте в виду: речь пойдет не об изучении javascript, а о том, чтобы получить общую картину. Поскольку мы будем создавать веб-приложения, нам не понадобится javascript гораздо позже (может быть, еще 4–6 постов). Кроме того, это статья из серии для начинающих, прочитайте сначала предыдущую про css, если не читали.

Разбрызгивание javascript

Я описал в статье клиент-сервер, как html попадает в клиент. Так определялось игровое поле. Таким образом, я учу здесь все о динамической генерации html на сервере. Мы начнем с сервера еще в двух постах, кстати.

Итак, если все html и css создаются на сервере, где нам нужен javascript в этом сценарии? Это сделано для того, чтобы сделать страницы более динамичными. Динамичнее в чем? Возможно, вы помните из статьи о css, что css можно использовать для создания динамики, и это правда. Но css может делать только то, для чего был определен css. Javascript — это общий язык программирования, который можно использовать для гораздо большего.

Распространенные примеры такого способа добавления javascript в готовый html включают бесконечную прокрутку или подсказки при поиске. Бесконечная прокрутка (среда имеет ее в комментариях, Google в поиске изображений) — это когда возвращается список результатов, и когда вы прокручиваете список до конца, волшебным образом появляется больше результатов. Под поисковыми предложениями я подразумеваю такие окна поиска, которые, как только вы начнете вводить текст, предоставят вам список на выбор (аэропорты или друзья и т. д.).

Эти и многие другие вещи могут быть легко достигнуты с помощью HTML, отображаемого на стороне сервера, путем добавления немного javascript.

Приложения JavaScript

Итак, когда нам нужно больше javascript, чем это? Позвольте мне начать с того, что, по моему мнению, это происходит очень и очень редко, может быть, менее чем в 1 % случаев. Это случаи, когда вы пытаетесь создать реальное приложение, скажем, копию существующего настольного приложения (типа 3d-скетч) или игру.

Я признаю, что это мнение может сделать меня старомодным. И я призываю вас сформировать свой собственный. Но относительно точно известно, что приложения с полным javascript не являются простыми и составляют лишь небольшой процент современных приложений.

Способ, которым это делается, в крайнем случае, заключается в отправке клиенту пустого html-документа и целой кучи javascript, приложения. Затем javascript строит html на месте, а также использует javascript для внесения всех последующих изменений. Css применяется почти так же, как описано, путем его предварительного определения и применения классов к html.

В еще более экстремальном случае можно отсоединить приложение от сети и сделать его настольным приложением. Вот, например, как строится атом, но я бы больше не называл это веб-разработкой, даже если он использует похожие методы.

Есть и не столь крайний случай, когда часть html создается на сервере, а javascript используется для управления только частью страницы. Мы рассмотрим это подробнее ниже. На этот случай приходится более 1%, о котором я упоминал, и он используется для обновлений, таких как правая бегущая строка Facebook.

Возможен апгрейд

Я полагаю, что принятие решения по этой теме (учиться/не учиться) может оказаться непростой задачей, когда вы чувствуете, что у вас недостаточно информации. Может быть, помогает то, что это не просто информация, которая вам нужна. Когда профессионалы не придерживаются одного мнения (как здесь, как лучше), вероятно, оба пути верны, и вы можете выбирать в зависимости от того, к чему вас тянет.

Я предпочитаю смотреть на это так: все навыки, которые вы изучаете для создания серверных приложений, пригодятся, что бы вы ни делали позже. Они не только актуальны, но и немного проще. Лучше для новичка. И поскольку это более общее, у вас есть больше вариантов для последующего использования.

Но решающим аргументом для меня является то, что обновление становится все более простым. Под этим я подразумеваю, что вы начинаете с приложения на стороне сервера, и когда обычного подхода к разбрызгиванию недостаточно для достижения того, что необходимо, тогда часть приложения или, что более вероятно, часть некоторых страниц, превращается в клиентское приложение javascript. Это все больше и больше поддерживается из коробки. Таким образом, он остается простым как можно дольше и обновляется по мере необходимости.

Как мы тут оказались

Вы можете пропустить следующие воспоминания, не пропустив слишком много. Но чтобы понять, где мы находимся, полезно вспомнить начало тысячелетий. В то время сеть становилась популярной, но не было инструментов или стандартных способов решения проблемы. Не то, что, например, для настольных приложений, для которых было доступно множество хороших инструментов и опыта.

Так что все занимались своим делом: маленькие и большие, кто-то со «стандартами», в основном просто обмен с открытым исходным кодом. К 2005 году проблема была хорошо известна, и начали появляться хорошие решения, и использовалась общая терминология. Сама работа стала намного эффективнее благодаря доступным инструментам.

Затем Интернет вырос, было создано гораздо больше сайтов и, в частности, приложений, html и css стали более стандартизированными, и произошло разделение задач, и по большей части было согласие и производительность. Но нет джаваскрипта.

Javascript было очень сложно использовать, главным образом потому, что в разных браузерах он был реализован немного по-разному. Это сделало его очень удачным, и поэтому большинство людей держались подальше. Тем более, что у них были заняты руки без такого лишнего беспокойства.

Но затем появился jQuery, библиотека javascript от Google, которая сгладила эти различия. Он набрал обороты примерно в 2010 году, потому что работал одинаково во всех браузерах, и внезапно стало возможным использовать javascript. Все и их друг начали писать плагины jQuery и делать сумасшедшие вещи в браузере.

Эта исследовательская фаза продолжалась с методами выполнения все более и более реальной работы в браузере, а затем последовал аналогичный бум фреймворков приложений javascript, остатки которых вы все еще можете увидеть здесь. Мы снова переживали начало путаницы тысячелетия, но на этот раз на клиенте.

Из многих фреймворков javascript angular и react сейчас выкристаллизовались как серьезные соперники, особенно angular. Но, главным образом потому, что реальная проблема более сложна, мы не нашли универсального удовлетворительного решения. Есть еще путь (имхо, конечно), и поэтому я пока не рекомендую новичкам делать ставку на эту технологию.

У этого есть и другая сторона: javascript был хаком, когда только начинал свою жизнь. Несмотря на все это внимание, язык пересматривается и становится лучше (это нормальный процесс для языков и других систем). Но мало кто скажет, что это хороший язык, только то, что он работает в браузере. Улучшение языка, безусловно, будет продолжаться, как и фреймворки, и я уверен, что через несколько лет многие технологии снова сойдутся воедино и станут зрелыми. А пока продолжим с серверными приложениями :-).