Основным преимуществом внешнего файла CSS является то, что:
- Может использоваться на нескольких страницах; и
- Он может быть кэширован, поэтому его не нужно загружать на каждую страницу.
Таким образом, если существует возможность повторного использования динамически генерируемого CSS между страницами или в нескольких представлениях одной и той же страницы, тогда внешний файл может добавить значение.
Существует несколько общих шаблонов для динамически генерируемого CSS.
1. Генерация подмножества для страницы
Я видел это иногда. Разработчик решает ограничить количество CSS на странице, отправляя только то, что необходимо. Я не думаю, что это так, но я упоминаю это для полноты. Это ошибочное усилие при оптимизации. Дешевле отправить весь лот и просто эффективно его кешировать.
2. Выбранная пользователем тема
Если пользователь выбирает конкретный вид вашего сайта, это то, о чем я говорю. Это подразумевает, что они могут выбрать целый пакет CSS, и их выбор может быть ограниченным. Обычно это делается с помощью одного или нескольких базовых CSS-файлов, а затем одного или нескольких тематических CSS-файлов. Лучшее решение здесь - отправить правильную комбинацию внешних файлов CSS, динамически генерируя заголовок страницы с правильными <link>
элементами и затем эффективно кэшируя эти файлы.
3. Пользовательская тема
Это выходит за пределы (2), когда пользователь может выбирать, скажем, цвета, шрифты и размеры, до такой степени, что вы не можете упаковать эти варианты в один пакет тем, но для этого вам нужно сгенерировать набор CSS. пользователь. В этом случае у вас, вероятно, все еще будет какой-то общий CSS. Отправьте это как внешние CSS-файлы (опять же, эффективно их кешируя).
Динамическое содержимое может быть лучшим на странице, или вы все еще можете использовать внешние файлы, потому что нет никаких причин, по которым <link>
не может указывать на скрипт вместо статического файла . Например:
<link rel="stylesheet" href="/css/custom.php?user=bob" type="text/css">
где строка запроса генерируется динамически вашим заголовком от того, кто вошел в систему. Этот скрипт будет искать пользовательские настройки и генерировать динамический файл CSS. Это может быть эффективно кэшировано, тогда как размещение его непосредственно в файле HTML невозможно (если только весь файл HTML не может быть эффективно кэширован).
4. Генерация CSS на основе правил
До этого я писал систему отчетов, в которой использовалось много правил, указанных пользователем или создателем отчетов, и настраиваемый отчет, а также была создана полная HTML-страница (на основе таблиц и / или диаграмм, которые они запрашивали в пользовательском определение отчета) и оформить их согласно правилам. Это действительно был динамический CSS. Дело в том, что здесь тоже есть потенциал для кеширования. HTML-страница генерирует динамическую ссылку, например:
<link rel="stylesheet" href="/css/report.annual-sales.0001.css" type="text/css">
где 'year-sales' - идентификатор отчета, а 0001 - как версия. Когда правила меняются, вы создаете новую версию, и каждая версия для каждого отчета может эффективно кэшироваться.
Заключение
Так что я не могу однозначно сказать, подходят ли вам внешние CSS-файлы или нет, но, увидев и разработав для каждого из приведенных выше сценариев, мне трудно поверить, что вы не можете получить какую-либо форму кэширования из своего CSS в какой момент он должен быть внешним.
Я писал о проблеме эффективного CSS в Повышение качества CSS в PHP , но принципы и методы применимы на любом языке, не только в PHP.
Вы также можете обратиться к связанному вопросу Несколько файлов javascript / css: лучшие практики?