모듈, 최고의 코딩 사례 및 올바른 서버 구성으로 Drupal 9 성능 향상
게시 됨: 2020-08-11힙에 메모리가 있는 가장 강력한 서버를 가질 수 있지만 고성능 웹 사이트를 보장하기에 충분합니까? Drupal을 사용하면 비즈니스 성장에 맞춰 웹사이트를 쉽게 확장할 수 있습니다. 사실, 그것이 Drupal이 잘하는 것입니다. 그러나 웹 페이지, 기능 및 콘텐츠가 갑자기 증가하면 성능에 영향을 미칠 수 있습니다. 이제 Drupal 9가 출시되었으며 전문가처럼 이 도전에 임할 준비가 되어 있습니다! Drupal 8의 장점에서 이전 코드를 빼면 더 간결하고 깨끗하며 강력해집니다. 절대적으로 작동하는 Drupal 9 성능 개선 기술에 대해 자세히 알아보세요.
웹사이트의 성능은 비즈니스 성공의 열쇠입니다. 느린 로딩 웹사이트는 기업에 해로울 수 있습니다. 더 나은 성능을 가진 웹사이트는 더 나은 SEO에 도움이 되고 방문자의 전환율을 개선하며 방문자에게 더 나은 사용자 경험을 제공하여 비즈니스 성장에 종합적으로 도움이 됩니다. 느린 로딩 웹사이트는 정반대의 역할을 하며 비즈니스 실패의 원인이 됩니다.

웹사이트 성능에 영향을 미치는 많은 것들이 있습니다. 그 중 일부는 다음과 같습니다.
• 서비스 제공업체(호스팅, DNS 등)
• 서버에 대한 요청 수
• 기술적인 문제 또는 잘못된 프로그래밍 관행
• 캐싱 기술
• 부적절한 서버 구성
• 무거운 이미지 및 비디오 파일
성능 향상을 위한 Drupal 9 코어 및 맞춤형 모듈
Drupal 9에는 웹사이트의 성능을 향상시키는 데 도움이 될 수 있는 많은 기여 및 핵심 모듈이 있습니다. 특정 코딩 방법과 적절한 서버 구성을 따르면 사이트 성능을 크게 향상시킬 수 있습니다.
핵심 모듈
• 큰 파이프
Drupal Big Pipe 모듈은 추가 구성 없이 작업을 더 빠르게 만듭니다. Drupal 코어와 함께 제공됩니다. 캐시 가능성 메타데이터를 사용하여 렌더링 파이프라인을 개선함으로써 프론트엔드의 인지 성능을 향상시킵니다.
• 내부 동적 페이지 캐시
이 Drupal 9 모듈은 동적 콘텐츠를 캐시하는 데 도움이 됩니다. 익명 및 인증된 사용자 모두에게 유용합니다. 이 모듈은 Drupal 7에서 사용할 수 없습니다. 사용자가 요청한 페이지는 처음 요청될 때 저장되고 동일한 페이지가 추가로 요청될 때 다시 사용할 수 있습니다.
• 내부 페이지 캐시
내부 페이지 캐시 모듈은 익명 사용자의 데이터를 캐시하는 데 도움이 됩니다. 이 모듈은 코어에서 사용할 수 있으며 기본적으로 활성화되어 있습니다.
구성 경로: admin/config/development/performance
여기에서 캐시를 지우고 브라우저 및 프록시 캐시 최대 수명을 설정하고 집계 설정을 활성화/비활성화할 수 있습니다.

기여 모듈
- 고급 CSS/JS 집계
Advagg 모듈은 다음과 같은 다른 많은 하위 모듈과 함께 제공됩니다. - AdvAgg Cdn: 공개 CDN에서 자산(CSS/JS)을 로드하는 데 도움이 됩니다 .
- AdvAgg CSS/JS 유효성 검사기: CSS 및 JS 파일 유효성 검사
- AdvAgg 외부 축소기: 명령줄 축소기로 Javascript 및/또는 CSS를 축소합니다.
- AdvAgg Minify CSS : 타사 축소기로 CSS 파일을 축소하는 데 도움이 됩니다 .
- AdvAgg Minify JS: 타사 mi로 js 파일을 축소하는 데 도움이 됩니다 .
- AdvAgg 수정자 : CSS 및 JS 배열을 변경할 수 있습니다. (호환성 문제가 있을 수 있음)
- AdvAgg 이전 Internet Explorer 호환성 향상기
구성 경로: /admin/config/development/performance/advagg
이 모듈은 또한 gzip 및 brotli 와 같은 파일 압축 기술을 지원합니다. 이 모듈은 http 요청 수를 줄이는 데 도움이 되므로 사이트 성능이 크게 향상됩니다.
블레이지
Drupal 9 Blazy 모듈은 이미지의 지연 로딩을 제공하여 대역폭을 절약하고 높은 이탈률을 방지합니다. Lazy loading은 사용자가 볼 수 있는 영역에 있을 때만 이미지를 로드하는 기술입니다. 이 다중 서비스 기술은 시간과 데이터를 절약합니다.
구성 경로: /admin/config/media/blazy
여기에서 Blazy를 활성화/비활성화하고, 자리 표시자 효과를 구성하고, 이미지가 사용자에게 표시되는 시간을 결정하는 오프셋을 설정할 수도 있습니다.

블레이지 모듈
CDN
Drupal 9 CDN 모듈은 Drupal 웹사이트에서 CDN을 쉽게 통합하는 데 도움이 됩니다. CDN 서버에서 정적 콘텐츠를 제공하여 콘텐츠 전달 속도를 높이는 데 도움이 됩니다. 그 외에도 이 모듈은 구성하기 쉽습니다.
구성 경로: /admin/config/services/cdn

여기에서 CDN을 활성화/비활성화하고 매핑 URL을 제공하고 영구 파일 캐싱을 선택/선택 취소할 수 있습니다.

최상의 코딩 방법을 통한 성능 향상
array_key_exist()보다 isset() 사용
isset() 메서드는 array_key_exist() 보다 훨씬 빠릅니다. 는 isset과 array_key_exist의 주요 차이점은 키가 배열에 존재하는지 array_key_exists 확실히 당신에게 말할 것입니다. isset 은 키/변수가 존재하고 null이 아닌 경우에만 true를 반환합니다. 이 벤치마크 비교에 대한 자세한 내용은 여기를 확인하십시오.
entityQuery() 사용
entityQuery() 는 적절한 엔터티 저장소에 대한 쿼리 작성 및 실행을 처리하기 위해 저장소 컨트롤러에 의존합니다. 이는 entityQuery()를 통해 실행되는 모든 쿼리가 저장소에 독립적이라는 이점이 있습니다. 따라서 기여 모듈을 작성하거나 미래에 대체 엔터티 저장소로 이동해야 할 수 있는 웹사이트에서 작업하는 경우 모든 쿼리는 변경이 필요 없이 새 저장소 백엔드를 투명하게 사용합니다. entityQuery() 는 사용자 정의 코드에서 직접 쿼리를 작성 하든 entityQuery() Views 백엔드를 통해 작성하든 상관없이 사용할 수 있습니다.
루핑 대신 loadMultiple() 메서드 사용
10개의 nid(노드 ID)가 있고 각 노드를 로드하기 위해 이를 반복하는 경우 데이터베이스에 10개의 쿼리를 수행하는 것입니다. loadMultiple()을 사용하는 동안 하나의 데이터베이스 쿼리로 축소됩니다.
캐싱
Drupal 9의 Cache API를 사용하여 렌더러, 응답 배열 또는 개체를 캐시할 수 있습니다. Drupal 9에는 세 가지 렌더링 가능성 캐싱 메타데이터가 있습니다.
- 캐시 태그
캐시 태그는 Drupal 엔터티 또는 구성에 따라 데이터를 캐시하는 데 사용됩니다. 이에 대한 구문은 cache-item:identifier입니다. 예: 노드:5, 사용자:3. - 캐시 컨텍스트
통사론:
• 부모와 자녀를 구분하는 기간
• 복수로 명명된 캐시 컨텍스트는 매개변수가 지정될 수 있음을 나타냅니다. 사용하다: 콜론을 추가하다
예: user.roles, user.roles:anonymous 등 - 캐시 최대 사용 기간
Cache max-age는 시간에 민감한 데이터를 캐시하는 데 사용됩니다.
대기열 작업자/배치
대용량 데이터를 PHP 타임아웃 없이 처리하기 위해서는 일괄 처리나 큐 워커를 사용할 수 있습니다. 큐 작업자의 항목은 cron이 실행되고 짧은 시간 동안 실행될 때만 실행됩니다. 대기열 작업자에는 신뢰할 수 있는 것과 신뢰할 수 없는 두 가지 유형이 있습니다. 신뢰할 수 있는 대기열 작업자는 대기열의 항목이 한 번 이상 실행되도록 하는 반면 신뢰할 수 없는 대기열은 메모리 오류 또는 기타 중단으로 인해 항목을 건너뛸 수 있습니다. 일괄 처리는 모든 항목이 일괄 처리에서 완료될 때까지 항목을 처리하므로 cron 실행을 기다리지 않고 처리 중에 오류가 발생하지 않습니다.
더 나은 서버 구성으로 성능 향상
Apache 대신 Nginx 사용
Nginx와 Apache는 둘 다 널리 사용되는 웹 서버입니다. Nginx는 성능 벤치마크에서 Apache보다 우위에 있습니다. 또한 아파치보다 빠르고 효율적입니다. Nginx는 최대 1,000개의 동시 연결을 실행하는 벤치마크 테스트에 따라 Apache보다 2.5배 더 빠르게 수행합니다.
HTTP/1.1을 통한 HTTP/2.0
HTTP/2.0은 다른 리소스를 차단하는 HTTP/1.1과 달리 다중화를 지원합니다. 하나의 리소스를 로드할 수 없는 경우 HTTP/2.0은 TCP 연결을 사용하여 한 번에 여러 스트림 데이터를 보냅니다. HTTP/2.0은 HTTP/1.1보다 고급 헤더 압축 기술을 사용합니다.
HTTP/2.0용 Nginx 구성
서버 {
수신 443 SSL http2; //http2 설정
ssl_certificate server.crt;
ssl_certificate_key server.key;
}압축 콘텐츠 제공
응답을 압축하면 종종 전송되는 데이터의 크기가 크게 줄어듭니다. 그러나 압축은 런타임에 발생하므로 성능에 부정적인 영향을 줄 수 있는 상당한 처리 오버헤드를 추가할 수도 있습니다.
압축된 콘텐츠를 제공하기 위한 Nginx 구성:
서버 {
gzip 켜기;
gzip_static 켜짐;
gzip_types 텍스트/일반 텍스트/css 애플리케이션/json 애플리케이션/x-javascript 텍스트/xml 애플리케이션/xml 애플리케이션/xml+rss 텍스트/자바스크립트;
gzip_proxyed 모든;
gzip_vary on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_버전 1.1;
...
}MySQL 대신 MariaDB
MariaDB는 MySQL에 비해 속도가 향상되었습니다. MySQL보다 빠른 캐싱 및 인덱싱을 제공합니다. 이 경우 MySql보다 거의 24% 빠릅니다. MariaDB가 MySQL보다 나은 다른 주요 지표도 있습니다. 따라서 성능 면에서 MySQL보다 MariaDb가 선호됩니다.
CDN
CDN은 콘텐츠 전송 네트워크를 의미합니다. 이는 콘텐츠를 더 빠르게 제공하기 위해 함께 작동하는 전 세계에 분산된 서버 클러스터(일명 접속 지점 또는 PoP)입니다. CDN은 사이트 콘텐츠의 캐시된 버전을 저장하고 사용 가능한 가장 가까운 서버에서 콘텐츠를 제공합니다. 인기 있는 CDN 공급자 중 일부는 Cloudflare, Amazon Cloudfront, Google Cloud cdn 등입니다.
