Apache에서 제공하는 텍스트 파일에 gzip 대신 deflate를 사용하는 이유는 무엇입니까?
LAMP 서버가 제공하는 html, css 및 javascript 파일에 대해 어떤 방법이 장점을 제공합니까? 더 나은 대안이 있습니까?
서버는 대량의 작은 파일 인 Json을 사용하여 맵 응용 프로그램에 정보를 제공합니다.
참조 HTTP 압축 공기를 빼다 이상 GZIP 선택에 관여 히트 어떤 성능이 있습니까?
Apache에서 제공하는 텍스트 파일에 gzip 대신 deflate를 사용하는 이유는 무엇입니까?
간단한 대답은 아닙니다 .
RFC 2616 은 수축을 다음과 같이 정의합니다.
deflate RFC 1951에 설명 된 "deflate"압축 메커니즘과 함께 RFC 1950에 정의 된 "zlib"형식
zlib 형식은 RFC 1950 에서 다음과 같이 정의 됩니다.
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
따라서 몇 가지 헤더와 ADLER32 체크섬
RFC 2616은 gzip을 다음과 같이 정의합니다.
gzip RFC 1952 [25]에 설명 된대로 파일 압축 프로그램 "gzip"(GNU zip)으로 생성 된 인코딩 형식입니다. 이 형식은 32 비트 CRC를 사용하는 Lempel-Ziv 코딩 (LZ77)입니다.
RFC 1952 는 압축 된 데이터를 다음과 같이 정의합니다.
형식은 현재 DEFLATE 압축 방법을 사용하지만 다른 압축 방법을 사용하도록 쉽게 확장 할 수 있습니다.
CRC-32가 ADLER32보다 느리다
동일한 길이의 순환 중복 검사와 비교하여 속도의 신뢰성을 교환합니다 (후자를 선호 함).
압축에는 동일한 알고리즘을 사용 하지만 헤더와 체크섬 에는 다른 알고리즘을 사용하는 2 개의 압축 메커니즘이 있습니다 .
이제 기본 TCP 패킷은 이미 매우 안정적 이므로 여기서 문제는 GZIP가 사용하는 Adler 32 vs CRC-32 가 아닙니다 .
수년 동안 많은 브라우저가 잘못된 수축 알고리즘을 구현 한 것으로 나타났습니다. RFC 1950의 zlib 헤더를 기대하는 대신 압축 된 페이로드를 예상했습니다. 마찬가지로 다양한 웹 서버도 같은 실수를했습니다.
따라서 수년 동안 브라우저는 퍼지 논리 수축 구현을 구현 하기 시작 하여 페이로드를 시도하지 않으면 zlib 헤더 및 애들러 체크섬을 시도합니다.
이와 같은 복잡한 논리의 결과는 종종 깨진 것입니다. Verve Studio에는 상황이 얼마나 나쁜지 보여주는 사용자 제공 테스트 섹션이 있습니다.
예를 들어, deflate는 Safari 4.0에서 작동하지만 Safari 5.1에서는 손상되어 항상 IE에 문제가 있습니다.
따라서 가장 좋은 방법은 수축을 완전히 피하는 것입니다. (애들러 32로 인한) 작은 속도 향상은 페이로드가 부러 질 위험이 없습니다.
GZip은 단순히 수축 및 체크섬 및 머리글 / 바닥 글입니다. 그러나 어려운 방법을 배웠 으므로 수축 이 더 빠릅니다 .
실제로 옵션으로 수축을 선택하지 못할 수도 있습니다. mod_deflate 가 deflate를 사용하지 않고 gzip을 사용 하는 것과 반대로 . 따라서 대부분의 포인트가 유효하지만 대부분 관련이 없습니다.
gzip은 기본적으로 수축으로 둘러 싸인 헤더이기 때문에 수축과 gzip 사이에는 큰 차이가 없다고 생각합니다 (RFC 1951 및 1952 참조).
The main reason is that deflate is faster to encode than gzip and on a busy server that might make a difference. With static pages it's a different question, since they can easily be pre-compressed once.
mod_deflate requires fewer resources on your server, although you may pay a small penalty in terms of the amount of compression.
If you are serving many small files, I'd recommend benchmarking and load testing your compressed and uncompressed solutions - you may find some cases where enabling compression will not result in savings.
There shouldn't be any difference in gzip & deflate for decompression. Gzip is just deflate with a few dozen byte header wrapped around it including a checksum. The checksum is the reason for the slower compression. However when you're precompressing zillions of files you want those checksums as a sanity check in your filesystem. In addition you can utilize commandline tools to get stats on the file. For our site we are precompressing a ton of static data (the entire open directory, 13,000 games, autocomplete for millions of keywords, etc.) and we are ranked 95% faster than all websites by Alexa. Faxo Search. However, we do utilize a home grown proprietary web server. Apache/mod_deflate just didn't cut it. When those files are compressed into the filesystem not only do you take a hit for your file with the minimum filesystem block size but all the unnecessary overhead in managing the file in the filesystem that the webserver could care less about. Your concerns should be total disk footprint and access/decompression time and secondarily speed in being able to get this data precompressed. The footprint is important because even though disk space is cheap you want as much as possible to fit in the cache.
On Ubuntu with Apache2 and the deflate module already installed (which it is by default), you can enable deflate gzip compression in two easy steps:
a2enmod deflate
/etc/init.d/apache2 force-reload
And you're away! I found pages I served over my adsl connection loaded much faster.
Edit: As per @GertvandenBerg's comment, this enables gzip compression, not deflate.
if I remember correctly
- gzip will compress a little more than deflate
- deflate is more efficient
'IT story' 카테고리의 다른 글
제네릭 형식의 인스턴스를 만드시겠습니까? (0) | 2020.05.01 |
---|---|
applicationWillEnterForeground 및 applicationDidBecomeActive, applicationWillResignActive 및 applicationDidEnterBackground (0) | 2020.05.01 |
Visual Studio에서 진행중인 빌드를 어떻게 취소합니까? (0) | 2020.05.01 |
git push는 로컬 변경 사항이 있지만 최신 정보를 말합니다. (0) | 2020.05.01 |
C #에서 문자열에 줄 바꿈 추가 (0) | 2020.04.30 |