Любая попытка создать на популярном фреймворке что-то действительно интересное приведет к тому, что придется лезть и переписывать много всего внутри.
Не. Не нужно переписывать. Если чего-то не хватает то для приложения пишется расширение или подтягивается от сторонних разработчиков как зависимость в проект. В этом плюс, большое коммьнити предоставляет много расширений.
Во-вторых: фреймворк очень и очень прожорливая вещь.
Не. Набросал тестовый проект на Yiiframework 2, самый жирный запрос от клиента отъедает 3.4 мб памяти на nginx. Сервер у которого 1 гб свободной памяти, сможет обслужить 301 запрос одновременно.
То есть, под высокие нагрузки не годится изначально.
Почему? Хайлоад одной машиной не обслуживается. Всё можно масштабировать. Допустим у вас вырос траффик и наступил
bottleneck у веб-сервера, веб-сервер больше не может исполнять php-скрипты и умирает. Ок, пришло время отделить фронтенд от бекенд. Теперь фронтенд будет только принимать запрос и проксировать его на бекенд веб-сервер, которых может быть 2,5,10,100 и вообще сколько угодно. Всё что нужно это на каждый из бекенд-серверов залить ваше php-приложение. Какие проблемы? Проблем не будет, если писали на фреймворке, а вот если говнокод собственного приготовления, то скорее всего вы не подумали изначально, что будет с сессиями и проблемы будут у вас. Вы отправитесь в долгий рефакторинг, а ваши пользователи отправятся ко мне.
Если bottleneck наступит у фронтенда, тоже масштрабируется, всё что нужно это прописать домену несколько ip-серверов ваших фронтендов, и запросы на фронты начнут приходить по кругу, т.е. round-robin. База данных тоже масштабируется, ну вы вкурсе.
В них всё сделано для решения задач а-ля "богом забытый интернет магазин".
Не, не согласен. На фреймворке не всегда полностью делается всё приложение, иногда в одном приложении используется несколько фреймворков. Вот смотри. Например, мы хотим крутое развлекательное real-time приложение, чтобы нас полюбили миллионы, как вконтактик. Но на HTTP протоколе вменяемый real-time не сделать. Нужен еще один протокол, WebSocket подойдет. А раз WebSocket, то ему также как и HTTP нужен какой-то демон на сервере, для HTTP за нас все сделали и дали apache/nginx и т.п., а теперь нам нужно своего демона написать, к которому будет подключаться клиент (браузер например). В итоге, у нас два совершенно разных протокола, но нам нужно объединить это всё в одно клёвое приложение. В итоге, всё приложение может состоят из 3 частей, например:
1. Клиент на AngularJS
2. Демон Node.js/socket.io/Express
3. RESTful Api на php/Yiiframework 2
В каждой части свой фреймворк. Но фреймворк на php это только 1/3 всего приложения.
Поэтому на фреймворках можно решить любую задачу, любой сложности, во много раз быстрее, эффективнее и качественне.
Вангую, но нативных технологиях, вас хватит только на классическое веб-приложение из начала двухтысячных.