Оценка D на Компресс Компоненты с GZIP - PullRequest
0 голосов
/ 23 января 2010

Я использовал дополнение YSlow Firefox, и оно возвращает следующий результат:

----------------------------------------------- ------------------------------------------
Оценка D на Компресс Компоненты с gzip

Есть 3 простых текстовых компонента, которые нужно отправить сжатыми

* http://localhost:63808/WebSite/BemVindo/
* http://localhost:63808/WebSite/css/Global.css?...
* http://localhost:63808/WebSite/js/Global.js?...

----------------------------------------------- ------------------------------------------
Итак, я начал искать и получил этот кусок кода:

Global.asax

Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)

    Dim Response As HttpResponse = HttpContext.Current.Response
    Dim AcceptEncoding As String = HttpContext.Current.Request.Headers("Accept-Encoding")

    If Not String.IsNullOrEmpty(AcceptEncoding) AndAlso AcceptEncoding.Contains("gzip") OrElse AcceptEncoding.Contains("deflate") Then
        If AcceptEncoding.Contains("deflate") Then
            Response.Filter = New System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
            Response.AppendHeader("Content-Encoding", "deflate")
        Else
            Response.Filter = New System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress)
            Response.AppendHeader("Content-Encoding", "gzip")
        End If
    End If

    Response.AppendHeader("Vary", "Content-Encoding")

End Sub

А теперь у меня есть:

Степень А на Компрессе компонентов с помощью gzip

Хорошо, гул? Вопрос в том, является ли событие Application_PreRequestHandlerExecute лучшим местом для gzip / дефлятирования запросов?

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Не уверен, но ваш код может вызвать проблемы на страницах, использующих Ajax. На следующей странице показан подобный код, но отменяется сжатие, если обнаружен Ajax: Включение сжатия Gzip и Deflate HTTP на страницах ASP.NET . Я перевел код в VB, но не пробовал.

Эрик

  Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
Dim app As HttpApplication = TryCast(sender, HttpApplication)
Dim acceptEncoding As String = app.Request.Headers("Accept-Encoding")
Dim prevUncompressedStream As Stream = app.Response.Filter

If Not (TypeOf app.Context.CurrentHandler Is Page OrElse app.Context.CurrentHandler.[GetType]().Name = "SyncSessionlessHandler") OrElse app.Request("HTTP_X_MICROSOFTAJAX") IsNot Nothing Then
  Return
End If

If acceptEncoding Is Nothing OrElse acceptEncoding.Length = 0 Then
  Return
End If

acceptEncoding = acceptEncoding.ToLower()

If acceptEncoding.Contains("deflate") OrElse acceptEncoding = "*" Then
  ' defalte
  app.Response.Filter = New DeflateStream(prevUncompressedStream, CompressionMode.Compress)
  app.Response.AppendHeader("Content-Encoding", "deflate")
ElseIf acceptEncoding.Contains("gzip") Then
  ' gzip
  app.Response.Filter = New GZipStream(prevUncompressedStream, CompressionMode.Compress)
  app.Response.AppendHeader("Content-Encoding", "gzip")
End If

End Sub

1 голос
/ 23 января 2010

Да, событие Application_PreRequestHandlerExecute - лучшее место для gzip / дефлятирования запросов.

...