Ajax prend 10x aussi longtemps qu'il devrait / pourrait

48

Je viens de frapper mon premier problème sérieux avec WordPress et pour quelqu'un qui aime Ajax, c'est un gros problème.

J'ai une demande Ajax qui prend 1,5 seconde à se terminer lorsque j'utilise l'API Ajax.

Si je prends le même code exact et l'exécute avec un script personnalisé (pas de WordPress), la demande Ajax ne prend que 150 millisecondes. Ce n'est pas une exagération

Si vous regardez le tout premier commentaire de enlace et la conversation qui suit, vous verrez que cette lenteur est due au fait que, à votre demande, tout WP est chargé ...

J'espère qu'il existe une solution permettant de faire des requêtes Ajax sans charger tout WordPress.

Quelles sont vos expériences avec l’accélération des requêtes Ajax avec WordPress?

    
posée Mike 09.02.2012 - 20:45

2 réponses

53

Eh oui, c’est un problème désagréable: pour disposer d’un environnement WordPress complet, vous devez passer un temps considérable à le charger.

J'ai eu besoin de beaucoup plus de performances (pour une fonction de recherche incrémentielle très dynamique) pour le travail. J'ai obtenu les résultats suivants:

  1. Fichier personnalisé en tant que gestionnaire Ajax.
  2. Constante SHORTINIT pour une charge de base limitée dans WP.
  3. Parties du noyau très sélectivement chargées, uniquement celles nécessaires à la tâche.

Cela fournit un environnement très limité, mais les performances sont nettement meilleures et le degré de compatibilité raisonnable avec WP (à partir de $wpdb ) est conservé.

Voici mon fichier chargeur, pas joli mais qui répond à des besoins spécifiques:

<?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
    
réponse donnée Rarst 09.02.2012 - 21:12
0

J'ai trouvé ça et ça a accéléré mon 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' );
    
réponse donnée Lisa Daugherty Thompson 13.07.2014 - 15:20

Lire d'autres questions sur les étiquettes