|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|
Spring MVC: что происходит со статикой?10.09.2020, 15:49. Показов 2443. Ответов 16
Метки нет (Все метки)
Я только начал изучать Spring.
Скажите, пожалуйста, применяется ли в мире Spring веб-сервер nginx? Если да, то для каких задач (балансировка нагрузки, раздача статики)? Если nginx применяется для раздачи статики, как ему "подсунуть" эту статику? Обычно она у него лежит где-то в каталоге типа /var/www/my_site/static. И перекладывать ее туда я привык специальным скриптом из коробки фреймворка. Но фреймворк это должен уметь делать. Т.е. он должен потом суметь эту статику найти, потому что ему же рендерить html надо. Спринг такое умеет? Если nginx не применяется для раздачи статики, то как ее раздают? Томкатом? Что работает быстрее при раздаче статики: Tomcat или nginx? А если я хочу часть функционала использовать повторно, видимо, мне reusable функциональность надо будет скомпилировать в jar и использовать его в своих проектах как библиотеку. Это что же - Томкат будет будет jar-файлы молотить? А если я захочу использовать CDN, надо же будет все-таки статику скопировать туда. Значит, Спринг должен как-то узнать, где у него статика будет на проде лежать. Как это сделать? В общем, вопросов очень много. Почитать бы про это. Но упор мне надо не просто на раздачу статики, а на максимальную скорость загрузки страницы. И что-то у меня сомнения, что кто-то в этом мире раздает статику быстрее, чем nginx.
0
|
|
| 10.09.2020, 15:49 | |
|
Ответы с готовыми решениями:
16
Spring MVC. 404 ошибка при включении Spring Data JPA в проект Spring MVC controller. Что возвращать - forward,redirect, или имя jsp? задания по spring core и spring mvc для новичков |
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 10.09.2020, 21:38 | |
|
Если нужна скорость, то лучшее решение это CDN типа клаудфронта или акамай. Из этого следует что раздавать статику у тебя может кто угодно и это не повлияет на скорость.
В целом спринг это про бекенд. Он вообще не должен знать ни про какие клиентские штуки, хотя технически может раздавать что угодно.
1
|
|
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|
| 11.09.2020, 08:46 [ТС] | |
|
Меня интересует сейчас только MVC. Чтобы сайт заработал, нужно его обеспечить статикой тоже.
Я разговариваю с опытными ребятами, но они мне толком ничего не говорят. И ответ может быть таким: я изначально статику делу отлельно, а собираю ее с помощью вебпак. Ну, не знаю. Сомнительно что-то. Просто получается, что структура проекта вряд ли интуитивно понятна. Хорошо, допустим CDN. Но Spring должен узнать, где положена статика. Как это можно сделать, чтобы не хардкодить? Добавлено через 10 минут Во-первых, не хардкодить. Во-вторых, собрать всю статику, которая лежит в проекте. Согласно тьюториалу, статика лежит во множестве каталогов /static (https://spring.io/guides/gs/se... _home_page) Это неплохо само по себе. Но ее надо как-то сначала на локалке использовать, а потом выкатить на прод. Т.е. должен быть какой-то механизм копирования статики. Причем, такой, чтобы фреймворк о нем знал бы. Т.е. он должен знать, где статику на проде ловить. Мне бы вот как-то это понять. Потому что в тьюториалах это не написано.
0
|
|
|
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
|
||||
| 11.09.2020, 09:27 | ||||
|
1
|
||||
|
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
|
||
| 11.09.2020, 09:30 | ||
|
1
|
||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 11.09.2020, 10:03 | |
|
Есть несколько вариантов
1. У тебя рестфул бекенд и он ничего не знает о фронте. Фронт лежит в отдельном репозитории, у него свой лайфсайкл и свой деплой. Отдачей фронта занимается nginx. 2. У тебя монорепозиторий и фронт это модуль в твоем maven проекте. У фронта есть pom.xml (например с плагином frontend-maven-plugin), который запускает сборку как часть maven цикла. Путь до корня фронта указывается в pom.xml Результатом сборки является jar файл, который как зависимость добавляется в бек. В результате получается jar файл (рассматриваем версию спринг бута), в котором статику отдает embedded tomcat. 3. Статика лежит в папке /src/main/resources/static (дефолт для спринг бута) или в любой другой папке и тогда делается доп. конфигурация чтобы замапить это папку. Таким образом статику так же отдает встроенный томкат. ------------- Как я уже написал выше, разница в скорости нивелируется тем, что все это дело сидит за CDN, который все равно поднимает caching proxy в локации юзера.
2
|
|
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||||
| 11.09.2020, 10:19 [ТС] | ||||
|
Ну, я вообще ничего не понимаю. Редирект или проксирование выльется в катастрофическое замедление. Это просто медленнее на прогон туда и обратно. Картинку прилагаю. Ну, ладно - пусть не на 1,1 секунду замедлится - уберем там DNS, чего-то еще. Но добрых полсекунды я потеряю. Иначе говоря я-то предлагаю сразу раздать с CDN. А вы мне предлдагаете такое: летит запрос на наш сервер. Но наш сервер говорит - так, ты зря сюда пришел. Иди вон там на CDN. Там возьмешь (редирект). Или: а, ты за статикой, сейчас я сам схожу, ты тут подожди. Вот, принес. Забирай (проксирование). Да и какой вот смысл-то CDN тогда? CDN на то и применяется, чтобы максимально близко к юзеру быть. Чтобы прогоны сократить. CDN раздает статику с ближайшего к юзеру сервера. А так мы все через себя прогоняем. Пример из Django: Статика лежит во множественных каталогах static, по всему проекту. И фреймворк знает, где ее взять, потому что ему сказали в настрйоках: STATIC_URL = '/static/' Мы на локалке ведем разработку, и фреймворк об этом знает. Потому что DEBUG=True. Отладочный веб-сервер джанги берет статику оттуда, где она лежит в проекте. В шаблоне <img src="{% static "my_app/example.jpg" %}" alt="My image">. В настройках задается также: STATIC_ROOT = "/var/www/example.com/static/" . Это где статика будет лежать на боевом серваке. Когда проект разворачевается на продуктивном сервере, выполняется команда python manage.py collectstatic И по всему проекту статика собирается, и перекладывается в нужный каталог. А в случае CDN настройки будут такие: STATICFILES_STORAGE = 'myproject.storage.S3Storage' . И все: теперь collectstatic зальет статику на Amazon’s S3. И логично же все: и не захардкожено, и фреймворк знает, какой путь до статики рендерить. А со Спрингом - ну, я вообще не знаю. Может, как-то и можно. Но об этом как-то никто особо не знает. Я же с ребятами разговариваю. Они говорят примерно: Интересные вопросы задаёшь. Порой даже самому приходится задуматься - "а почему я делал иначе". В общем, никто ничего не может нормально сказать. А тьюториалы - сплошь все захардкожено. Ну, ребята и хардкодят, я думаю. Иначе чего им задумываться.
0
|
||||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|||
| 11.09.2020, 10:32 [ТС] | |||
|
Вообще говоря, как томкат по производительности по сравнению с энджиникс при прочих равных?
0
|
|||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 11.09.2020, 10:35 | ||
|
1
|
||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||
| 11.09.2020, 10:38 [ТС] | ||
|
0
|
||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||
| 11.09.2020, 10:38 [ТС] | ||
|
0
|
||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||||||
| 11.09.2020, 10:41 | ||||||
|
Все что ты написал имеет мало смысла. Если тебе это нужно как реальная задача, то лучше сделай её вместе с более опытным коллегой, если это задача для обучения, то лучше начать с более базовых концепций. Добавлено через 7 секунд Все что ты написал имеет мало смысла. Если тебе это нужно как реальная задача, то лучше сделай её вместе с более опытным коллегой, если это задача для обучения, то лучше начать с более базовых концепций. Добавлено через 1 минуту
1
|
||||||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|||
| 11.09.2020, 10:56 [ТС] | |||
|
Добавлено через 11 минут Где взять хороший пример работы со статикой: и чтобы она максимально быстро раздавалась, и чтобы не захардкожено было ни на каком этапе (ни в шаблонизаторе, ни в каких-либо настройках).
0
|
|||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 11.09.2020, 11:01 | ||
|
1
|
||
|
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
|
|||||||||
| 11.09.2020, 11:49 | |||||||||
|
1
|
|||||||||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||
| 11.09.2020, 11:59 [ТС] | ||
|
0
|
||
|
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
|
||
| 11.09.2020, 13:15 | ||
![]() Не хочешь редиректить/проксировать, я тебе уже писал: отдавай статику nginx'ом. В чём проблема?
1
|
||
| 11.09.2020, 13:15 | |
|
Помогаю со студенческими работами здесь
17
Перевод проекта из Spring Maven в обычный Spring MVC Jetty embedded + Spring MVC + Spring Security MVC. Что если ввод данных происходит не только в View? Что выбрать из java-фреймворков для вывода коллекции: Spring MVC, Struts, Mojarra(JSF)? Spring MVC, Spring REST Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs
. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|