我刚刚遇到了WordPress的第一个严重问题,对于喜欢Ajax的人来说,这是一个很大的麻烦。

我有一个Ajax请求,使用Ajax API时需要1.5秒才能完成。

如果我使用完全相同的代码并使用自定义脚本(没有WordPress)运行它,则Ajax请求仅需150毫秒。这并不夸张

如果您看一下http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/在随后的对话中,您会发现这种缓慢是由以下事实造成的:在您的请求下,所有WP都已加载...

我希望那里有解决方案,可以在不加载所有WordPress的情况下发出Ajax请求。

使用WordPress加速Ajax请求有什么经验?

评论

我想知道流行的缓存插件能否涵盖这种情况。

@Raphael,我也考虑过这一点,但是没有看到任何提及。如果他们这样做,那将是非常棒的

#1 楼

是的,这是一个令人讨厌的问题,要拥有完整的WordPress环境,您需要花费大量时间来加载它。

我需要更好的性能(具有非常动态的增量搜索功能)才能正常工作,我需要做什么带有is:


作为Ajax处理程序的自定义文件。

SHORTINIT常量,用于限制WP核心负载。
非常有选择地加载核心的部分,只有那些

这提供了非常有限的环境,但是性能是一种更好的方式,并且保留了与WP(以$wpdb开头)的合理兼容程度。

这里是启动我的加载程序文件,虽然不是很漂亮,但是可以满足特定需求:

<?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


评论


SHORTINIT contant是什么意思?你能提供例子吗?我预想需要根据请求的需要设置不同程度的WP来安装我自己的处理程序,但是我想看看您创建的一些示例。

–迈克
2012年2月9日在20:20

@Mike并没有广为人知,但是概念上确实很简单-如果设置SHORTINIT常量,那么WP不会加载大多数核心(没有大多数API /函数,没有插件,没有主题)。我将添加一些代码来回答。

–稀有
2012年2月9日在21:38



看起来还可以。我只是不喜欢我们必须使用require'../../../../wp-load.php'的事实;这使得这个很漂亮。我还担心从我的经验来看,实际提取您“需要”的资源有多么容易,因为WordPress不是模块化的。

–迈克
2012-2-10 17:47

@Mike是正确的,但是即使有问题,它也比完全不了解WP的端点要好得多。这可以(并且应该)进一步改进,但对我而言,这并不是紧迫的任务。

–稀有
2012-2-10 19:32

有什么方法可以从WordPress中检测wp-load.php的位置?例如,是否可以在加载插件时编写一个静态文件,并将其路径设置为变量,然后将该文件包含在独立的Ajax响应文件中?

–这里是什么
2012年12月20日在18:26

#2 楼

我发现了它,加快了我的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' );