Другие ответы были сосредоточены на том, что такое программирование на стороне клиента и на стороне сервера: какие языки чаще всего используются, какие задачи должны быть выполнены и т. Д.
Это абсолютно правильно, но я скучаю по тому, каковы различия между двумя типами программирования в контексте веб-программирования. Позвольте мне попытаться решить это.
Безопасность и разрешения
В программировании на стороне клиента у вас нет доступа ко всей системе из-за проблем безопасности. Пользователь не обязательно доверяет каждому фрагменту кода, который загружается из Интернета и выполняется на его компьютере, и это является основной целью разработки клиентской среды (браузера и механизма JavaScript): обеспечить изолированную среду где клиентский код может выполняться, но не может получить доступ к чему-либо за пределами разрешенной области.
В программировании на стороне сервера также целесообразно ограничивать доступ каждого приложения к базовой системе, но это гораздо менее навязано вам, поскольку в конечном итоге вы или ваша компания контролируете эту систему. Эта конструкция «изолированной клетки» не встроена в инструменты и языки программирования на стороне сервера, но реализуется посредством установки (использование выделенных пользователей с ограниченными разрешениями, выбор портов, которые требуют или не требуют корневых разрешений и т. Д.).
Развертывание и платформа
В программировании на стороне сервера развертывание должно происходить извне кода с использованием какого-либо инструмента (даже если он make install
или a git clone
), и это развертывание обычно выполняется вручную - или, по крайней мере, ожидается, что оно будет происходить в полуконтролируемом путь. Система (то есть ОС), в которой вы развертываете, обычно одинакова на нескольких машинах, но она может быть сильно адаптирована к вашим потребностям.
В программировании на стороне клиента развертывание происходит из кода на стороне сервера, который обслуживает клиентов автоматически и без присмотра. Базовая система (в основном браузер) может сильно отличаться на гораздо большем количестве машин. Чтобы сделать развертывание вообще осуществимым, необходимо соблюдать стандарты, и существует гораздо более сильная тенденция к единому языку и среде.
Вот почему копирование серверного кода с одного компьютера на другой может занять недели, в то время как код на стороне клиента обычно тривиально выполнить на разных машинах.
Состояние и вторичные эффекты
(Отказ от ответственности: это, безусловно, самый субъективный момент из всех. Возможно, в моей аргументации есть много неправильных аспектов. На мой взгляд, это просто интересная гипотеза.)
В программировании на стороне сервера состояние представляет собой гораздо большую проблему, то есть способы извлечения и обновления данных по запросу пользователя с возможностью возникновения конфликтов из-за параллелизма. Даже если большая часть этой сложности выгружается на сервер базы данных, серверный код отвечает за то, чтобы позволить базе данных сохранять свои гарантии целостности данных, правильно используя ее интерфейс (например, не использовать кэш для обновлений, которые никогда не видны БД), хотя целью серверного кода также является не перегружать базу данных работой и заставлять пользователя ждать ответа.
В программировании на стороне клиента представление результатов пользователю представляет гораздо большую проблему, и это подразумевает вторичные эффекты (в основном печать на экране). Это не означает, что состояние не задействовано (например, файлы cookie), а лишь то, что основная цель кода состоит в том, чтобы фактически взаимодействовать с пользователем, и это не может произойти без вторичных эффектов.
Вот почему программирование на стороне клиента обычно требует (в какой-то момент), чтобы посмотреть на экран с демонстрацией, чтобы убедиться, что все цвета и расположение правильны, в то время как программирование на стороне сервера может происходить почти исключительно в текстовой среде, где автоматизировано тесты проверяют, что логика все еще делает то, что должна.