Ajax olması gerektiği / alabileceği kadar 10x alır


50

WordPress ile ilgili ilk ciddi sorunumu yeni açtım ve Ajax'tan hoşlanan biri için bu bir aptallık.

Ajax API kullanırken 1,5 saniye süren bir Ajax isteğim var.

Aynı kodu alıp özel bir komut dosyasıyla çalıştırırsam (WordPress yok), Ajax talebi yalnızca 150 milisaniye alır. Bu abartı değil

Http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/ adresinin ilk yorumuna bakarsanız ve takip ettiğiniz konuşmaya bu yavaşlamanın neden olduğunu göreceksiniz. İsteğiniz üzerine, WP'nin tamamı yüklenir.

Tüm WordPress'i yüklemeden Ajax isteklerinin yapılmasını mümkün kılacak bir çözüm olduğunu umuyorum.

WordPress ile Ajax taleplerini hızlandırmak konusundaki deneyimleriniz nelerdir?


3
Popüler önbellek eklentilerinin bu durumu örtbas edip etmediğini merak ediyorum.
Raphael,

@Raphael, ben de öyle düşündüm, ama bundan bahsetmedim. Onlar yaparlarsa, BÜYÜK olurdu
Mike

Yanıtlar:


57

Evet, bu tam bir WordPress ortamına sahip olmak için onu yüklemek için oldukça fazla zaman harcamanız gereken kötü bir konudur.

İş için çok daha iyi performansa ihtiyacım vardı (çok dinamik artan arama özelliği için):

  1. Ajax işleyicisi olarak özel dosya.
  2. Sınırlı WP çekirdek yükü için SHORTINIT sabiti .
  3. Çok görevli yüklü çekirdek parçaları, yalnızca görev için gerekli olanlar.

Bu, çok sınırlı bir ortam sağlar, ancak performans daha iyi bir yoldur ve WP (başlangıçtan itibaren $wpdb) ile makul derecede uyumluluk korunur.

İşte benim yükleyici dosyam güzel değil ama belirli ihtiyaçlar için işe yarıyor:

<?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
SHORTINIT sabiti ile ne kastediyorsunuz? Örnekler verebilir misiniz İsteğin ihtiyacına bağlı olarak değişen derecelerde WP yüklü kendi işleyicilerimi kurmam gerektiğini düşünüyorum, ancak sizin yarattığınız bazı örnekleri görmek istiyorum.
Mike,

6
@Mike yaygın olarak bilinmese de, kavram olarak gerçekten basit - eğer SHORTINITsabit olarak ayarlanmışsa WP çekirdeğin çoğunu yüklemez (API / işlevlerin çoğu, eklentiler yok, tema yok). Cevaplamak için bazı kodlar ekleyeceğim.
Rarst

1
Bu iyi görünüyor. Sadece kullanmak zorunda olduğumuz gerçeğini sevmiyorum '../../../../wp-load.php'; Bu oldukça özel kılan. Ayrıca, "ihtiyacım olan" kaynakları gerçekten de çekmenin ne kadar kolay olduğu konusunda endişeliyim, b / c deneyimimden WordPress çok modüler değil.
Mike,

@Mike doğru, ancak WP hakkında hiçbir fikri olmayan uç noktadan çok daha iyi konularla bile. Bu biraz daha geliştirilebilir (ve gerekir) ama şu anda benim için acil bir iş değil.
Rarst

Wp-load.php dosyasının konumunu WordPress içinden saptamak için herhangi bir yöntem var mı? Örneğin, eklenti yükünde içinde değişken olarak ayarlanmış yolu olan statik bir dosya yazabilir miyim, sonra bu dosyayı tek başına Ajax yanıt dosyasına dahil edebilir miyim?
Aramızda

0

Bunu buldum ve ajax'ımı hızlandırdı.

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' );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.