분류 php

PHP 웹 사이트를 최적화 하는 방법 (feat.Gzip 압축)

컨텐츠 정보

  • 조회 324 (작성일 )

본문

이 웹 사이트를 아름답게 만들기 위해 영혼을 갈고 경험 한 적이 있습니까? 일단 온라인으로 배포하면 로드 하는 데 시간이 오래 걸리고 다른 사람들 앞에서는 피의 느낌을 느끼며 영원히 기다려야 합니까?


우리 모두가 함께 있었던 공통점


heroku, github.it 등과 같은 무료 호스팅 웹 사이트에 배포하면 상황이 정상적으로 악화됩니다.


그런 다음 우리가 할 수 있는 일.


https://dev.to/ham8821/how-to-optimize-your-php-website-feat-gzip-compression-285j 


첫째 : 진단 


의사의 진단을 받는 것처럼 웹 사이트의 속도가 느리고 원인이 무엇인지 먼저 파악해야 합니다.

이를 위해 북마크 하려는 유용한 링크가 있습니다. 비슷한 작업을 수행하는 수백 개의 웹 사이트가 있다는 사실을 알고 있지만 순전히 맛의 문제 이며 이 두 가지는 단순하고 직접적인 UI 디자인 및 내용 측면에서 내가 가장 좋아하는 것입니다.


a. uptrends.com/tools/website-speed-test

b. tools.pingdom.com/


글쎄, 이것은 두 번째 링크를 클릭했을 때의 모습입니다.이 링크는 문제를 명확하게 보는 데 도움이 되었습니다. 당신은 단순히 당신의 웹 사이트 URL을 복사하고 테스트하려는 위치를 선택할 수 있습니다. 그리고 "테스트 시작"버튼을 누르십시오!

Alt Text 


결과를 보겠습니다.


Alt Text 


전반적인 성능 등급이 그렇게 끔찍한 것 같지는 않지만 'Compress components'라는 이름으로 "D"등급을 받았습니다.


말하고 있습니다.


"압축은 HTTP 응답의 크기를 줄임으로써 응답 시간을 줄입니다. Gzip은 현재 가장 널리 사용되는 효과적인 압축 방법이며 일반적으로 응답 크기를 약 70 % 줄입니다. 오늘날 인터넷 트래픽의 약 90 %는 지원하는 브라우저를 통해 이동합니다 gzip. " 


우리가 "gzip"부분을 파야 할 때인 것 같지 않습니까?


두 번째 : Gzip, 당신은 무엇입니까? 


Gzip을 사용하기 전에 이와 같은 몇 가지 설명으로 콘텐츠 인코딩의 개념을 이해하는 것이 더 쉬울 것입니다.


Alt Text 


Original


브라우저 : 이봐 친구, index.php 파일을 얻을 수 있습니까? 

서버 : 잠깐만 기다려주세요 ... 예! 알았다! 파일을 보내 드리고 있습니다. 

브라우저 : 200KB? 아야… 기다릴 시간이 더 필요해…


After Compression


브라우저 : 이봐 친구, index.php 파일을 얻을 수 있습니까? 압축 버전이 있으면 신경 쓰지 않을 것입니다. 

서버 : 잠깐만 기다려주세요 ... 예! 알았다! 당신은 당신이 압축 하나에 좋다고 말했습니까? 놀랄 만한. 파일을 보내 드리고 있습니다. 

브라우저 : 훌륭합니다! 20KB 밖에 안됩니다. 직접 압축을 풀겠습니다!


그렇게 간단합니다! 파일 크기가 작으면 다운로드 시간이 크게 단축되어 사용자가 전체 웹 사이트를 보기 위해 오랜 시간을 기다리지 않아도 됩니다.


셋째 : Gzip, 어떻게 해야 합니까? 


자, 우리 웹 사이트에 실제로 Gzip을 구현하기 위해 지금 당장 알아 보겠습니다. 매우 간단하지만 구문은 다양하므로 염두에 두어야 합니다!


먼저 루트 폴더에서 .htaccess 파일을 여십시오. 가지고 있지 않다면 간단히 만들 수 있습니다. 그 파일의 측면에서, 우리가 할 수 있는 것은 압축하려는 파일 형식을 지정하는 것입니다. 나는 이렇게 보일 것입니다.


<IfModule deflate_module>
    # Enable compression for the following file types.
    AddOutputFilterByType            \
     DEFLATE                         \
      application/javascript         \
      text/css                       \
      text/html                      \
      text/javascript                \
      text/plain                     \
      text/xml
</IfModule>

그러나 Gzip은 PNG, Zip 또는 기타 압축 형식과 같은 압축 형식으로 이미 압축되어 압축 할 수 없습니다.


아파치에서는 이것이 작동합니다.


# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

위의 방법으로 문제가 해결되지 않으면 여기에서 시도하십시오


<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^text/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include handler ^cgi-script$
</ifModule>


둘째로,이 PHP 코드를 메인 페이지 위에 놓으십시오

<?php
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
    ob_start();            
}
elseif (strpos(' ' . $_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') == false) {
    if (strpos(' ' . $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') == false) {
        ob_start();
    }
    elseif(!ob_start("ob_gzhandler")) {
        ob_start();
    }   
}
elseif(!ob_start("ob_gzhandler")) {
    ob_start();
}
?>

셋째, 압축이 작동하는지 확인하십시오!

gidnetwork.com/tools/gzip-test.php


Alt Text 


그것은 압축되어 있고 압축 유형은 gzip이라고 말했습니다. 우리가 여기서 일을 한 것 같습니다 :)


마지막으로, 약간의 추가 속도가 여전히 만족스럽지 않은 경우.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
## EXPIRES CACHING ##

위의 행을 .htaccess 파일에 넣으십시오. 언급 한 파일은 캐싱에 저장되고 특정 시간 후에 만료되므로 며칠 후에 웹 사이트를 다시 방문하면 브라우저가 모든 파일을 다시 로드 할 때까지 기다릴 필요가 없습니다!


마지막으로 웹 사이트에서 어떻게 작동했는지 다시 확인하십시오. 


속도를 확인하기 위해 첫 번째 링크를 클릭했는데 결과가 나왔습니다!


Alt Text 


와우, 꽤 시원하고 로드 시간을 분명히 줄이는 것처럼 들립니다.


결론:: 


사이트 파일을 압축하면 로딩 시간을 단축 할 수 있으며 사용자는 불필요한 속도 저하를 겪지 않아도 됩니다.