PHP обрабатывается на сервере. JavaScript обрабатывается у клиента. Возникает вопрос: не дублируют ли они потенциально друг друга? В том смысле, что сервер вполне способен сделать то же самое, что клиент. И, кстати, с гораздо большей безопасностью, так как человеку, сидящему на компьютере-клиенте, по понятным причинам гораздо труднее получить управление сервером, чем управление своим собственным компьютером. Отсюда и вопрос в заголовке темы: зачем нужен JavaScript? Есть ли хоть что-нибудь в JavaScript, чего не способен сделать PHP?!
Интерактивность --- Добавлено --- Я тоже олдфаг и раньше считал, что дублирование функций это зло. Типа зачем валидация на клиенте, если на сервере она полюбому должна быть. Сейчас я стал мягче ))) Пользователь сейчас балованый и нервничает если ошибка показывается только после ввода и отправки большой формы. Пользователь ожидает немедленной реакции. Ну и плюс реактивность, когда изменение состояния в одном элементе вызывает немедленную перестройку на странице, это задача для JS. Многие действия можно и нужно реализовать на CSS, но прям всё не получится.
Суть в чем PHP отработал - выдал на выходе html страничку все JS - работает в браузере постоянно, работает с событиями браузра, с действиями пользователя, с внутренними механизмами (например таймер) К вопросу что может, а что нет JS - таймер может запустить, отследить клик по кнопке, нажатие на клавиши, выделение, перетаскивание отправить запрос к бекэнду на PHP получить результат, показать его Если б было все на PHP, любое бы действие для обратной связи требовало бы нажатие ссылки или кнопки sumbit для перехода или отправки формы, обработке на стороне сервера и показе новой страницы.... как вам такой интернет?
Лет пятнадцать назад всё так и было. При том, что скоростных каналов не было и все сидели на модемах 2400 - 14400 кбит/с --- Добавлено --- Вопрос ТСа, "зачем так, когда можно и не так." Ну да, раз было, значит можно. Только не нужно.
Можно спросить и наоборот: зачем нужен PHP, если есть JavaScript? Есть ли хоть что-нибудь в PHP, чего не способен сделать JS?! Особенно, учитывая что он может работать как на клиенте так и на сервере
Есть JavaScript встроен в браузер и может выполняться на стороне клиента, а PHP - нет --- Добавлено --- Вот да, резонная постановка вопроса Здесь на стороне PHP - ее огромная экосфера. У Node такой нет и не предвидится )) --- Добавлено --- ...к тому же асинхронность - это очень на любителя и специфическое. То есть способность запускать много процессов на каждый запрос (за которую иногда ругают апач) - это вовсе не Зло - а большое благо - особенно если речь идет о тяжелых запросах к бд или типа того.
Если бы для серверного JS появился по настоящему годный малобажный фреймворк, он бы составил конкуренцию PHP. Но беда (или счастье) в том, что все популярные компоненты JS это бомбы, начинённые нестабильным говном. --- Добавлено --- Это не моё мнение, я подслушал его в подкастах по JS.
И как TS решит проблему вменямых фреймворков для ноды? --- Добавлено --- Ну, на фронте есть angular, есть nuxt, next и другие, которые покрывают почти весь спектр необходимых вещей. Для сервера такого нет, кроме ряда огрызков, которые толком ничего и не делают.
это и имелось в виду под "огрызком" express - это ведь, по сути, ОДНА-БОЛЬШАЯ-МИДДЛВАРЬ сравнивать ее с Laravel, например, вообще нереально
В чем-то дублируют, конечно.. Как без этого ? Постоянно пишем одно и тоже.. по сути. выше правильно подметили, зачем клиента заставлять обновлять и вводить данные по-новой, когда красиво сообщить об ошибке. С другой стороны, хочешь красиво оформить что-либо, сделать функциональнее и удобнее, тогда и используй js . Окошечко с подтверждением к примеру.
...чето вернуло в тему... О чем тут вообще можно говорить, коли AJAX без JS не сделаешь? А какой сейчас сайт без аякса?
учитывая что роль сервера сводится к обработке REST запросов, чего на сервере нехватает? для запросов и сопутствующего экспресс(сессии, RBAC...), работа с различными БД, мемкешами, очередями, пулами, шифрованием есть. чтото нестандартное добавляется компонентами ибо они существуют на любой чих... для любителей фреймворков и они есть. не самое лучшее что можно было, много херни говорит.
Ну, к примеру, я хочу что бы из коробки я мог с одной стороны сделать систему доступа на основе ролей / разрешений, а с другой - enpoint должен отдавать разный формат данных для, опять же, разных ролей и разрешений. К примеру, /users для пользователя вернет только его и тех кого он добавил сам, /users для администратора вернет все записи с дополнительными полями и т.д. Ларка позволяет мне сделать это нативно в рамках фреймворка, expressjs - только костылить вокруг middleware, да и вообще, она почти ничего не дает поверх нативных нодовских модулей и при прочих равных я скорее просто возьму их, чем ставить то, что непонятно вообще зачем нужно.