Подтвердить что ты не робот

Минимизация и объединение файлов в .net

Я рассматриваю реализацию некоторой оптимизации производительности вокруг моего javascript/css. В частности, стремятся добиться минимизации и объединения таких. Я разрабатываю веб-приложения .net/С#.

У меня есть пара вариантов и поиск отзывов по каждому из них:

Во-первых, это умный инструмент, с которым я столкнулся с Chirpy, который с помощью visual studio объединяет, минимизирует и т.д. → http://chirpy.codeplex.com/ Это визуальная студия добавьте, но поскольку я в командной среде, этот инструмент не идеален.

Мой следующий вариант - использовать задачу Msbuild (http://yuicompressor.codeplex.com/), чтобы минимизировать файлы, а также объединить их (возможно, прочитанные из xml файл, который необходимо объединить). Хотя это работает для мелкого штрафа, я имею в виду, что мне нужно будет поддерживать то, что должно сочетаться, что может быть головной болью.

Третий вариант - использовать задачу msbuild только для минимизации и во время выполнения с использованием некоторых вспомогательных классов, объединять файлы на основе каждой страницы. Это объединит файлы, даст им имя и добавит к нему версию.

Любые другие варианты, которые я мог бы рассмотреть? Моя проблема с последним вариантом заключается в том, что у него могут быть проблемы с производительностью, так как мне нужно будет открыть файл с локального диска, прочитать его содержимое и затем объединить файлы. Это много обработки во время выполнения. Я смотрел на что-то вроде Squishit - https://github.com/jetheredge/SquishIt/downloads Это минимизирует файлы во время выполнения, но я бы посмотрел на это во время компиляции.

Значит, любая обратная связь по моим подходам будет замечательной? Если третий вариант не вызовет проблем с производительностью, я буду вести к нему.

4b9b3361

Ответ 1

Мы сделали что-то подобное с несколькими веб-приложениями ASP.NET. В частности, мы используем Yahoo! Yui compressor, который имеет версию библиотеки .NET, которую вы можете использовать в своих приложениях.

Подход, который мы предприняли, заключался в том, чтобы генерировать необходимые файлы с объединенными/мини файлами во время выполнения. Мы включили всю эту логику в элемент управления ASP.NET, но это не обязательно в зависимости от вашего проекта.

  • В первый раз, когда запрос делается для страницы, мы обрабатываем список включенных файлов JS и CSS. В отдельном потоке (поэтому исходный запрос возвращается без задержки) мы затем объединили включенные файлы вместе (1 для JS, 1 для CSS), а затем применили компрессор Yui.
  • Затем результат записывается на диск для быстрой ссылки в будущем
  • При последующих запросах на странице сначала отображаются мини-версии. Если он найден, он просто обслуживает их. Если нет, он снова проходит процесс.

Как некоторые обледенения к пирогу:

  • Для целей отладки, если присутствует строка запроса? debug = true, объединенные/минированные ресурсы игнорируются и вместо них подаются исходные отдельные файлы (так как это может быть сложно отладить оптимизированную JS)

Мы обнаружили, что этот процесс работает исключительно хорошо. Мы построили его в библиотеке, чтобы все наши сайты ASP.NET могли воспользоваться. Сценарии пост-сборки могут усложняться, если каждая страница имеет разные зависимости, но время выполнения может довольно легко определить это. И, если кому-то нужно быстро исправить файл CSS, они могут это сделать, удалите объединенные версии файла, и процесс автоматически начнется без необходимости выполнять обработку после сборки с помощью MSBuild или NAnt.

Ответ 2

RequestReduce обеспечивает действительно хорошее решение для объединения и минимизации javascript и css во время выполнения. Он также попытается справиться с вашими фоновыми изображениями. Он кэширует обработанные файлы и обслуживает их с помощью пользовательских ETags и будущих заголовков. RequestReduce использует фильтр ответов для преобразования содержимого, поэтому для базовых функций не требуется никакого кода или конфигурации. Он может быть настроен для работы в среде веб-фермы и синхронизации содержимого на нескольких серверах и может быть настроен для указания на CDN. Его можно загрузить в http://www.RequestReduce.com или из Visual Studio через Nuget. Источник доступен в https://github.com/mwrock/RequestReduce.

Ответ 3

Вы слышали о Combres? перейдите к: http://combres.codeplex.com и проверьте его

он минимизирует ваши CSS и JS файлы в Runtime, что означает, что вы можете изменить любой файл и загрузить его, и каждый запрос, который клиент делает, его минимизирует. все, что вам нужно сделать, это добавить файлы, которые вы хотите сжать в список в XML файле combres, и просто вызвать список со страницы/главной страницы.

если вы используете VS2010, вы можете легко установить его в свой проект с помощью NuGet здесь ссылка Combres NuGet: http://combres.codeplex.com/wikipage?title=5-Minute%20Quick%20Start

Ответ 4

Я сделал действительно хорошее решение для этого пару лет назад, но у меня нет источника. Решение было для веб-форм, но должно отлично работать, чтобы передать его в MVC. Я попробую объяснить, что я сделал на каком-то простом шаге. Сначала нам нужно зарегистрировать скрипты, и мы написали специальный контроллер, который сделал именно это. Когда контроллер был визуализирован, он сделал три вещи:

  • Свернуть все файлы, я думаю, мы использовали сжатие YUI
  • Объедините все файлы и сохраните их как строку
  • Вычислить хэш для строки объединенных файлов и использовать это как виртуальное имя файла. Вы сохраняете строку комбинированных файлов в кешированном словаре на сервере с хеш-значением как ключ, html, который визуализируется, должен указывать на специальную папку, где расположены "скрипты".

Следующим шагом будет реализация специального HttpHandler, который обрабатывает запрос на файлы в специальной папке. Когда запрос делается в эту специальную папку, вы выполняете поиск в кэшированном словаре и в основном возвращаете строку.

Одна из самых приятных особенностей заключается в том, что возвращаемый script всегда действителен, поэтому пользователю никогда не придется запрашивать обновление script. Причина этого в том, что вы вносите изменения в любой из файлов script, значение хеша изменится, и клиент попросит новый script.

Вы можете использовать это для css файлов, без проблем. Я помню, как он настраивался, чтобы вы могли отключать файлы компилятора, сводить к минимуму файлы или просто исключать один файл из процесса, если вы хотите выполнить некоторую отладку.

Возможно, я пропустил некоторые детали, но это было не так сложно реализовать, и получилось очень хорошо.

Обновление: Я реализовал решение для MVC и выпустил его на nuget и у вас есть источник вверх на github.

Ответ 6

Целесообразно комбинировать файлы во время выполнения, чтобы избежать необходимости синхронизации новых версий. Однако, как только они программно объединены, кешируйте их на диск. Тогда код, который запускается каждый раз при загрузке файлов, должен только проверять, чтобы файлы не были изменены до обслуживания кешированной версии.

Если они изменились, тогда код сжатия может работать как одноразовый. Несмотря на небольшую производительность, вы также получите преимущество в производительности от меньшего количества запросов к файлам.

Это подход, который инструмент Minify использует для сжатия JS/CSS, который работал очень хорошо для меня. Это только Linux/PHP, но вы можете получить там еще несколько идей.

Ответ 7

Мне нужно решение для объединения/минимизации CSS/JS в веб-приложении .NET 2.0 и SquishIt, а другие инструменты, которые я нашел, не были совместимы с .NET 2.0, я создал собственное решение, которое использует синтаксис, подобный SquishIt, но совместим с .NET 2.0. Поскольку я думал, что другие люди могут найти это полезным, я выставил его на Github. Вы можете найти его здесь: https://github.com/AlliterativeAlice/simpleyui