Vic Shóstak, добавьте отладочный вывод в fetch_pdf_resources, убедитесь, что path принимает правильное значение. Попробуйте использовать какие-нибудь другие шрифты.
PiggyPig, localStorage работает только на фронте и для идентификации никак не подойдёт. А куки передаются в заголовках запроса, устанавливаются сервером, считываться сервером и как раз для идентификации и придуманы. И никакой ajax не нужен, достаточно добавить один middleware на 5 строчек кода.
Никакого идентификатора устройства в http-запросах не передаётся, это было бы нарушение безопасности протокола. Версии браузеров очень сильно не уникальны. IP-адреса меняются или могут быть скрыты за NAT'ом.
Mikhail Artunin, невозможно ответить, не зная ресурсов системы и не видя план запроса. Но хорошей практикой является не делать устрашающе выглядящих вещей. Постараться избавиться от поллинга, использовать кэширование, распределить СУБД и т.д. и т.п.
Terras, вот потому и нужен учебник, что он даёт знания системно и прошёл редактуру нескольких профессионалов. А видео-урок может любой косноязычный профан записать и выложить. Только мозги себе такими знаниями пачкать. Кроме того, цифры вроде 80 минут на вводное видео натурально приводят меня в ужас. В "Spring 4 для профессионалов", например, вводная информация занимает 30 страниц, включая историю Spring и описание альтернативных технологий. 30 страниц можно прочитать за 10 минут!
helycopternicht, во-первых, у него есть тесная интеграция со Spring в целом и Spring Security в частности. Когда вам понадобиться из FreeMarker'а проверить права текущего пользователя или обратиться к какому-нибудь системному бину, вы пожалеете о своём выборе. Во-вторых, возможность не запуская сервер открыть в браузере шаблон с диска и посмотреть как он выглядит стоит многого, облегчает внесение правок, интеграцию в процесс разработки дизайнера и верстальщика, убирает из разработки отдельный этап создания прототипов и в целом ускоряет процесс разработки. В-третьих, куча всяких мелких функций, доступных в шаблоне и чертовски облегчающих жизнь. В-четвёртых, расширяемость. Написать собственный атрибут или utility object - раз плюнуть.
Ruchey, во-первых, зависит от уровня вашего профессионализма. Один и тот же сайт написанный разными программистами будет потреблять разное количество ресурсов. Во-вторых, зависит от нагрузок на сайте. На один сайт заходит один пользователь в день и лениво ползает по разделам, генерируя один запрос в минуту, а на другой 3000 человек в секунду, каждый из которых активно взаимодействует с сайтом, генерируя запрос каждые несколько секунд.