워드프레스 성능 전략

물고기가 헤엄치는 것으로 예시한 워드프레스 성능
목차

이 시점에서 워드프레스 성능 최적화에 관한 수많은 글을 보셨을 텐데, 그 중 상당수가 똑같은 오래된 팁을 담고 있을 것입니다. 아무런 진전 없이 똑같은 비효율적인 권장 사항을 계속 접하게 되면 실망스러울 수 있습니다.

선택의 여지가 없다고 느껴진다면 다음 단계를 통해 해결 방법을 찾을 수 있습니다. 이는 성능 최적화에 대한 포괄적인 접근 방식을 포함하여 워드프레스닷컴이 호스팅하는 모든 사이트에서 기본적으로 구현하는 전략과 동일한 것입니다. 인프라의 세부 사항을 자세히 살펴보지만 이러한 원칙은 거의 모든 호스팅 환경에 맞게 조정할 수 있습니다.

우리가 따르는 한 가지 규칙은 모든 것을 최적화할 필요는 없다는 것입니다. 예를 들어 Google 글꼴의 경우 성능을 향상시키기 위해 많은 작업을 해야 한다면 처음부터 정말 필요한지 고려해야 합니다.

이러한 정신에 따라 워드프레스의 진정한 잠재력을 발휘하는 몇 가지 기능을 비활성화하는 것부터 시작하겠습니다.

0. 워드프레스 초기화:

1. WP Cron을 비활성화합니다.

워드프레스에는 Linux 서버에 있는 것과 같은 적절한 크론이 없으며 대신 웹서버에 히트가 발생할 때마다 트리거되는 함수를 사용합니다.

훨씬 더 나은 해결책은 외부 서비스를 사용하여 워드프레스 설치에 크론을 트리거하는 것입니다. 레이빔에서는 놀라운 cron-job.org 서비스를 사용하여 5분마다 작업을 실행합니다. 크론에 의해 트리거된 프로세스는 완료되는 데 시간이 필요할 수 있으므로 그 사이에 적당한 간격이 있어야 합니다.

WP Cron을 비활성화하려면 다음 상수를 삽입하면 됩니다. wp-config.php file:

정의( 'DISABLE_WP_CRON', true );

외부 크론이 실제로 실행되고 있는지 확인하는 것이 중요하며 이를 위한 좋은 플러그인은 다음과 같습니다. 크론 로거.

2. 사후 수정 비활성화 또는 제한

글 수정본은 워드프레스의 모든 글에 대한 모든 변경 사항을 저장하며, 이는 데이터베이스에 누적될 수 있습니다. 다음 상수를 사용하여 편안하게 작업하거나 비활성화할 수 있는 값으로 설정하세요. wp-config.php file:

정의( 'WP_POST_REVISIONS', '0' );

다음을 사용하여 무제한 수정본을 설정할 수도 있습니다. “-1” 플러그인을 사용하여 설정된 시간이 지나면 자동으로 제거되도록 설정할 수 있는데, 이 부분은 나중에 다룰 예정입니다.

3. 트랙백 및 핑백 비활성화하기

핑백은 귀찮고 설치에 불필요한 혼란을 야기합니다. 대시보드의 토론 설정에서 비활성화할 수 있으며 다음 코드를 추가하여 functions.php 파일이나 사용자 정의 뮤 플러그인을 사용하여 셀프 핑백을 비활성화할 수 있습니다:

함수 wpsites_disable_self_pingbacks( &$links ) {
  foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, get_option( 'home' ) ) )
            unset($links[$l]);
}

add_action( 'pre_ping', 'wpsites_disable_self_pingbacks' );

Kinsta에서 제공한 코드 스니펫.

4. 대문자 P 비활성화

워드프레스에는 다음과 같은 단어를 쓸 수 없도록 하는 신기한 필터가 있습니다. 워드프레스 without a capital P, like so: WordPress

다음 기능을 사용하여 제거할 수 있습니다:

remove_filter( 'the_content', 'capital_P_dangit', 11 );
remove_filter( 'the_title', 'capital_P_dangit', 11 );
remove_filter( 'wp_title', 'capital_P_dangit', 11 );
remove_filter( 'comment_text', 'capital_P_dangit', 31 );
remove_filter( 'widget_text_content', 'capital_P_dangit', 11 );

클래식프레스에서 제공한 코드 스니펫.

그리고 다음과 같이 작성하여 기능을 대체할 수 있습니다. 워드프레스 를 올바르게 입력합니다.

5. XML-RPC 비활성화

XML-RPC는 워드프레스에서 대부분 더 이상 사용되지 않는 기능이며 무차별 대입 시도의 잠재적 공격 벡터가 될 수 있으므로 사이트 성능과 더 중요한 보안을 향상시킬 수 있으므로 비활성화하는 것이 좋습니다. 모바일 앱이나 원격 게시 등 특별히 필요한 기능이 아니라면 안전하게 비활성화할 수 있습니다.

Apache, Nginx 또는 PHP를 통해 여러 가지 방법으로 비활성화할 수 있으며, 대부분의 보안 및 로그인 관련 플러그인이 이를 처리합니다. 가장 간단한 방법은 다음에서 제공하는 한 줄짜리 방법을 사용하는 것입니다. 퍼셔블 프레스의 제프 스타:

add_filter('xmlrpc_enabled', '__return_false');

이 문서에서는 XML-RPC가 실제로 로드되는 방법과 비활성화하는 방법에 대해서도 자세히 설명하므로 다음을 권장합니다. 읽기. 또한 X-핑백을 비활성화하는 것이 좋습니다:

// X-핑백 헤더 비활성화
함수 shapeSpace_disable_x_pingback($headers) {

	unset ($headers['X-Pingback']);
	$headers를 반환합니다;

}
add_filter('wp_headers', 'shapeSpace_disable_x_pingback');

Perishable Press에서 제공한 코드 스니펫.

6. 대시 아이콘 비활성화

대시 아이콘은 워드프레스 대시보드에서 사용하는 아이콘 글꼴로, 사용하지 않을 때에도 프론트엔드에 로드됩니다. 다음과 같이 비활성화할 수 있습니다:

// 대시 아이콘 제거
함수 wpdocs_dequeue_dashicon() {
	if (current_user_can( 'update_core' )) {
	    return;
	}
	wp_deregister_style('dashicons');
}
add_action( 'wp_enqueue_scripts', 'wpdocs_dequeue_dashicon' );

Fatlab에서 제공한 코드 스니펫.

7. 이모티콘 비활성화하기

이모티콘은 페이지 크기에 미미한 부하만 추가하지만, 원칙적으로 이모티콘을 제거하기로 결정했습니다.

/**
 * Disable the emoji's
 */
function disable_emojis() {
 remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
 remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
 remove_action( 'wp_print_styles', 'print_emoji_styles' );
 remove_action( 'admin_print_styles', 'print_emoji_styles' ); 
 remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
 remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); 
 remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
 add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
 add_filter( 'wp_resource_hints', 'disable_emojis_remove_dns_prefetch', 10, 2 );
}
add_action( 'init', 'disable_emojis' );

/**
 * Filter function used to remove the tinymce emoji plugin.
 * 
 * @param array $plugins 
 * @return array Difference betwen the two arrays
 */
function disable_emojis_tinymce( $plugins ) {
 if ( is_array( $plugins ) ) {
 return array_diff( $plugins, array( 'wpemoji' ) );
 } else {
 return array();
 }
}

/**
 * Remove emoji CDN hostname from DNS prefetching hints.
 *
 * @param array $urls URLs to print for resource hints.
 * @param string $relation_type The relation type the URLs are printed for.
 * @return array Difference betwen the two arrays.
 */
function disable_emojis_remove_dns_prefetch( $urls, $relation_type ) {
 if ( 'dns-prefetch' == $relation_type ) {
 /** This filter is documented in wp-includes/formatting.php */
 $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' );

$urls = array_diff( $urls, array( $emoji_svg_url ) );
 }

return $urls;
}

Kinsta에서 제공한 코드 스니펫.

8. 임베드 비활성화

자동 임베드도 유용할 수 있지만 더 성능이 뛰어난 몇 가지 대안이 있습니다. 다음을 사용하여 제거하세요:

function disable_embeds_code_init() {

 // Remove the REST API endpoint.
 remove_action( 'rest_api_init', 'wp_oembed_register_route' );

 // Turn off oEmbed auto discovery.
 add_filter( 'embed_oembed_discover', '__return_false' );

 // Don't filter oEmbed results.
 remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

 // Remove oEmbed discovery links.
 remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

 // Remove oEmbed-specific JavaScript from the front-end and back-end.
 remove_action( 'wp_head', 'wp_oembed_add_host_js' );
 add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );

 // Remove all embeds rewrite rules.
 add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

 // Remove filter of the oEmbed result before any HTTP requests are made.
 remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
}

add_action( 'init', 'disable_embeds_code_init', 9999 );

function disable_embeds_tiny_mce_plugin($plugins) {
    return array_diff($plugins, array('wpembed'));
}

function disable_embeds_rewrites($rules) {
    foreach($rules as $rule => $rewrite) {
        if(false !== strpos($rewrite, 'embed=true')) {
            unset($rules[$rule]);
        }
    }
    return $rules;
}

Kinsta에서 제공한 코드 스니펫

9. 심장 박동 제어

하트비트는 글 자동 저장 및 편집 잠금과 같은 중요한 기능을 워드프레스에 제공합니다. 5분 또는 300초로 제한하면 기능을 비활성화하는 것과 비슷한 영향을 미칠 수 있습니다:

함수 wb_set_heartbeat_time_interval($settings) {
 $settings['interval']=300;
 $settings를 반환합니다;
}
add_filter('heartbeat_settings', 'wb_set_heartbeat_time_interval');

이 상수를 사용하여 자동 저장에도 동일한 간격을 적용합니다:

정의( 'AUTOSAVE_INTERVAL', 300 );

SolidWP에서 제공하는 코드 스 니펫

10. 깔끔한 헤더로 다시 시작

워드프레스는 수년 동안 모든 새로운 기술을 수용하려고 노력하면서 많은 것을 축적해왔고, 그 중 일부는 더 이상 사용되지 않거나 거의 사용되지 않게 되었습니다. 하지만 여전히 모든 페이지에서 가장 중요한 위치에 로드됩니다.

이 목록은 완전하고 안전한 목록입니다.

// rsd 링크를 제거합니다.
remove_action( 'wp_head', 'rsd_link' );

// 워드프레스 생성기 태그를 제거합니다.
remove_action( 'wp_head', 'wp_generator' );

// RSS 피드 링크를 제거합니다.
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );

// 윈도우 라이브 라이터 매니페스트 파일에 대한 링크를 제거합니다.
remove_action( 'wp_head', 'wlwmanifest_link' );

// 인접한 글 링크를 제거합니다.
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );

// 글의 워드프레스 쇼트링크를 제거합니다.
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );

WPExplorer에서 제공하는 코드 스니펫

0.5: 워드프레스 개선

1. 플러그인을 두려워하지 마세요

레이빔은 플러그인을 두려워하지 않습니다. 다른 CMS 플랫폼에 비해 워드프레스에 고급 기능을 추가하는 가장 쉬운 방법이기 때문입니다. 사용하는 플러그인의 개수가 문제가 아니라 플러그인의 품질이 문제입니다.

플러그인은 한 가지 기능에 집중해야 하며, 한 가지 기능만 탁월하게 수행하는 것이 이상적입니다. 모든 것을 다 해준다는 '올인원' 플러그인은 종종 부족하고 설치를 복잡하게 만들 수 있으므로 피하세요.

성능과 관련하여 워드프레스의 모든 속도 문제를 즉시 해결할 수 있는 마법의 플러그인은 없습니다. 대신 프론트엔드와 관리자 대시보드에서 속도 저하의 일반적인 원인을 파악하고 개별적으로 해결해야 합니다. 다행히도 몇 가지 일반적인 원인을 파악했습니다.

2. 플러그인이 옵션 자동 로드를 채우지 못하도록 어떤 방식으로든 가르치세요.

이것이 대시보드 성능이 저하되는 가장 큰 이유일 것입니다. 플러그인에는 설정이 있고 빠르게 로드되기를 원하기 때문에 'wp_options' 테이블을 데이터로 채우고 모든 페이지에서 로드되도록 설정합니다. 문제가 되는 플러그인이 비활성화/삭제되어도 데이터가 그대로 남아 있으면 상황이 더 나빠질 수 있습니다.

플러그인 고급 데이터베이스 클리너 를 사용하면 데이터베이스에서 어떤 일이 일어나고 있는지 한눈에 파악할 수 있고 문제를 해결할 수 있는 도구도 제공됩니다. 옵션 탭에는 모든 플러그인 데이터와 기본적으로 자동 로드되는지 여부에 대한 정보가 있습니다. 일반 정리 에 대한 보다 세밀한 제어 기능을 제공합니다. 개정 사항 그리고 자동 초안 작성하드 코딩된 제한을 설정하는 것보다 더 나은 접근 방식입니다.

3. CSS/JS 연결은 더 이상 사용되지 않습니다.

과거에는 파일을 축소하고 결합하는 것이 웹사이트 속도를 높이는 데 필수적이었는데, 특히 Brotli나 Gzip과 같은 효과적인 압축 방법이 나오기 전에는 더욱 그러했습니다. 파일 축소는 여전히 파일 크기를 줄이는 데 도움이 되지만, 웹서버 수준에서 파일을 더 잘 축소하는 고급 압축 기술이 등장하면서 그 중요성이 감소했습니다.

이제 정말 중요한 것은 페이지에 리소스를 로드하는 방법과 리소스가 콘텐츠 표시를 차단하는지 여부입니다. 스크립트나 스타일시트가 페이지 콘텐츠 로딩을 지연시키면 사용자 인식과 검색 엔진 순위에 부정적인 영향을 미칠 수 있습니다. 다음과 같은 플러그인 Debloat 또는 자동 최적화 를 사용하면 자산을 최적화하여 중요한 요소가 먼저 로드되고 덜 중요한 요소는 지연되도록 할 수 있습니다.

4. 이미지 처리는 매우 복잡한 문제입니다.

이미지는 고품질이어야 하며 미래에도 사용할 수 있어야 합니다. 즉, 구형 스마트폰부터 4K 화면까지 다양한 디바이스에서 선명하게 표시될 수 있도록 고해상도로 캡처하고 저장해야 합니다. 하지만 고해상도 이미지는 파일 크기가 커져 웹사이트 로딩 시간이 느려질 수 있습니다. 워드프레스에서는 업로드한 이미지의 사본을 파일 크기가 다른 여러 복사본을 자동으로 생성하므로 동일한 이미지의 여러 버전을 저장할 수 있습니다.

손실 및 무손실 압축은 파일 크기를 크게 줄일 수 있지만 압축된 버전이 모든 사용 사례에 적합하지 않을 수 있고 향후 더 나은 압축 방법이 나타날 수 있으므로 원본 고품질 파일은 여전히 유지해야 합니다.

WebP와 AVIF는 최첨단 압축 형식이지만 채택 여부가 엇갈리고 있으며 기존 형식에 비해 이점이 즉각적으로 명확하지 않습니다. 게다가 검색 엔진은 이러한 최신 형식을 사용하지 않는 웹사이트에 불이익을 줄 수 있다고 밝혔습니다.

플러그인이나 외부 서비스 없이는 이 모든 것을 혼자서 처리할 수 없습니다. 워드프레스에서 사용할 수 있는 모든 옵션을 테스트한 결과, 완벽한 옵션은 없다는 결론에 도달했습니다, EWW 이미지 옵티마이저 가 여전히 최고입니다.

EWW IO는 외부 API 서비스를 사용하여 이미지를 압축하여 서버의 처리 부담을 덜어줍니다. 자체 CDN을 활용하여 각 디바이스에 맞는 정확한 이미지 크기를 제공합니다. 또한 궁극적인 성능 향상을 위해 지원되는 경우 이미지의 WebP/AVIF 버전을 자동으로 제공합니다. 이 플러그인의 프리미엄 버전은 소박하지만 넉넉한 가격에 포함되어 있습니다. Goodies 패키지입니다.

5. 모든 페이지 빌더는 성능에 부담이 됩니다.

구텐베르크, 엘리멘터, 브릭스, 브레이크댄스 등 페이지 빌더가 워드프레스를 더 나은 방향으로 혁신하고 있습니다. 구텐베르크, 블록 테마, FSE 테마는 시작은 거칠었지만 분명 워드프레스의 미래입니다.

Elementor는 워드프레스 커뮤니티 내에서 종종 비판을 받기도 하지만, 그 인기와 강력한 기능은 Wix, Squarespace, Webflow와 같은 플랫폼에 필적하는 수준이며 무료 오픈소스이고 서버 내부에서 다른 플러그인처럼 간단하게 작동합니다.

그러나 클래식 테마 (일반적으로 사용자 지정 메뉴 항목)만으로도 프로젝트에 충분하다면 블록 테마나 페이지 빌더 대신 구텐베르크를 사용하는 것이 좋습니다. 블록 기능을 전혀 사용할 필요가 없다면 구텐베르크를 비활성화하는 것이 좋습니다.

클래식 편집기를 복원하고 전역 또는 특정 사용자를 위해 복원하는 방법은 여러 가지가 있지만 가장 좋은 방법은 플러그인입니다. 구텐베르크 비활성화.

6. WooCommerce 및 해당 플러그인은 성능을 저하시킵니다.

워드프레스에 전자상거래 솔루션을 설치하면 필연적으로 복잡성이 추가되고 전반적인 성능에 영향을 미칩니다. 온라인 스토어를 만드는 데 가장 많이 사용되는 플러그인인 WooCommerce는 초기 활성화 이후 실제 비즈니스 요구 사항을 충족하기 위해 추가 설정이 필요합니다. 이러한 기능 격차를 해소하기 위해 스토어 소유자는 플러그인과 사용자 정의 코드에 의존해야 하며, 이로 인해 사이트 속도가 더욱 느려질 수 있습니다.

이러한 성능 영향은 스토어가 성장하고 더 많은 트래픽과 주문을 받으면 특히 두드러지게 나타납니다. 이 글에서 다루는 최적화 기술이 도움이 될 수 있지만, 적절한 성능을 유지하기 위해 서버 리소스를 확장해야 하는 시점이 있습니다. WooCommerce로 온라인 스토어를 강화할 계획이라면 이 시나리오를 염두에 두는 것이 중요합니다.

7. 항상 경계하기

워드프레스 사이트는 시간이 지남에 따라 복잡해질 수 있으므로 정기적인 성능 점검이 중요합니다. 사이트를 원활하게 운영하려면 다음과 같은 플러그인을 사용하세요. 쿼리 모니터 를 사용하여 페이지 로드 시간 및 메모리 사용량과 같은 사이트의 성능 메트릭을 정기적으로 확인합니다. 또한 WP 디버깅 를 사용하여 PHP 오류나 충돌을 조사하고 해결합니다.

쿼리 모니터는 성능 모니터링에 중점을 두지만 WP 디버깅은 주로 오류 로깅 및 문제 해결을 위한 도구입니다. 두 도구를 모두 사용하면 사이트의 상태를 유지 관리하기 위한 포괄적인 접근 방식을 제공합니다.

1. DNS: Cloudflare

이 모든 것은 DNS 관리에서 시작되며, 가장 빠르고 안정적인 제공업체는 단연 Cloudflare입니다. 사용자가 사이트에 접속할 때 가장 먼저 접하게 되는 모든 접속 앞에 위치하므로 매우 빨라야 합니다.

다음과 같은 기본 설정이 아닌 설정을 적용합니다:

속도(최적화)

  • 스피드 브레인: 켜짐
  • 로켓 로더™: 켜짐
  • 워드프레스 자동 플랫폼 최적화(APO): 켜짐
  • 0-RTT 연결 재개: 켜짐

캐싱

  • 브라우저 캐시 TTL: 기존 헤더 존중하기
  • 크롤러 힌트: 켜짐
  • 계층형 캐싱: 계층형 캐시 토폴로지

2. 하드웨어

워드프레스를 실행하려면 좋은 사양이 필요하며, 가급적이면 레이빔처럼 각 설치마다 단일 머신 또는 VPS를 사용하는 것이 좋습니다. 일반 호스팅 회사나 "관리형 워드프레스 호스팅"은 사이트를 같은 서버나 컨테이너화된 환경에 수백 개의 다른 사이트와 함께 묶어 놓습니다. 이는 일반적으로 비용을 절감하고 확장성을 쉽게 제공하기 위해 수행되지만 사이트 성능 및 보안 문제에 노출될 수 있습니다.

모든 서버는 Contabo에서 실행되며 뛰어난 성능을 보장하는 인상적인 하드웨어를 갖추고 있습니다:

  • 모든 AMD EPYC CPU;
  • NMVe SSD 스토리지만 해당됩니다;
  • 지연 시간을 최소화하는 9개 지역의 12개 데이터센터;
  • 32TB 트래픽(호주와 일본의 경우 10TB).

3. 서버: 우분투 + 워드옵스

우분투 22.04는 기본 설치에 가장 선호하는 Linux 배포판입니다. 서버에서 널리 사용되고 있으며 수년에 걸쳐 매우 안정적인 것으로 입증되었으며 강력한 커뮤니티를 자랑합니다.

또한, 워드프레스닷컴은 서버와 워드프레스 사이트를 관리하기 위해 WordOps를 활용합니다. 이 도구는 성능 기본값과 함께 제공되며, 튜닝된 버전의 MariaDB, PHP, Nginx가 포함되어 있습니다.

안전 장치 스왑 이상의 2GB 사용 가능한 RAM에 비례하여 추가되며, 특히 MySQL의 고비용 작업으로 인해 드물게 서버가 다운되는 것을 방지하기 위해 추가됩니다.

4. 캐시:

저희 캐싱 시스템은 계층형 아키텍처를 사용하여 각 캐시 계층이 자체적으로 특화된 최적화를 적용합니다. 이러한 계층적 접근 방식을 통해 캐싱 시스템은 상위 캐시가 하위 캐시의 기능을 기반으로 성능을 점진적으로 향상시킬 수 있습니다:

  • OPcache: Zend OPcache는 PHP 5.5부터 기본적으로 활성화되어 있습니다. 자세히 알아보기 이 기사는 WP 로켓에서 제공했습니다.;
  • 개체 캐시: 모든 설치에서 기본적으로 Redis를 사용하도록 설정하며, 무료 버전의 Redis 객체 캐시 플러그인. 웨토피가 제공하는 기사 워드프레스에서 Redis를 사용할 때 현실적인 기대치에 대해 설명합니다;
  • 페이지 캐시: WordOps는 Redis가 활성화될 때마다 Nginx로 빌드된 Redis 페이지 캐시를 제공합니다;
  • 브라우저 캐시: Nginx의 훌륭한 브라우저 캐시 기본값은 WordOps에 의해 기본적으로 패키지로 제공되며, 여기에는 Brotli 압축도 포함되어 있습니다;
  • 엣지 캐시: 유료 서비스인 Cloudflare APO는 굿즈 패키지의 일부로 모든 요금제에 포함되어 있으며, 페이지의 정적 복사본을 만들어 모든 영역으로 전송하는 워드프레스용 페이지와 엣지 캐시의 하이브리드 역할을 합니다. Nginx의 브라우저 캐시를 완전히 재정의하지는 않지만 헤더를 수정할 수 있다는 점에 유의하세요. 이에 대한 가장 좋은 글은 브라이언 리가 제공한 사진.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다