Сжатие CSS/JS GZip с помощью Asp.Net

В настоящий момент я размещен на виртуальном сервере, я хочу включить сжатие GZip для моего сайта Asp.Net 3.5, как мне начать работу?

Я пытался использовать "упакованные" JS файлы, но они не работают, я предполагаю, потому что они не обрабатываются правильно...?

Ответ 1

GZIP должен обрабатываться IIS, какая версия IIS вы используете?

Клиент отвечает за запрос сервера на версию GZiped. Сервер будет искать две вещи, запрос - http 1.1, а заголовок Accept-Encoding: gzip. Простым способом поиска этих заголовков является использование firebug

IIS6. GZip можно включить с помощью оснастки iis. Microsoft MSDN Тема Gzip с IIS6

IIS7 - GZip можно включить с помощью web.config с помощью httpCompression xml tag Nick Berardi Получение IIS 7 для сжатия JavaScript

Минимизируя и упаковывая файлы javascript, вы уменьшаете общий размер JavaScript, удаляя пробелы и сокращая имена переменных.

Ответ 2

Мой предпочтительный способ сделать это - использовать инструмент сжатия, например YUI Compressor и сделать его частью процесса сборки (после того, коэффициент сжатия не будет таким высоким. Или вы можете использовать оба. Точка, что вы не должны пропустить более высокую производительность, указанную ниже).

Одной из основных проблем сжатия IIS является то, что он не упаковывает все файлы JS/CSS в один файл. Поэтому, если на вашем сайте есть 7 JS файлов и 20 CSS (на удивление это очень распространено), для получения ваших данных потребуется 27 HTTP-рейсов в оба конца. Написание обработчика HTTP для этого - хорошая идея для людей с общим хостингом.

Простой алгоритм сборки должен иметь файл make в корневом каталоге JS/CSS

If(build.config == release) {
Add your js file in order to the make files.
    e.g. jQuery.js jQuery.form.js  jQuery.container.js custom.js 
Split and pass it as params to YUI
Compress
O/P to site.js 
Delete all the above files.
}

В режиме деблокирования мастер страницы должен ссылаться только на site.js

Изменить: здесь ссылка, чтобы получить YUI и встроенный интерфейс.
Изменить: Justin Etheredge выпустил потрясающий инструмент для объединения и сжатия файла css/js под названием SquishIt.

Ответ 3

Во-вторых, IIS - это место для его настройки. Если вы не можете напрямую изменить IIS, вы можете добавить обработчик ко всем запросам, которые проверяют параметры Accept-Encoding: gzip или deflate. Затем вы делаете правильное сжатие, используя что-то вроде SharpZipLib. Однако это быстро становится kludgey.

Вы найдете ограниченный успех в ручном gzipping ваших статических файлах, таких как css или js. Скажите, что вы включили styles.css.gz и scripts.js.gz в свой html, и вы сопоставляете расширение gz с типом mimetype для gzipped-текста (это application/x-gzip?), Многие браузеры (то есть firefox, safari, может быть, хром) будут обрабатывать это просто отлично. Но некоторые браузеры не будут, и вы их оставляете (ссылки, может быть, более старые опера).

Ответ 4

Вы также можете использовать код для GZip скриптов. Способ его работы заключается в том, что вы используете страницу ASP.NET для доставки сжатого файла вместе с правильными заголовками (сообщая браузеру, что этот поток сжат). Я написал статью о том, как использовать сжатие GZip, а также минимизировать (используя YUI) и связывать скрипты (менее округлые поездки на сервер), вы найдете его в http://www.codeproject.com/KB/custom-controls/smartinclude.aspx

Ответ 5

Я использую удобный небольшой серверный элемент управления для моей миниатюры CSS, называемый StyleManager. Он использует компрессор YUI под капотом.

Легче добавить на свой сайт, чем добавлять YUI C вручную, а его использование очень похоже на asp.net ScriptManager, поэтому быстро привыкнуть.

Самое главное - он также объединяет ваши файлы CSS. Поэтому вместо того, чтобы загружать 10 файлов CSS, будет всего 1, что также будет сжато и т.д.

Проверьте это - gStyleManager.com

Ответ 6

Я бы подумал об использовании "deflate" для того же самого, что и более эффективно, чем GZip. Я добавил коды для обоих.

Чтобы добавить это на свой сайт, создайте текстовый файл и скопируйте в него восстановленные коды, а затем сохраните его как Global.asax. Теперь добавьте этот файл в корень вашего сайта.

<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<script runat="server">
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (!(app.Context.CurrentHandler is Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (acceptEncoding == null || acceptEncoding.Length == 0)
            return;

        acceptEncoding = acceptEncoding.ToLower();

    if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
        {
        // defalte
            app.Response.Filter = new DeflateStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
        else if (acceptEncoding.Contains("gzip"))
        {
            // gzip
            app.Response.Filter = new GZipStream(prevUncompressedStream,
                CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
    }
</script>

Ответ 7

Предыдущее сообщение хорошо работает для страниц aspx, но не для файлов css и js. Трюк для включения файлов css и js в сжатии:

  • измените расширения файлов ваших файлов .css и .js на .css.aspx и .js.aspx
  • вставьте <%@ Page ContentType="text/css" %> и <%@ Page ContentType="text/javascript" %> в файлы .css.aspx и .js.aspx
  • включают файлы .css.aspx и .js.aspx вместо файлов .css и .js на ваших страницах