WordPress를 최적화하면서 얻은 주요 교훈(고객 성공을 위해)

게시 됨: 2022-09-15
목차 숨기기
1. WordCamp Mumbai에서 연설하게 된 동기는 무엇입니까?
2. 나를 잠 못 이루는 세 가지 문제 (With Solutions & Lessons Learned From them)
2.1. 페이지 로드 시간을 3분에서 밀리초로 단축…
2.1.1. 문제
2.1.2. 해결책
2.1.3. 솔루션 향상
2.2. 어떻게 시간 초과 오류가 플러그인의 베스트 셀러 기능이 되었습니까?
2.2.1. 문제
2.2.2. 해결책
2.2.3. 솔루션 향상
2.3. 공유 호스팅 환경에서 어떻게 플러그인을 다시 작성해야 합니까?
2.3.1. 문제
2.3.2. 해결책
3. 수업 요약
4. 당신의 선택은 무엇입니까?

클라우드 나인 순간이 마지막으로 언제였습니까?

색색으로 학교를 통과.. 또는 여자 친구/남자 친구가 당신의 제안을 수락했을 때?

나는 2주 전에 9분 동안 구름이 있었다! 저는 인도 최대의 WordCamp인 WordCamp Mumbai 2017에서 연설하고 있었습니다.

주제는 내 마음에 가까웠고 내가 매일 다루는 주제였습니다. 고객 성공을 위해 WordPress를 최적화하는 과정에서 얻은 교훈입니다.

큰 WordPress 데이터베이스를 다룰 때 직면한 문제와 해결 방법에 관한 것입니다.

WordCamp Mumbai에서 연설하게 된 동기는 무엇입니까?

WordPress 플러그인 개발은 훌륭한 학습 경험입니다. 훌륭한 프레임워크를 확장하고, 고객의 문제를 해결하는 코드 작성에 집중하고, 훌륭한 팀원과 함께 작업할 수 있습니다.

StoreApps에서 개발자는 코드를 작성할 뿐만 아니라 고객을 지원합니다. 고객 질문을 해결하면서 가장 큰 교훈을 얻었습니다.

그게 제 일상이고 매우 흥미진진합니다.

하지만 나에게 더 흥미로운 것이 무엇인지 아십니까? 대규모 데이터베이스 작업 및 복잡한 데이터베이스 문제 해결!

우리 플러그인은 35000명 이상의 사용자가 사용하고 있습니다. 그리고 대규모 WooCommerce 매장과 인기 있는 WordPress 사이트에서 작업하는 데 많은 어려움을 겪었습니다.

덕분에 저는 이러한 어려움을 해결할 수 있었고 많은 것을 배웠습니다.

하지만 저처럼 WordPress 및 WooCommerce에서 작업하는 유사한 문제에 직면하는 수백 명의 다른 개발자가 있을 것입니다.

그래서 나는 내 교훈을 다른 사람들과 나누기로 결정했습니다.

그리고 인도에서 가장 큰 WordCamp에서 연설할 수 있는 기회보다 더 좋은 플랫폼이 어디 있겠습니까!

나에게 잠 못 이루는 세 가지 문제 (With Solutions & Lessons Learned From them)

마지막으로 제가 말씀드린 세 가지 문제가 있습니다. 그럼 하나씩 시작하겠습니다.

페이지 로드 시간을 3분에서 밀리초로 단축…

문제

Smart Coupons 플러그인을 사용하여 상점의 중요한 페이지(예: 장바구니, 결제 및 내 계정 페이지)에 쿠폰을 표시하는 간단한 기능으로 인해 결제 프로세스가 중단되는 상황에 직면했습니다.

Smart Coupons 는 WooCommerce 스토어의 쿠폰 및 상품권을 대량으로 생성 및 처리하기 위한 플러그인입니다.

해결책

이제 WP 쿼리를 사용하면 특정 사용자에게 사용 가능한 쿠폰을 표시하기 위해 여러 메타 조건을 평가해야 하므로 여러 JOIN 이 발생합니다.

따라서 데이터베이스를 쿼리하는 이상적인 방법(예: WP Query)을 사용하는 대신 사용자 지정 SQL 쿼리작성 했습니다.

워드프레스 최적화
스마트 쿠폰 이전 코드

또한 사용자 정의 쿼리에서 내가 한 일은 다음과 같습니다.

  • 단일 MySQL 쿼리에서 모든 메타 조건을 확인하는 대신 첫 번째 메타 조건 을 간단히 평가했습니다.
  • 그 후 옵션 테이블에 쉼표로 구분된 post_ids(쿠폰 ID) 목록을 저장했습니다.
  • 그런 다음 다른 메타 조건 각각을 평가하여 동일한 post_id 집합을 축소하여 매핑합니다.

특정 사용자에 대해 표시해야 하는 최종 post_id 세트를 얻을 때까지 이 작업을 수행했습니다.

워드프레스 최적화
스마트 쿠폰 새로운 코드

솔루션 향상

이것은 페이지 로드 문제를 해결했습니다. 그러나 친구가 제안한 대로 페이지 로드를 밀리초 미만으로 유지하려면 문제를 재정의해야 했습니다.

사용자가 사용할 수 있는 모든 쿠폰을 표시하는 대신
장바구니 및 결제 페이지에서 사용자에게 표시되는 쿠폰 수에 제한을 설정했습니다 .

어떻게 시간 초과 오류가 플러그인의 베스트 셀러 기능이 되었습니까?

문제

매우 거대한 데이터베이스 업데이트를 처리하기 위해 핵심 WordPress 기능을 사용하면 엄청난 오버헤드가 될 수 있는 사용자 지정 쿼리를 작성했습니다.

예: 매장에 있는 모든 제품의 가격을 40% 인하해야 하는 경우 '가격', '40% 인하'를 선택하고 업데이트 버튼을 누르기만 하면 됩니다. 이것은 WooCommerce 스토어의 대량 업데이트를 더 쉽게 하도록 설계된 플러그인 Smart Manager를 사용하여 쉽게 가능합니다.

그러나 일괄 업데이트 프로세스가 중단되고 누군가가 한 번에 1k 제품 또는 전체 상점을 업데이트 하려고 할 때마다 시간 초과 오류가 발생하기 시작했습니다.

처음에는 쿼리 최적화를 살펴보기 시작했지만 도움이 되지 않았습니다.

내 상황은 Takeshi's Castle 참가자와 비슷했습니다. 아무리 애를 써도 계속 물에 빠졌다.

워드프레스 최적화

해결책

때로는 문제에서 벗어나 정확한 원인을 찾기 위해 문제의 조감도를 취해야 한다고 합니다 .

나는 똑같이했고 실제 문제는
쿼리 수준이 아니라 요청 수준 입니다.

그래서 내가 한 것은 모든 업데이트를 수행하는 단일 요청 대신 더 작은 업데이트 배치를 수행하는 여러 개의 연속적인 AJAX 호출 로 나누었고 시간 초과 오류를 완전히 제거했습니다.

워드프레스 최적화
Smart Manager 일괄 업데이트 Ajax 요청

솔루션 향상

이제 단일 요청을 여러 개의 더 작은 AJAX 요청으로 나누는 이 접근 방식은 시간 초과 오류를 해결할 뿐만 아니라 일괄 업데이트 UX를 개선했습니다 .

이제 매장 관리자는 업데이트 진행 상황에 대해 업데이트되어 제품에 대한 자신감이 높아졌습니다.

또한 동일한 접근 방식을 통해 Smart Manager는 모든 모양과 크기의 WooCommerce 스토어에 대한 일괄 업데이트를 처리할 수 있었고 Smart Manager는 StoreApps의 최고 판매 플러그인 중 하나가 되었습니다.

공유 호스팅 환경에서 어떻게 플러그인을 다시 작성해야 합니까?

문제

모든 보고 플러그인의 경우 정확하고 빠른 통계 보고를 제공하는 것이 매우 중요합니다. 이제 보고 통계를 얻으려면 2개의 주요 WordPress 테이블(예: 게시물 및 포스트메타)의 조인 과 관련된 여러 쿼리가 필요했습니다.

워드프레스 최적화
WordPress 게시물 Postmeta ERD

위에서 이미 보았듯이 JOIN은 너무 비쌉니다 .

Smart Reporter(WoCommerce용 보고 솔루션)에서는 단일 페이지 보기 및 페이지 로드 시에도 20가지 다른 보고 통계를 표시했습니다.

해결책

그래서 나는 대부분의 보고 솔루션이 따르는 것과 동일한 접근 방식을 따랐습니다. 요약 테이블, 즉 평면 구조의 사용자 정의 테이블을 생성 하는 것이었습니다.

이 테이블에는 플러그인에 필요한 모든 데이터의 요약이 포함되어 있으므로 조인 사용을 제거하고 페이지 로드 시간을 개선합니다.

워드프레스 최적화
스마트 리포터 요약표

또한 이러한 요약 테이블을 업데이트된 상태로 유지하기 위해 WordPress 작업 및 필터를 사용했습니다.

수업 요약

  • 가능한 한 모범 사례를 따르십시오.
  • 루프에 쿼리 없음
  • 크고 복잡한 조인 피하기
  • PHP 수준보다 MySQL 수준에서 더 많은 작업 수행
  • 코드에 대해 자세히 알아보기
  • 요약 / 사용자 정의 / 임시 테이블
  • UX에 대한 관심 – 응답성, 알림…
  • 올바른 문제를 해결하고 있습니까?

당신의 선택은 무엇입니까?

나는 당신이 몇 가지 큰 문제를 처리하고 그것에 대한 해결책을 찾았을 것이라고 확신합니다. 아래 의견 섹션에서 이에 대해 알려주십시오. 그것은 독자들에게 정말로 가치가 있을 것입니다.