2009-03-21 4 views
11

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

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

ответ

19

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

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

IIS6 - GZip может быть включен с МОЙ оснасткой. Microsofts MSDN Topic On Gzip With IIS6

IIS7 - GZip может быть включена с помощью web.config httpCompression XML тег Nick Berardi's Getting IIS 7 to Compress JavaScript

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

+0

Отличный проход для IIS6: http://engineering.leads360.com/post/9301650692/http-compression-gzip-on-iis-6 –

1

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

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

7

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

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

Простая сборка алго будет иметь сделать файл в корневом каталоге 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

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

1

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

1

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

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

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

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

1

Я бы рассмотреть вопрос об использовании «выкачать» за то же самое, как это более эффективный, чем 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> 
0

Предыдущее сообщение хорошо подходит для страниц 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 файлов на ваших страницах
Смежные вопросы