Я помог написать код, который сделал это недавно.Вот общий обзор решения, которое было реализовано.Надеюсь, это даст вам хорошие идеи.
Конфигурация: Мы создали пользовательские элементы конфигурации, которые определяют ключ и соответствующий ему список каталогов.Таким образом, ключ JS связан с нашей папкой / Content / Scripts, а CSS связан с нашей папкой / Content / Styles.Я видел другие решения, в которых конфигурация позволяла перечислять отдельные файлы.
Контроллер: Контроллер был настроен на получение запросов, что-то вроде / Content / Get / JS и/ Content / Get / CSS.Контроллер использует ключ конфигурации и заголовки клиентских запросов, чтобы получить ключ кеша, который идентифицирует контент, который мы хотим обслуживать: JS-MSIE-ZIP, CSS-FFX и т. Д. Затем контроллер проверяет нашу службу кеша.Если содержимое отсутствует, оно объединяется, минимизируется, сжимается, кэшируется и затем обрабатывается.Удобно, что содержимое сжимается перед входом в кэш, а не каждый раз, когда оно обслуживается.
Просмотр: В представлении ссылки настраиваются следующим образом:
<link href="<%: Url.Action("Get", "Content", new { key = "CSS" }) %>" rel="stylesheet" type="text/css" />
Служба кэширования: Мы используем существующую службу кэширования, которая просто оборачивает кэш приложения.В какой-то момент мы, вероятно, переместим это в Velocity или что-то подобное.Если количество CSS и JS, которое мы кешируем, будет расти, мы, вероятно, изменим формат ключа на правильное имя файла и переместим содержимое в файловую систему.Но память довольно дешевая, посмотрим, что произойдет.
Причина: (если это имеет значение)
Мы сделали это, чтобы сохранить JavaScript для различных функций.в отдельных файлах в управлении исходным кодом без ссылки на все файлы в HTML отдельно.Поскольку мы конфигурируем наше содержимое по каталогам, а не по отдельным файлам, мы также можем запустить полную минификацию во время производственных сборок, чтобы несколько ускорить весь процесс выполнения.Тем не менее, мы по-прежнему получаем преимущество определения контента для обслуживания на основе клиентского браузера и кэшированных сжатых версий.
В процессе разработки система может быть настроена с быстрым изменением конфигурации, чтобы каждый запрос перестраивал JS.Файлы объединяются с именами файлов, введенными в комментарии для облегчения поиска, но содержимое не минимизируется, и нигде ничего не кэшируется.Это позволяет нам изменять, тестировать и отлаживать JS без перекомпиляции приложения.
Не удалось найти все эти функции в пакете, поэтому мы потратили пару дней и собрали его.Правда, некоторые функции были просто для развлечения, но именно поэтому нам нравится делать то, что мы делаем.=)