Ajax mất 10 lần miễn là nó nên / có thể


50

Tôi vừa gặp vấn đề nghiêm trọng đầu tiên của mình với WordPress và đối với một người thích Ajax thì đây là một vấn đề lớn.

Tôi có một yêu cầu Ajax mất 1,5 giây để hoàn thành trong khi sử dụng API Ajax.

Nếu tôi lấy cùng một mã chính xác và chạy nó với một tập lệnh tùy chỉnh (không có WordPress), yêu cầu Ajax chỉ mất 150 mili giây. Đây không phải là một cường điệu

Nếu bạn nhìn vào bình luận đầu tiên của http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/ và cuộc trò chuyện tiếp theo bạn sẽ thấy rằng sự chậm chạp này được gây ra bởi thực tế là theo yêu cầu của bạn, tất cả WP đã được tải ...

Tôi hy vọng rằng có một giải pháp ngoài kia sẽ giúp thực hiện các yêu cầu Ajax trong khi không tải tất cả WordPress.

Kinh nghiệm của bạn khi tăng tốc các yêu cầu Ajax với WordPress là gì?


3
Tôi tự hỏi các plugin bộ nhớ đệm phổ biến bao gồm tình huống này.
Raphael

@Raphael, tôi cũng nghĩ về điều đó, nhưng chưa thấy đề cập đến nó. Đó sẽ là TUYỆT VỜI nếu họ làm thế
Mike

Câu trả lời:


57

Đúng, đây là một vấn đề khó chịu khi có môi trường WordPress đầy đủ, bạn cần dành thời gian đáng kể để tải nó.

Tôi cần hiệu suất tốt hơn nhiều (đối với tính năng tìm kiếm gia tăng rất năng động) cho công việc và những gì tôi đã làm là:

  1. Tệp tùy chỉnh như trình xử lý Ajax.
  2. Hằng số SHORTINIT cho tải trọng lõi WP giới hạn.
  3. Các phần lõi được tải rất chọn lọc, chỉ những phần cần thiết cho tác vụ.

Điều này cung cấp môi trường rất hạn chế, nhưng hiệu suất là cách tốt hơn và mức độ tương thích hợp lý với WP (bắt đầu bằng $wpdb) được giữ lại.

Đây là bắt đầu tập tin trình tải của tôi, không đẹp nhưng hoạt động cho các nhu cầu cụ thể:

<?php

ini_set('html_errors', 0);
define('SHORTINIT', true);

require '../../../../wp-load.php';
require( ABSPATH . WPINC . '/formatting.php' );
require( ABSPATH . WPINC . '/meta.php' );
require( ABSPATH . WPINC . '/post.php' );
wp_plugin_directory_constants();

// stuff goes here

1
Bạn có ý nghĩa gì bởi contant SHORTINIT? Bạn có thể cung cấp ví dụ? Tôi hình dung rằng tôi sẽ cần thiết lập trình xử lý của riêng mình với các mức độ WP được tải khác nhau tùy thuộc vào nhu cầu của yêu cầu, nhưng tôi muốn xem một số ví dụ bạn đã tạo.
Mike

6
@ Giống như nó không được biết đến rộng rãi nhưng thực sự đơn giản trong khái niệm - nếu đặt SHORTINIThằng số, WP sẽ không tải hầu hết lõi (không có hầu hết các API / chức năng, không có plugin, không có chủ đề). Tôi sẽ thêm một số mã để trả lời.
Rarst

1
Có vẻ ổn. Tôi chỉ không thích thực tế là chúng ta phải sử dụng yêu cầu '../../../../wp-load.php'; Điều đó làm cho điều này khá tùy chỉnh. Tôi cũng lo lắng việc thực sự dễ dàng lấy được tài nguyên mà bạn "cần" như thế nào, từ kinh nghiệm của tôi WordPress không phải là mô-đun.
Mike

@ Giống như đúng, nhưng ngay cả với các vấn đề, nó vẫn tốt hơn nhiều so với điểm cuối không có chút manh mối nào về WP. Điều này có thể (và nên) được cải thiện thêm một số nhưng nó không phải là nhiệm vụ cấp bách đối với tôi vào lúc này.
Rarst

Có phương pháp nào để phát hiện vị trí của wp-load.php từ bên trong WordPress không? Ví dụ: tôi có thể viết một tệp tĩnh với đường dẫn được đặt làm biến trong nó khi tải plugin không, sau đó đưa tệp đó vào tệp phản hồi Ajax độc lập?
hereswhatidid

0

Tôi tìm thấy cái này và nó tăng tốc ajax của tôi.

function my_deregister_heartbeat() {
    global $pagenow;

    if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
         wp_deregister_script('heartbeat');
         wp_register_script('heartbeat', false);
     }
}
add_action( 'admin_enqueue_scripts', 'my_deregister_heartbeat' );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.