Я бы определенно пошел на третий метод. Вы получаете гибкость разделения, описанную в первом методе, но вы получаете возможность точно настроить производительность вашего приложения (как указал Pointy ..).
Все, что вам нужно, - это некоторая центральная система реестра (класс), которую вы используете для отслеживания того, какие таблицы стилей необходимо загрузить.
Styles::add_sheet('widget_1.css');
Кроме того, вы можете добавить триггер (метод) к этому классу, чтобы код, который обрабатывает кэширование, мог отслеживать необходимость пересоздания объединенной таблицы стилей.
if (Styles::cache_needs_update()) {
// rebuild (concatenate) stylesheet and save in cache
}
Чтобы пойти еще дальше, можно также объединить таблицы стилей с помощью модуля или какого-либо другого критерия группировки. Когда имеется много таблиц стилей (или js-файлов), эти объединенные группы таблиц стилей могут затем кэшироваться отдельно.
Приведенные выше примеры кода станут чем-то вроде
Styles::add_sheet('widget_1.css','group_name');
if (Styles::cache_needs_update('group_name')) {
// rebuild (concatenate) stylesheet for this 'group_name' and save in cache
}