Управление на ресурси в Symfony2

Тази седмица, наред с други задачи, правех клиентска оптимизация на моя работен проект. И научих нещо ново и бързам да споделя с вас.
Бих искал да направя резервация веднага какво имам предвид под думата „ресурс“. В тази статия под термина „ресурс“ имам предвид HTTP ресурса, поискан от браузъра по време на зареждането на документа, т.е. това са javascript файлове, css файлове, изображения и т.н.

Така че нека да започнем. В официалната документация за Symfony2 можете да прочетете, че трябва да включите ресурси в шаблони като този:


Но за какво служи функцията activ ()? Защо не е препоръчително да посочвате относителния път към файла на сървъра в атрибутите href и src? Нека да разберем.

За демонстрация взех няколко файла от Blueprint CSS Framework и ги свързах в шаблона по следния начин:


Ако в конфигурацията не е конфигурирано нищо друго, тогава Symfony ще изобрази даденото парче шаблон в следния html:


По принцип това е достатъчно. Но Symfony2 може да свърши малко допълнителна работа за вас. Трябва само да зададете няколко опции в конфигурацията на проекта.

1. Множество домейни

Тъй като имам само един сървър и този е локален, току-що регистрирах няколко домейна в/etc/hosts и след това добавих същите псевдоними към конфигурацията на виртуалния хост. Сега в конфигурационния файл мога да задам базовите URI за зареждане на ресурси:


Тогава нашата част от шаблона ще бъде показана по следния начин:

Тези. Symfony ще добави един от базовите URI от конфигурацията към всеки относителен път, посочен във функцията activ (). Не разбрах реда, в който URI от конфигурационния файл ще бъдат заменени, мога само да кажа, че последователността винаги е една и съща. Тези. ако използвахме един домейн за зареждане на ресурса, тогава този ресурс за потребителя винаги ще се зарежда от избрания домейн. В противен случай тази функция няма да има смисъл, тъй като всички ресурси се кешират от браузъра. А браузърът разбира ресурса от друг домейн като уникален и го изтегля, вместо да използва кеширания.