L'Ajax impiega 10 volte il tempo che dovrebbe / potrebbe


50

Ho appena riscontrato il mio primo serio problema con WordPress e per qualcuno a cui piace l'Ajax è un grosso problema.

Ho una richiesta Ajax che impiega 1,5 secondi per essere completata durante l'utilizzo dell'API Ajax.

Se prendo lo stesso codice esatto e lo eseguo con uno script personalizzato (senza WordPress), la richiesta Ajax richiede solo 150 millisecondi. Questa non è un'esagerazione

Se guardi il primo commento di http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/ e la conversazione che segue vedrai che questa lentezza è causata dal fatto che su tua richiesta, tutto il WP è caricato ...

Spero che esista una soluzione che permetta di effettuare richieste Ajax senza caricare tutto WordPress.

Quali sono le tue esperienze con l'accelerazione delle richieste Ajax con WordPress?


3
Mi chiedo se i plugin di cache popolari coprano questa situazione.
Raffaello,

@Raphael, ci ho pensato anche io, ma non ne ho parlato. Sarebbe FANTASTICO se lo facessero
Mike

Risposte:


57

Sì, questo è un problema brutto che per avere un ambiente WordPress completo devi impiegare molto tempo a caricarlo.

Ho bisogno di prestazioni molto migliori (per funzionalità di ricerca incrementale molto dinamica) per il lavoro e quello che ho seguito è:

  1. File personalizzato come gestore Ajax.
  2. Costante SHORTINIT per carico core WP limitato.
  3. Parti del core caricate in modo molto selettivo, solo quelle necessarie per l'attività.

Ciò fornisce un ambiente molto limitato, ma le prestazioni sono decisamente migliori e $wpdbviene mantenuto un ragionevole grado di compatibilità con WP (a partire da ).

Ecco il mio file di caricamento, non carino ma funziona per esigenze specifiche:

<?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
Cosa intendi per contendente SHORTINIT? Potete fornire esempi? Immagino che dovrò impostare i miei gestori con vari gradi di WP caricati a seconda della necessità della richiesta, ma vorrei vedere alcuni esempi che hai creato.
Mike,

6
@Mike non è ampiamente conosciuto ma molto semplice nel concetto - se la SHORTINITcostante è impostata, WP non carica la maggior parte del core (nessuna maggior parte delle API / funzioni, nessun plugin, nessun tema). Aggiungerò del codice per rispondere.
Rarst

1
Sembra ok Non mi piace il fatto che dobbiamo usare richiedono '../../../../wp-load.php'; questo lo rende piuttosto personalizzato. Mi preoccupo anche di quanto sia facile estrarre effettivamente le risorse di cui "hai bisogno", b / c dalla mia esperienza WordPress non è molto modulare.
Mike,

@Mike corretto, ma anche con problemi è molto meglio dell'endpoint che non ha idea di WP. Questo può (e dovrebbe) essere migliorato ancora un po ', ma non è un compito urgente per me al momento.
Rarst

Esistono metodi per rilevare la posizione di wp-load.php all'interno di WordPress? Ad esempio, posso scrivere un file statico con il percorso impostato come variabile al suo interno al caricamento del plug-in, quindi includere quel file nel file di risposta Ajax autonomo?
hereswhatidid,

0

Ho trovato questo e ha accelerato il mio Ajax.

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' );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.