nginx 시리즈 gzip 모듈 의 용법 과 평가
11228 단어 Nginx
gzip 는 * nix 시스템 에서 압축 명령 으로 파일 을. gz 접미사 파일 로 압축 하여 디스크 의 공간 을 줄 이 는 데 사 용 됩 니 다.이에 대응 하 는 것 은 명령 gunzip 입 니 다. 압축 을 풀기 위해 gzip 방법 으로 압축 한 파일 입 니 다.nginx 는 매일 그날 의 방문 로 그 를 압축 합 니 다. 보통 로그 파일 디 렉 터 리 에서 access. log - yyymmd. gz 파일 을 볼 수 있 습 니 다.
nginx 는 클 라 이언 트 에 출력 된 내용 을 압축 하여 전송 파일 의 부 피 를 줄 이 고 네트워크 대역 폭 의 점용 을 줄 이 는 gzip 모듈 이 있 습 니 다.웹 응용 프로그램 에 서 는 일반적으로 gzip 압축 을 사용 하여 응답 시간 을 단축 시 키 고 사용자 체험 을 향상 시 킵 니 다.물론 서버 쪽 에서 압축 을 하려 면 클 라 이언 트 가 압축 을 풀 어야 합 니 다. 이것 은 모두 cpu 시간 을 차지 할 것 입 니 다.그러나 전송 내용 이 줄 어 들 기 때문에 전송 과정 에서 각 네트워크 카드, 공유 기, 교환기 가 패 킷 에 대한 처리 시간 도 줄어든다.gzip 압축 은 여기 서 시간 을 얻 었 습 니 다.
2. 지령 설명
gzip 압축 기능 을 사용 하려 면 다음 과 같은 몇 가지 조건 을 만족 시 켜 야 합 니 다.
# static js、css、jpg、jpeg、png、gif gzip
location ~ /static/(.+)\.(js|css|jpg|jpeg|png|gif) {
gzip on; # gzip , off,
# js、css、jpg、png、gif gzip
gzip_types application/javascript text/css image/jpeg image/png image/gif;
gzip_min_length 1024; # ,
gzip_buffers 4 1k; # ,
gzip_comp_level 1; # , 1。 1-9, , cpu
}
서버 가 gzip 압축 을 사용 하면 응답 헤드 는 Content - Encoding: gzip 를 포함 합 니 다. 클 라 이언 트 는 이것 에 따라 서버 가 돌아 온 내용 이 gzip 로 압축 된 내용 인지 판단 합 니 다.
3. 각 파일 의 압축 비율 테스트
파일 일괄 테스트 를 편리 하 게 하기 위해 phop 애플 릿 을 썼 습 니 다.
이 프로그램 이 처리 한 서버 가 되 돌아 오 는 전송 형식 은 블록 전송, 즉 'Transfer - Encoding: chunked' HTTP 응답 헤드 를 가 진 것 입 니 다.
function testGzip($host, $uri) {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, '127.0.0.1', 80);
$request = "GET $uri HTTP/1.1\r
";
$request .= "Host: $host\r
";
$request .= "Accept-Encoding: gzip\r
";
$request .= "Connection: Keep-Alive\r
\r
";
socket_write($socket, $request, strlen($request));
$headers = [];
while (($line = socket_read($socket, 1024, PHP_NORMAL_READ))) {
socket_read($socket, 1, PHP_BINARY_READ);
if ($line == "\r") {
break;
}
$headers[] = rtrim($line, "\r");
}
$totalSize = 0;
$chunkSizeList = [];
$data = "";
while (true) {
$lenx = rtrim(socket_read($socket, 1024, PHP_NORMAL_READ), "\r");
socket_read($socket, 1, PHP_BINARY_READ);
$len = hexdec($lenx);
if ($len == 0) {
socket_read($socket, 2, PHP_BINARY_READ);
break;
} else {
//echo 'len=', $len, PHP_EOL;
}
$chunkSizeList[] = $len;
$totalSize += $len;
$data .= socket_read($socket, $len, PHP_BINARY_READ);
socket_read($socket, 2, PHP_BINARY_READ);
//usleep(10000);
}
socket_close($socket);
$decodedData = gzdecode($data);
#echo $decodedData;
return [$headers, $chunkSizeList, $totalSize, strlen($decodedData)];
}
function batchGzipTest($host, $basePath, $files) {
$stats = [];
foreach ($files as $jsFile) {
$stats[$jsFile] = testGzip($host, $basePath . $jsFile);
}
echo "| | | | |", PHP_EOL;
echo "|------|:-----|:-----|:-----|", PHP_EOL;
foreach($stats as $jsFile => $v) {
echo "|", $jsFile, "|", $v[3], "|", $v[2], "|", sprintf("%.2f", ($v[3]-$v[2])/$v[3]*100), "%", "|", PHP_EOL;
}
}
사용 예시:
$host = 'invo.com';
$jsPath = '/static/js/';
$jsFiles = [
'arttemplate.js',
'bootstrap.min.js',
'fastclick.min.js',
'jquery220.min.js',
'moment.min.js',
'vue.js',
];
batchGzipTest($host, $jsPath, $jsFiles);
3.1 js 파일 압축 비율 테스트
자주 사용 하 는 js 파일 6 개 를 테스트 한 결과 다음 과 같 습 니 다.
파일 이름
초기 크기
압축 후 크기
압축 비율
arttemplate.js
4449
2257
49.27%
bootstrap.min.js
36868
11804
67.98%
fastclick.min.js
8776
3124
64.40%
jquery220.min.js
85589
34942
59.17%
moment.min.js
40737
15838
61.12%
vue.js
222777
75157
66.26%
최소 49.27%, 최대 67.98%, 그런대로 괜 찮 은 편!!
3.2 css 파일 압축 비율 테스트
css 파일 5 개 테스트:
파일 이름
초기 크기
압축 후 크기
압축 비율
bootstrap.min.css
121260
25198
79.22%
citheme.css
2486
1186
52.29%
datepicker3.css
33745
3867
88.54%
mui.min.css
77557
16183
79.13%
slider.css
8486
1745
79.44%
최소 52.29%, 최대 88.64%, 상당히 가능 합 니 다!!
3.3 이미지 파일 압축 비율 테스트
png 파일 3 개, jpg 파일 2 개.
파일 이름
초기 크기
압축 후 크기
압축 비율
1.png
16953
16882
0.42%
2.png
117010
116875
0.12%
3.png
66492
62771
5.60%
4.jpg
775702
771901
0.49%
5.jpg
620888
618391
0.40%
별 효과 가 없어, 실 망 스 러 워!!png, jpeg 등 형식의 그림 이 압축 되 었 기 때 문 일 것 입 니 다.
3.4 html 파일 압축 비율 테스트
html 파일 5 개 를 무 작위 로 테스트 합 니 다.
파일 이름
초기 크기
압축 후 크기
압축 비율
genindex.html
116025
17769
84.69%
index.html
53112
8726
83.57%
search.html
33589
6495
80.66%
license.html
35035
7285
79.21%
DCO.html
35168
7258
79.36%
css 파일 보다 효과 가 더 좋 습 니 다!!
요약: gzip 압축 은 텍스트 파일 의 압축 효과 가 매우 좋 고 (40 ~ 80%) 이미지 파일 에 대한 효과 가 매우 적다.실제 응용 에 서 는 js, html, css 형식의 파일 에 대해 gzip 압축 을 여 는 것 을 고려 할 수 있 습 니 다.제 이 슨 도 괜 찮 을 것 같 아 요. 독자 들 이 관심 이 있 으 면 직접 테스트 해 보 세 요.
후기
이 글 을 거의 다 썼 을 때 마크 다운 에 문제 가 생 겼 다. 다시 불 러 오 겠 다 고 했 더 니 내용 이 모두 사 라 졌 다.얼마나 아 픈 깨 달 음 인가!어 쩔 수 없 이 깨 진 기억 을 정리 하고 다시 썼 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux2에 nginx 설치설치 가능한 nginx를 확인하고, 해당 nginx를 설치한다. localhost 혹은 해당 ip로 접속을 하면 nginx 화면을 볼 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.