web-dev-qa-db-fra.com

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

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

J'ai une demande Ajax qui prend 1,5 seconde à se terminer tout en utilisant 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. Ceci n'est pas une exagération

Si vous regardez le tout premier commentaire de http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/ et que vous constaterez que la conversation est la suivante: 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?

50
Mike

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

J'ai eu besoin de beaucoup plus de performances (pour une fonctionnalité de recherche incrémentielle très dynamique) pour le travail et je suis allé avec est:

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

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

Voici mon fichier de chargement, 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
56
Rarst

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' );
0