전체 페이지 캐싱 – 니드포 스피드

게시 됨: 2020-10-02
speed - Full-Page Caching - The Need For Speed -

웹사이트 캐싱 및 전체 페이지 캐싱은 웹사이트의 로드 시간을 단축하는 기술입니다. 그것은 웹사이트 성능에 막대한 이득을 가져다주기 때문에 거의 모든 곳에서 사용되는 매우 일반적인 관행입니다. 캐싱은 웹 서버가 작업을 훨씬 더 효율적으로 수행하도록 함으로써 작동합니다. 전체 페이지 캐싱은 보다 발전된 형태의 캐싱이므로 전체 페이지 캐싱을 이해하기 위해 일반 캐싱부터 시작해 보겠습니다.

Joe's Auto-Parts Shop – 정적 웹 사이트

1 - Full-Page Caching - The Need For Speed -

조를 상상해보십시오. 그는 자동차 부품으로 가득 찬 대형 창고를 소유하고 운영하는 사람입니다. 창고 전면에는 고객이 부품을 구매하기 위해 도착하는 카운터가 있습니다. 고객이 일부 부품을 구매하기 위해 도착하면 트랜잭션은 다음 절차를 따릅니다.

  1. 고객이 조에게 자동차 부품 목록을 건네줍니다.
  2. Joe는 첫 번째 부분을 가져와 카운터에 놓습니다.
  3. Joe는 두 번째 부분을 가져와 카운터에 놓습니다.
  4. 그리고 목록이 끝날 때까지 계속됩니다.
  5. 고객은 지불하고 떠납니다.

그렇다면 이것이 정적 웹사이트에 어떻게 적용됩니까?

정적 웹사이트는 데이터베이스, PHP 스크립트 또는 기타 프로그램을 사용하지 않는 웹사이트입니다. HTML 페이지와 이미지로만 구성된 단순한 웹사이트를 생각해 보십시오. Joe와 그의 창고는 이 간단한 웹사이트의 일부를 다음과 같이 나타냅니다.

  • 창고는 물리적 서버입니다.
  • Joe는 Apache와 같은 웹 서버 소프트웨어입니다.
  • 자동차 부품은 웹사이트를 구성하는 파일(예: 이미지, HTML 파일)입니다.

이 간단한 사이트를 제공하는 절차는 다음과 같습니다.

  1. 브라우저는 서버에서 실행 중인 Apache에서 웹 페이지를 요청합니다.
  2. Apache는 디스크에서 첫 번째 파일을 읽고 브라우저로 보냅니다.
  3. Apache는 디스크에서 두 번째 파일을 읽고 브라우저로 보냅니다.
  4. 그리고 모든 것을 가져올 때까지 계속됩니다.
  5. 브라우저는 완성된 웹 페이지를 표시합니다.

이 설정은 소규모 웹 사이트에서는 잘 작동하지만 압력이 가해지면 빠르게 실패합니다.

Joe는 바쁘다 – 캐싱으로 하루를 절약

2 - Full-Page Caching - The Need For Speed -

Joe의 시스템은 그가 바빠지기 시작할 때까지 잘 작동합니다. 사실 그는 너무 바빠서 대부분의 시간을 계산대에서 창고로 걸어가는 데 보내므로 모든 새로운 고객을 따라갈 수 없습니다.

Joe는 추가 창고를 구입하고 추가 수요를 충족하기 위해 그곳에서 일할 다른 사람을 고용할 수 있습니다. 그러나 이것은 비용이 많이 들고 그가 이미 가지고 있는 자원을 최대화하지 못합니다. 대신 Joe는 자신이 보유한 창고에서 프로세스를 보다 효율적으로 만들 수 있는 방법에 대해 생각합니다.

Joe는 고객을 위해 가져오는 부품의 90%가 10개 중 하나라는 사실을 깨달았습니다. 그래서 그는 이 10개의 부품을 카운터 아래에 두어 누군가가 요청할 때 바로 잡을 수 있도록 하기로 결정합니다. 그는 이제 창고에 가지 않고도 대부분의 고객 요청을 카운터에서 바로 처리할 수 있습니다. 이것은 훨씬 빠릅니다.

캐싱은 웹 서버에서 매우 유사한 작업을 수행합니다. Joe가 창고로 돌아가는 것처럼 정적 파일을 제공할 때 가장 느린 작업은 저장 장치에서 파일을 로드하는 것입니다. 캐싱이 하는 일은 가장 자주 요청되는 파일을 저장소에서 읽는 것보다 수천 배 빠르게 액세스할 수 있는 RAM에 보관하는 것입니다.

이러한 유형의 캐싱은 이미지 및 기타 정적 파일에 적합하지만 WordPress는 PHP 스크립트 및 데이터베이스가 있는 동적 웹사이트입니다.

전체 페이지 캐싱을 입력합니다.

조의 삶이 복잡해짐 – PHP, 데이터베이스 및 캐싱

joe - Full-Page Caching - The Need For Speed -

Joe와 같은 마을에 새로운 Toyota 작업장이 열리고 그들은 Joe를 사용하여 예비 부품을 공급합니다. 이것은 한 가지 문제를 제외하고 Joe에게는 훌륭합니다. Toyota는 Toyota 부품 번호로만 부품을 주문합니다. 그들은 Joe에게 거대한 카탈로그를 제공하여 그가 Toyota 부품 번호를 찾아 주문을 받을 때마다 창고에 있는 부품과 일치시킬 수 있도록 합니다.

그러나 이것은 Joe를 다시 느리게 만듭니다.

카탈로그에서 Toyota 부품을 검색해야 할 때마다 시간이 오래 걸립니다. 그것이 카운터 아래에 있는 부품 중 하나일지라도 그는 먼저 카탈로그에서 Toyota 부품 번호를 조회해야 하기 때문에 그냥 손을 뻗을 수 없습니다. 가장 많이 요청된 10개 부품을 카운터 아래에 보관하는 그의 이전 시스템은 여전히 ​​도움이 되지만 새로운 카탈로그 조회는 이제 큰 병목 현상입니다.

Joe는 이에 대해 다시 생각하고 해결책을 제시합니다. 그는 Toyota 주문의 대부분이 소규모 그룹에 속한다는 사실을 알아차렸습니다. 그래서 그는 가장 일반적인 Toyota 부품 번호와 해당 부품에 대한 치트 시트를 작성하여 조리대에 테이프로 붙였습니다.

이제 그는 대부분의 Toyota 주문에 대해 카탈로그를 사용할 필요가 없습니다. 그는 치트시트를 보고 Toyota 부품 번호를 가져올 수 있는 부품으로 거의 즉시 변환할 수 있습니다.

WordPress 사이트에는 Joe와 비슷한 문제가 있습니다. WordPress는 브라우저에서 요청할 때 모든 웹 페이지를 빌드합니다. 브라우저가 로드하는 HTML 페이지는 WordPress에 요청할 때까지 존재하지 않습니다.

WordPress가 사이트 페이지를 만드는 방법은 다음과 같습니다.

  1. 브라우저가 WordPress에서 웹 페이지를 요청합니다.
  2. PHP 스크립트는 요청을 수락하고 페이지를 구축하는 데 필요한 내용을 데이터베이스에 쿼리합니다.
  3. 데이터베이스는 조회하고 모든 정보를 PHP 프로세스에 반환합니다.
  4. PHP 스크립트는 해당 정보로 페이지를 작성하고 브라우저로 보냅니다.

이것은 많은 작업이며 캐시되지 않은 WordPress 웹 사이트가 정적 웹 사이트보다 몇 배 더 많은 컴퓨터 리소스를 필요로 하는 이유입니다.

Joe와 마찬가지로 WordPress 사이트는 새 방문자가 도착할 때마다 이 페이지가 제공되기 때문에 사이트의 방문 페이지와 같이 동일한 페이지에 대한 요청을 매우 자주 받습니다. 캐시가 아닌 설정에서 WordPress는 PHP 스크립트로 이 요청을 처리하고 매번 똑같은 페이지를 생성하더라도 모든 방문자에 대해 데이터베이스 쿼리를 만들어야 합니다.

이로 인해 많은 작업이 중복됩니다.

전체 페이지 캐싱은 이 문제를 해결합니다. 특정 요청과 생성되는 페이지가 항상 동일하므로 RAM에 페이지 사본을 캐시합니다. 또한 방문자가 페이지를 다시 생성하는 대신 RAM에서 직접 제공하기 전에 생성한 페이지를 요청할 때 해당 페이지를 생성한 요청의 치트 시트를 유지합니다.

이것은 많은 PHP 프로세스와 데이터베이스 조회를 우회하고 이전에 생성된 페이지를 RAM에서 직접 제공함으로써 웹 서버의 작업량을 크게 줄입니다. 이를 통해 정적 웹 사이트만큼 효율적인 동적 WordPress 웹 사이트를 제공할 수 있습니다.

캐싱 및 전체 페이지 캐싱은 웹 서버의 리소스를 활용하여 웹 서버의 효율성을 극대화하고 빠른 WordPress 사이트를 제공하는 탁월한 기술입니다.