Сжатие CSS / JS GZip с Asp.Net - PullRequest
11 голосов
/ 21 марта 2009

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

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

Ответы [ 7 ]

19 голосов
/ 21 марта 2009

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

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

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

IIS7 - GZip можно включить с помощью web.config с использованием тега httpCompression xml Ника Берарди: Как получить IIS 7 для сжатия JavaScript

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

7 голосов
/ 21 марта 2009

Мой предпочтительный способ сделать это - использовать такой инструмент сжатия, как 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 и nant.
Редактировать : Джастин Этередж выпустил потрясающий инструмент для объединения и сжатия файла css / js под названием SquishIt .

1 голос
/ 18 февраля 2012

Я бы посоветовал использовать «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>
1 голос
/ 16 января 2011

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

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

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

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

1 голос
/ 01 сентября 2010

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

1 голос
/ 21 марта 2009

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

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

0 голосов
/ 03 марта 2012

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

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