Nguyên nhân và cách khắc phục đăng sản phẩm Woocommerce bị chậm

0
Share

Có vài nguyên nhân phổ biến khiến việc sao chép (duplicate) rồi publish một sản phẩm WooCommerce bị chậm — thường là do server/WordPress phải thực hiện nhiều công việc nặng mỗi lần “lưu / xuất bản” sản phẩm. Dưới đây mình liệt kê các nguyên nhân khả dĩ theo thứ tự ưu tiên, kèm cách kiểm tra + cách sửa cụ thể để bạn triển khai ngay.

Nguyên nhân thường gặp (và cách kiểm tra / khắc phục nhanh)

  1. Sản phẩm có nhiều biến thể / thuộc tính / biến thể cực lớn
    • Kiểm tra: sản phẩm biến thể > 50-100 mục thì lưu/publish rất nặng (tạo nhiều postmeta).
    • Khắc phục: tạm thời test với 1 bản copy có ít biến thể; nếu đúng thì suy nghĩ tối ưu biến thể (dùng biến thể đơn giản hơn hoặc sản phẩm con riêng).
  2. Rất nhiều postmeta cho sản phẩm (meta bùng nổ)
    • Kiểm tra nhanh bằng WP-CLI / MySQL: wp db query "SELECT COUNT(*) AS cnt FROM wp_postmeta WHERE post_id = 12345;" (thay 12345 bằng ID sản phẩm).
    • Nếu count rất lớn (> vài nghìn) → đây là vấn đề. Kiểm tra plugin nào thêm meta (ví dụ plugin tính năng, analytics, custom fields).
    • Khắc phục: xóa meta dư thừa, hoặc refactor plugin để không lưu quá nhiều meta.
  3. Regenerate / tạo thumbnails ảnh (nhiều kích thước) khi publish
    • Nguyên nhân: khi copy/publish, WP có thể gọi process tạo thumbnail cho từng kích thước (theme + plugin thêm kích thước) — với file ảnh lớn hoặc nhiều ảnh thì chậm.
    • Kiểm tra: xem log PHP/nginx, sẽ thấy wp_generate_attachment_metadata chạy.
    • Khắc phục tạm thời (không sinh thumbnails khi test):
    • Bên lâu dài: giảm số image sizes, dùng background image processing (plugin regenerate thumbnails queue), offload ảnh lên CDN/S3.
add_filter('intermediate_image_sizes_advanced', '__return_empty_array'); (đặt tạm vào theme/plugin; nhớ remove sau test).
  1. Plugin gây delay khi hook vào save_post / transition_post_status / wp_insert_post
    • Kiểm tra: tắt toàn bộ plugin (ngoại trừ WooCommerce), thử sao chép/publish — nếu nhanh trở lại thì bật lần lượt để tìm plugin gây chậm.
    • Khắc phục: sửa plugin đó hoặc tách công việc nặng sang background (wp_cron/asynchronous).
  2. Webhooks / API gọi ra ngoài khi publish (Google Merchant, Zalo, Facebook, inventory sync, GA, ERP)
    • Kiểm tra: xem plugin có thiết lập webhook hay gửi request khi publish không; kiểm tra access log/ ứng dụng log.
    • Khắc phục: chuyển sang gửi webhook bất đồng bộ (queue) hoặc disable tạm.
  3. WP-Cron / cron job đang chạy nặng hoặc bị block
    • Kiểm tra: bật DISABLE_WP_CRON và chạy cron thủ công bằng WP-CLI để xem.
    • Khắc phục: chuyển WP-Cron sang cron hệ thống, tối ưu cron tasks.
  4. Database chậm / thiếu index / table bị lock
    • Kiểm tra: xem SHOW PROCESSLIST; khi publish để xem query nào chậm, hoặc bật slow_query_log của MySQL.
    • Khắc phục: tối ưu query, thêm index, cấu hình MySQL, tăng RAM, hoặc tối ưu bảng wp_postmeta (partition/cleanup).
  5. Server thiếu tài nguyên (CPU, RAM) — PHP-FPM timeout / swap thrashing
    • Kiểm tra: khi publish chạy top/htop hoặc dùng monitoring; check logs PHP-FPM/nginx.
    • Khắc phục: tăng memory_limit, tăng PHP workers, nâng cấp VPS, hoặc tối ưu plugin để ít tiêu tốn.
  6. Object cache / Redis issues
    • Nếu object cache cấu hình sai có thể gây block khi set/get cache. Kiểm tra connection Redis, plugin object-cache.
    • Khắc phục: kiểm tra plugin Redis, logs, thử tạm disable object cache.
  7. Revisions/autosave quá nhiều / size post content lớn
    • Kiểm tra số revisions: SELECT COUNT(*) FROM wp_posts WHERE post_parent = 12345 AND post_type = 'revision';
    • Khắc phục: giới hạn revisions, xóa revisions cũ.

Checklist để debug theo bước (thực thi ngay)

  1. Bật debug để biết rõ
    file wp-config.php: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); // check wp-content/debug.log define('WP_DEBUG_DISPLAY', false);
  2. Test nhanh bằng tắt plugin
    • Tắt mọi plugin ngoại trừ WooCommerce + theme mặc định (Twenty*). Nếu nhanh → bật từng plugin để tìm thủ phạm.
  3. Kiểm tra process khi publish
    • Dùng tail -f /var/log/nginx/error.log + tail -f wp-content/debug.log khi bạn click Publish để thấy lỗi/slow function.
  4. Kiểm tra số meta (WP-CLI): wp db query "SELECT COUNT(*) cnt FROM wp_postmeta WHERE post_id = PRODUCT_ID;"
  5. Kiểm tra HTTP calls (nếu nghi có webhook): xem access log hoặc cài plugin Query Monitor (chạy trên môi trường staging vì Query Monitor nặng).
  6. Kiểm tra ảnh: thử vô media, mở ảnh đó — nếu ảnh rất lớn (20MB+) thì đó là nguyên nhân.
  7. Chạy slow query log MySQL nếu cần (server-level).

Một vài lệnh / code hữu dụng bạn có thể chạy ngay

  • Xem các hook chậm khi publish (tạm log thời gian):
add_action('transition_post_status', function($new, $old, $post){
    if($post->post_type !== 'product') return;
    $log = sprintf("[%s] transition_post_status %s -> %s for %d\n", date('c'), $old, $new, $post->ID);
    error_log($log);
}, 10, 3);
  • Xóa transient toàn bộ (test):
wp transient delete --all
  • Kiểm tra hàng đợi cron:
wp cron event list

Biện pháp tối ưu dài hạn (khi đã xác định nguyên nhân)

  • Chạy thumbnail generation asynchronously (plugin queue hoặc background worker).
  • Offload media lên S3/Cloudflare R2 + CDN.
  • Dùng object cache (Redis) đúng cấu hình.
  • Giảm số image size do theme/plugin đăng ký.
  • Refactor plugin / custom code: thay vì làm công việc nặng synchronous trên save_post → push vào queue (Action Scheduler, wp_cron hệ thống hoặc RabbitMQ). WooCommerce khuyến nghị dùng Action Scheduler cho tasks nền.
  • Tối ưu database (index, cleanup postmeta, optimize tables).
Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contacts

4096 N Highland St, Arlington
VA 32101, USA
info@thype.com
800 1234 56 78

Socials

© 2018 Thype . All rights reserved.