2010-07-09 3 views
2

Я реализую сжатие страниц/ресурсов для улучшения производительности сайта.Сжатие HTTP: некоторые внешние скрипты/CSS не декомпрессируются должным образом некоторое время

Я попытался реализовать оба источника и злой HttpCompress, но в итоге получился тот же результат. Это только влияет на Firefox, я тестировал Chrome и IE.

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

������í½`I%&/mÊ{JõJ×àt¡`$Ø@ìÁÍæìiG#)«*ÊeVe]f 

(на самом деле они могут не отображаться должным образом здесь)

Осматривая страницу с помощью Firebug показывает заголовок ответа, как:

Cache -Control private

Content-Type text/html; кодировка = UTF-8

Content-Encoding GZIP

сервера Microsoft-IIS/7.5

X-AspNetMvc-версия 2.0

X-ASPnet-версия 2.0.50727

Х -Compressed-by HttpCompress

X-Powered-By ASP.NET Дата Пт, 09 июл

2010 06:51:40 GMT Контент-длина 2622

Это ясно указывает, что ресурс сжимается gzip. Так что что-то кажется неправильным на стороне сдувания на клиенте?

я добавил следующие разделы (в соответствующих местах) в web.config:

<sectionGroup name="blowery.web"> 
    <section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/> 
</sectionGroup> 

<blowery.web> 
    <httpCompress preferredAlgorithm="gzip" compressionLevel="high"> 
     <excludedMimeTypes> 
     <add type="image/jpeg"/> 
     <add type="image/png"/> 
     <add type="image/gif"/> 
     </excludedMimeTypes> 
     <excludedPaths> 
     <add path="NoCompress.aspx"/> 
     </excludedPaths> 
    </httpCompress> 
</blowery.web> 

<add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/> 

Любая помощь?

ответ

1

Это проблема, которую я видел раньше, и проблема в том, что Content-Length не верна. Почему не правильно? потому что он, вероятно, вычисляет перед сжатием.

Если вы установили Content-Lenght вручную, просто удалите его и пусть модуль установит его, если сможет.

Отмечаем, что вы используете компрессию Blowery . Вероятно, это ошибка/проблема внутри Blowery. Если вы не можете найти его и исправить, почему бы не использовать сжатие Ms?

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

Проверьте это, используя этот сайт http://www.pipeboost.com/report.asp, если ваши страницы готовы к сжатию по умолчанию iis.

Если вы не сжимаете по умолчанию, вы можете сделать это очень просто. On Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    string cTheFile = HttpContext.Current.Request.Path; 
    string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile); 

    if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     string acceptEncoding = MyCurrentContent.Request.Headers["Accept-Encoding"].ToLower();; 

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

Обратите внимание, что я просто пишу этот код и не тестировал. Мой код немного усложняется, поэтому я просто создаю простой пример.

Найти другие примеры: http://www.google.com/search?q=Response.Filter+GZipStream

Ориентир: ASP.NET site sometimes freezing up and/or showing odd text at top of the page while loading, on load balanced servers

+0

я получаю тот же результат с помощью "злую HttpCompress". Я не знаю о сжатии MS ... это развертывается на общем сервере, поэтому у меня нет доступа к IIS. Я предполагаю, что они намеренно не превращают сжатие так, что процессор не перегружается. Вероятно, дискуссия о том, как много пользы я получу, рассматривая это на общем сервере. Я предполагаю, что я делаю что-то неправильно, учитывая, что у меня такая же проблема для обоих инструментов сжатия. Может быть, это конфигурация IIS? Я тестировал это только локально. – ptutt

+0

@putt У меня есть обновленный ответ – Aristos

+0

Только что реализовал этот код, и он работает. С чем-то настолько простым вы должны задаться вопросом, почему у blowery и httpcompress была такая же ошибка (может быть, они используют одну и ту же кодовую базу?). В любом случае спасибо за помощь. – ptutt

 Смежные вопросы

  • Нет связанных вопросов^_^