Ajax leva 10x o quanto deveria / poderia

48

Acabei de atingir o meu primeiro problema sério com o WordPress e, para alguém que goste do Ajax, isto é um problema.

Eu tenho uma solicitação do Ajax que leva 1,5 segundos para ser concluída ao usar a API do Ajax.

Se eu pegar o mesmo código exato e executá-lo com um script personalizado (sem WordPress), a solicitação do Ajax leva apenas 150 milissegundos. Isto não é um exagero

Se você olhar o primeiro comentário de enlace e a conversa que se segue, você verá que esta lentidão é causada pelo fato de que, em seu pedido, todo o WP é carregado ...

Espero que exista uma solução que permita fazer solicitações Ajax sem carregar todos os WordPress.

Quais são suas experiências com a aceleração de solicitações do Ajax com o WordPress?

    
por Mike 09.02.2012 / 20:45
fonte

2 respostas

53

Sim, isso é um problema desagradável: para ter um ambiente WordPress completo, você precisa gastar um tempo considerável para carregá-lo.

Eu precisei de um desempenho muito melhor (para o recurso de pesquisa incremental muito dinâmico) para o trabalho e o que eu escolhi foi:

  1. Arquivo personalizado como manipulador de Ajax.
  2. constante SHORTINIT para carga limitada do WP.
  3. Partes do núcleo carregadas de maneira muito seletiva, apenas as necessárias para a tarefa.

Isso fornece um ambiente muito limitado, mas o desempenho é muito melhor e um grau razoável de compatibilidade com o WP (começando com $wpdb ) é mantido.

Aqui está o início do meu arquivo loader, não bonito, mas funciona para necessidades específicas:

<?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
    
por Rarst 09.02.2012 / 21:12
fonte
0

Eu encontrei isso e acelerou meu 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' );
    
por Lisa Daugherty Thompson 13.07.2014 / 15:20
fonte