Комментарии 37
Все ваши проблемы решаются очень просто: используйте Apache. :) Тогда сами сможете выбирать, что и как сжимать. И даже выключать сжатие контента для посетителей со старыми браузерами, которые сжатие не поддерживают.
Спасибо огромное. Замечательная статья. К сожалению, не могу плюсануть.
У меня второй способ работал со странностями. На сервере для разработки все работало, но после переноса приложения на сервер хостера (Parking) сжатие само-собой отключилось. Причем, предположение, что сжатие не работает из-за того, что сервер съедает заголовки, отпало, так как после удаления условий проблема осталась. А их техподдержка внятного ответа так и не дала.
Надо будет попробовать третий вариант (первый, сами понимаете, недоступен), хотя, по сути-то он ничем не отличается.
Кстати, можно третий вариант реализовать по-другому: сделать какой-нибудь GZipCompressedPage : Page и переопределить в нем, скажем, метод ProcessRequest, где и будет подключаться сжатие. Так мы избавимся от:
1). лишнего кода в Page_Load()
2). гарантируем, что в Response никто ничего не запишет (ProcessRequest вызывается до всех событий)
3). Можем подключать сжатие, просто изменяя в Codebehind класс-родитель, не меняя код.
Надо будет попробовать третий вариант (первый, сами понимаете, недоступен), хотя, по сути-то он ничем не отличается.
Кстати, можно третий вариант реализовать по-другому: сделать какой-нибудь GZipCompressedPage : Page и переопределить в нем, скажем, метод ProcessRequest, где и будет подключаться сжатие. Так мы избавимся от:
1). лишнего кода в Page_Load()
2). гарантируем, что в Response никто ничего не запишет (ProcessRequest вызывается до всех событий)
3). Можем подключать сжатие, просто изменяя в Codebehind класс-родитель, не меняя код.
Хм. Единственное что могу предположить, что по каким-то причинам в вашем случае Application_BeginRequest просто не выполнялся. Или проверяли? Других вариантов пока даже не представляю...
Да, хороший вариант, предлагаю попробывать и выложить сюда в виде статьи, заодно поделитесь заработало ли на паркинге?
Да, хороший вариант, предлагаю попробывать и выложить сюда в виде статьи, заодно поделитесь заработало ли на паркинге?
проверял, в том-то и дело, что все выполнялось. Правда, код вызывался не по BeginRequest, а по PreSendRequestHeaders, но сомневаюсь, что это меняет дело.
Статью может попробую на выходных написать, если получится. У меня сейчас одна большая статья под названием «диплом» пишется, плюс еще работать надо :)
Статью может попробую на выходных написать, если получится. У меня сейчас одна большая статья под названием «диплом» пишется, плюс еще работать надо :)
Использую сжатие первым способом, но ещё с правкой метабазы IIS. Настраивается все достаточно гибко, если знать, что крутить, так же можно и для отдельных сайтов задавать настройки. В общем отдал предпочтение IIS для этой задачи, пока не жалуюсь, да и при размещении новых сайтов не задумываешься о том, что нужно что-то ещё прикрутить.
Да, я наверняка тоже бы остановился бы на первом варианте и не искал бы ничего другого, но обстоятельства так сложились, что пришлось покопаться.
Тоже хотел добавить, что можно еще пошаманить с настройками в IIS.
Плюс ко всему еще есть неплохой уже реализованный модуль - одно время я им пользовался.
http://www.codeproject.com/KB/aspnet/htt…
Плюс ко всему еще есть неплохой уже реализованный модуль - одно время я им пользовался.
http://www.codeproject.com/KB/aspnet/htt…
хорошо пишете, и тема злободневная)
Статья, как минимум, интересна, ну а максимум решает каждый для себя.
Извиняюсь, за дабл-коммент. Позже перешел на blowery (http://www.blowery.org/code/HttpCompress…).
Ну и пример реализации с помощью HttpModule (http://www.jigar.net/articles/viewhtmlco…)
Ну и пример реализации с помощью HttpModule (http://www.jigar.net/articles/viewhtmlco…)
а тебе не было бы интересно написать статейку по этим двум компонентам?
я бы сам с удовольствием почитал
я бы сам с удовольствием почитал
У blowery ошибки есть, работу с хедерами переписать пришлось. А в общем, достаточно успешно используем модифицированную версию в нескольких проектах.
Спасибо большое за ссылки, мне понравился второй вариант - реализация через HttpModule. Возник один вопрос - сжатие CSS и JS файлов. В web.config добавил еще 2 ContentTypes: Value="application/x-javascript" и Value="text/css". При дебаге в студии сжатие происходит на ура, когда стараюсь работать через IIS, сжимает только text/html. Возникали ли такие проблемы у вас или нет?
НЛО прилетело и опубликовало эту надпись здесь
А Вы уверены, что под lighthttpd можно запустить asp.net?
НЛО прилетело и опубликовало эту надпись здесь
Вообще это пример «интеграции от которой невозможно отказаться» :) Выбирая отличный .Net, Вы вынуждены использовать Windows (некоторые не очень видят его на сервере, хотя бы из-за клиентский червей) и IIS (который сильно проигрывает другим веб-серверам).
Эм.. А в современном приложении вы много насчитаете статических элементов, которые "нада" сжимать? CSS + JS? Сколько на этом можно сэкономить, если эти элементы зачатую кешируются для всех страниц сайта и грузятся по сути вообще один раз.
Нормально динамический контент жмется, не у всех выделенки, поэтому это достаточно актуально. И на выделенке в общем-то оно все равно быстрее грузится сжатым. Да и на хабре уже несколько раз обсуждалось на реальных тестах полезность сжатия.
Нормально динамический контент жмется, не у всех выделенки, поэтому это достаточно актуально. И на выделенке в общем-то оно все равно быстрее грузится сжатым. Да и на хабре уже несколько раз обсуждалось на реальных тестах полезность сжатия.
НЛО прилетело и опубликовало эту надпись здесь
Я не отрицаю, что CSS+JS нужно сжимать. IIS со статическим контентом поступает именно так как вы говорите, при первом обращении сжимает и ложит в директорию на диск.
Хабр - это просто достаточно старая версия сайта. Возьмите ту же автокадабру. Там сжатие работает и очень даже никому не мешает, а только помогает?
Для примера ещё несколько "посещаемых" ресурсов: google, корреспондент (поссылкам потыкайте, это не прямые на сайт, а на анализ использования компрессии в них).
Утверждать, что из-за gzip увеличивается нагрузка на сервер в 10 раз, ну не смешите. Вы просто похожи сейчас на человека, который никогда сам не пытался применить эту технологию, но перед этим прочитал пару "неправильных" статей. У меня на сервере все жмется и никаких жалоб я не слышал по этому поводу. После небольшой оптимизации одного из сайтов друг на диалапе просто в восторге был от того, как быстро все работает.
В общем как-то неубедительно это все звучит с вашей стороны. Больше чем уверен, что "раз в 10" это только что придуманая цифра.
Хабр - это просто достаточно старая версия сайта. Возьмите ту же автокадабру. Там сжатие работает и очень даже никому не мешает, а только помогает?
Для примера ещё несколько "посещаемых" ресурсов: google, корреспондент (поссылкам потыкайте, это не прямые на сайт, а на анализ использования компрессии в них).
Утверждать, что из-за gzip увеличивается нагрузка на сервер в 10 раз, ну не смешите. Вы просто похожи сейчас на человека, который никогда сам не пытался применить эту технологию, но перед этим прочитал пару "неправильных" статей. У меня на сервере все жмется и никаких жалоб я не слышал по этому поводу. После небольшой оптимизации одного из сайтов друг на диалапе просто в восторге был от того, как быстро все работает.
В общем как-то неубедительно это все звучит с вашей стороны. Больше чем уверен, что "раз в 10" это только что придуманая цифра.
Кстати, я правильно понимаю, что если я хочу сжимать JS и CSS файлы, но только для одной папки, а не глобально, то я не смогу это сделать в IIS?
Вообще.. не совсем ясно, зачем так делать. Однако, можно копать в сторону сохранения таких файлов в ресурсах сборки и настройки сжатия обращений *.axd для приложения. Но я могу ошибаться.
Кеширование стоит как раз только CSS и JS, потому что они не изменяются. Но вообще вопрос бы конечно же про гибкость настроек ;)
Да, всё правильно. Стандартно IIS этого не делает.
Мы используем Blowery.HttpCompress, и дополнительно прописываем ему что сжимать, а что нет (это делается в web.config)
Мы используем Blowery.HttpCompress, и дополнительно прописываем ему что сжимать, а что нет (это делается в web.config)
Вопрос можно? Тестировали вы третий случай в ситуации использования Microsoft ISA Server? У меня почему-то в этом случае он показал свою полную неработоспособность и даже падение в ошибку при HttpContext.Current.Request.Headers[«Accept-Encoding»] (Request был пуст).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
asp.net: gzip, несколько вариантов включения