Введение
Техника, используемая в веб-разработке
Серверные скрипты – это техника, используемая в веб-разработке, которая заключается в использовании скриптов на веб-сервере для формирования ответа, настроенного для каждого запроса пользователя (клиента) к веб-сайту. Скрипты могут быть написаны на любом из доступных языков серверных скриптов (см. ниже). Серверные скрипты отличаются от клиентских скриптов, где встроенные скрипты, такие как JavaScript, выполняются на стороне клиента в веб-браузере, но обе техники часто используются совместно. Альтернативой любому или обоим типам скриптов является предоставление веб-сервером статической веб-страницы. Серверные скрипты часто используются для предоставления персонализированного интерфейса пользователю. Эти скрипты могут собирать характеристики клиента для использования в настройке ответа на основе этих характеристик, требований пользователя, прав доступа и т.д. Серверные скрипты также позволяют владельцу веб-сайта скрыть исходный код, генерирующий интерфейс, в то время как при использовании клиентских скриптов пользователь имеет доступ ко всему коду, полученному клиентом. Недостатком использования серверных скриптов является то, что клиенту необходимо отправлять дополнительные запросы по сети на сервер для отображения новой информации пользователю в веб-браузере. Эти запросы могут замедлить работу пользователя, увеличить нагрузку на сервер и сделать невозможным использование приложения при отключении пользователя от сервера. Когда сервер передает данные общепринятым способом, например, по протоколам HTTP или FTP, пользователи могут выбирать из множества клиентских программ (большинство современных веб-браузеров могут запрашивать и получать данные, используя оба этих протокола). В случае более специализированных приложений программисты могут разрабатывать собственные сервер, клиент и протокол связи, которые могут использоваться только вместе. Программы, работающие на локальном компьютере пользователя без отправки или получения данных по сети, не считаются клиентами, и, следовательно, их операции не рассматриваются как клиентские операции.
История
Netscape представила реализацию JavaScript для серверных скриптов в Netscape Enterprise Server, впервые выпущенном в декабре 1994 года (вскоре после выпуска JavaScript для браузеров). Серверные скрипты позднее, в начале 1995 года, использовал Фред Дюфрен при разработке первого веб-сайта для бостонской телестанции WCVB, штат Массачусетс. Эта технология описана в патенте США № 5835712. Патент был выдан в 1998 году и в настоящее время принадлежит Open Invention Network (OIN). В 2010 году OIN удостоила Фреда ДюФрена звания "Выдающийся изобретатель" за его вклад в разработку серверных скриптов.
Пояснение
В ранние дни веб-сети, серверный скриптинг почти исключительно выполнялся с использованием комбинации программ на языке C, скриптов Perl и скриптов командной оболочки через интерфейс Common Gateway Interface (CGI). Эти скрипты выполнялись операционной системой, а результаты возвращались веб-сервером. Многие современные веб-серверы могут напрямую выполнять языки скриптов, такие как ASP, JSP, Perl, PHP и Ruby, либо самим веб-сервером, либо через модули расширения (например, mod_perl или mod_php) для веб-сервера. Например, WebDNA включает в себя собственную встроенную систему баз данных. Любая форма скриптинга (то есть CGI или прямое исполнение) может быть использована для создания сложных многостраничных сайтов, но прямое исполнение обычно требует меньше ресурсов из-за меньшего количества обращений к внешним интерпретаторам. Динамические веб-сайты иногда используют специализированные веб-серверы, такие как Glassfish, Plack и библиотека Python "Base HTTP Server", хотя некоторые могут не относить это к серверному скриптингу. При использовании динамических веб-технологий скриптинга разработчики должны чётко понимать логическое, временное и физическое разделение между клиентом и сервером. Чтобы действие пользователя привело к выполнению серверного кода, например, разработчику, работающему с классическим ASP, необходимо явно заставить браузер пользователя отправить запрос на веб-сервер. Серверные скрипты полностью обрабатываются серверами, а не клиентами. Когда клиенты запрашивают страницу, содержащую серверные скрипты, сервер приложений обрабатывает эти скрипты и возвращает HTML-страницу клиенту.
Как подходить к скриптам
В одностраничных приложениях был представлен новый подход к генерации HTML с использованием клиентского приложения, но на стороне сервера. Примерами фреймворков, использующих SSR, являются Next.js, Nuxt.js и Nest.js. Они используют React.js, Vue.js и Angular соответственно для генерации контента на сервере.
Генерация на стороне сервера
Генерация на стороне сервера, или SSG, является альтернативой SSR. При серверном рендеринге (SSR) страница обычно собирается на сервере один раз для каждого запроса. В отличие от этого, при использовании SSG приложение генерирует все статические HTML-страницы во время сборки. Эти предварительно сгенерированные страницы затем отправляются клиенту при каждом запросе, без необходимости их повторной генерации. Это обеспечивает более быстрое время рендеринга, поскольку новую страницу не нужно генерировать при каждом запросе; сервер просто передает файл, который был сгенерирован ранее. Недостатком является то, что при изменении каких-либо данных на странице требуется пересборка. Генерация файлов может выполняться на другом компьютере, например, с использованием системы непрерывной интеграции и доставки (CI/CD). Примеры инструментов SSG — Jekyll, Gatsby или Eleventy. Такие сайты часто размещаются на Netlify или GitHub Pages. GitHub также поддерживает проекты Jekyll, автоматически собирая сайт при внесении изменений в репозиторий Git.