Коротко: здравый смысл.
Я бы соблюдал баланс. В местах где явно понадобятся дополнительные данные можно заранее их включить. Однозначного ответа нет, к сожалению.
Вам точно понравится graphql. Он призван решить проблемы по типу вашей.
Сижу на OpenServer на php 5.6. На OpenServer потому что Docker имеет проблему со скоростью в shared-папках, на линуксе (убунте) шрифты и интерфейс не то. А php 5.6 потому что проект так сейчас требует. И получается довольно медленно все. Примерно в 3-5 раза медленее чем в линуксе.
Что может помочь ускорить работу:
- если в проекте есть кэш, то включить, хотя бы частично;
- opcache наше все, обязательно;
- переход (в моем случае, например) на PHP 7 или 7.1;
- SSD (даст как в сумме все вышеперечисленное).
Apache менять на Ngnix не вижу вообще смысла. На сами запросы тратится меньше 1% по сравнению с работой PHP и MySQL.
Прямо скажем - ситуация не айс и переписывать вряд ли дадут. А даже если так то кто благодарить будет? Никто.
Как уже советовали, если очень хочется, нужно выбить возможность разрабатывать параллельно будущий проект, а в конце провести демонстрацию и перенести данные со старого. Опять же, благодарности не ждите, для начальства ведь ничего не изменилось.
Я знаю что интеграция с 1С пишется за неделю. Остается определиться с предпочтениями.
С одной стороны, Yii2 позволяет писать RAD (быстрый концепт в случае стартапа).
С другой стороны, Symfony позиционируется как enterprise-платформа (серьезные проекты).
В таких случаях обычно как бывает? Сейчас нужен легкий и простой сайт-визка, завтра нужно прикрутить товары, а потом вообще сделать из всего этого онлайн-магазин.
Поэтому беря (как подсказали выше) решения типа SPA, нужно быть готовым к переделке всего заново.
Проблема в том что такая абстракция превратится в новый фреймворк, который будет явно лишним. Потом попробуйте его адаптировать к чему-то другому - утилизируете миллион часов. Если еще есть возможность переписать и необходимость, то лучше это делать прямо сейчас.
Во-первых, код - говно, извините.
Во-вторых, конструкция "class is" неадекватна.
В-третьих, вы ищите все что угодно, а не класс: find('ul.list a').
В-четвертых, посмотрите на Apist.