如何加载管理-AJAX更快,而无需初始化所有插件?

时间:2017-11-01 作者:brandNewWPUser

我面临着wp-ajax性能的问题。我正在初始化javascript端的ajax调用,但响应需要3-5秒才能返回。我知道管理ajax调用必须加载整个wp核心,这肯定会对我们的性能造成影响。

有没有办法仍然使用admin ajax调用,但不加载所有插件?实际上,在我的php api中,我只使用了wp config中的一些值。或者在我的用例中有没有更好的ajax建议?是否可以使用常规rest API(无需通过管理ajax),但仍然可以使用wp配置中的值?

下面是我的js代码(ajax.js):

jQuery.ajax({
        url: ajax_object.ajax_url,
        data: {
            action: \'geo_ip_api\'
       },

        type: \'POST\',
        success: function (output) {
            console.log(output);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(xhr.responseText);
            console.log(thrownError);
        }
    });
这是我的php api(api.php):

function geo_ip_api(){
global $bannerRequiredRegions;
global $ipBlackList;
$isInEU = \'null\';
$ipAddress = get_ip_address();
if(!in_array(strtolower($ipAddress), array_map(\'strtolower\', $ipBlackList)))
{
    try
    {
        require_once \'HTTP/Request2.php\';
        /* retrieving values from wp-config */
        $api_url = GEO_API_URL;


        $request = new Http_Request2($api_url);
        $url = $request->getUrl();

        //sending HTTP request logic here. No dependency on wordpress
    }
    catch (Exception $ex)
    {
        //TODO: put log here
    }
}

echo $isInEU;
}

感谢您的帮助!提前谢谢。我搜索了很多帖子,没有一个能回答我的问题。

2 个回复
SO网友:Johansson

如果您的请求需要3-5秒才能完成,那么很可能还有其他事情发生。管理Ajax本身不会需要太多的加载。您可能有一些很重的插件,或者有一些钩子在加载时运行昂贵的元查询。

您可以尝试REST-API, 这是slightly faster 而不是管理Ajax。但是响应将是JSON,而不是纯HTML,您必须注意这一点。

此外,可能存在以下问题:TTFB. 尝试禁用所有插件,恢复到默认主题(将代码移动到默认主题),并检查问题是否仍然存在。

SO网友:Kumar

这可能最适合您,也可能不适合您,自定义端点通常对轮询和其他类型的情况有用,而不适用于常规ajax工作。您可能更愿意研究其他方法,如缓存来自API的结果。

同样从我与Mark的讨论中,我同意在公共插件中使用此插件不是一个很好的主意,因为它需要在用户端进行大量更改,如果您正在构建特定于站点的解决方案,则可以使用此插件。

为了了解更多信息,我在WP-Ajax中添加了替代项。

您可以使用WordPress常量SHORTINIT 如果你不想加载插件。在这种情况下,这可能无助于加快ajax请求的速度,因为您正在发出注释中提到的HTTP请求。

如果SHORTINIT 设置为true时,WordPress不会加载Ajax请求的大部分内容,只加载最少量的内容。

如果您需要使用任何其他功能,只需从WordPress加载所需的文件即可。

这里有一篇很好的文章可以帮助您入门,这里有3种不同的方法:https://deliciousbrains.com/wordpress-rest-api-vs-custom-request-handlers/

我只想发布一篇文章的摘录,介绍SHORTINIT.您需要在主题或插件中创建一个以该代码开头的PHP文件,并为其余处理添加处理程序。

// Set SHORTINIT to true
define( \'SHORTINIT\', true );

// get the path for wp-load.php, considering this file in root directory of plugin/theme
$wp_root_path = dirname( dirname( dirname( __FILE__ ) ) );
// Load wp-load.php file (which loads wp-config.php and bootstraps WordPress)
require( $wp_root_path . \'/wp-load.php\' );

// $wpdb class for any query you might need
global $wpdb;

// Do your PHP code for rapid AJAX calls with WP!
function geo_ip_api(){
 global $bannerRequiredRegions;
 global $ipBlackList;
 $isInEU = \'null\';
 $ipAddress = get_ip_address();
 if(!in_array(strtolower($ipAddress), array_map(\'strtolower\', $ipBlackList))) {
   try {
    require_once \'HTTP/Request2.php\';
    /* retrieving values from wp-config */
    $api_url = GEO_API_URL;


    $request = new Http_Request2($api_url);
    $url = $request->getUrl();

    //sending HTTP request logic here. No dependency on wordpress
  }
   catch (Exception $ex){
    //TODO: put log here
   }
 }

 echo $isInEU;
}

结束

相关推荐

Admin-ajax.php垃圾邮件增加了CPU负载

我体验到,我的服务器收到了99%的CPU负载,站点几乎停机。已检查访问日志文件,有大量以下条目:203.115.XXX.XXX - - [13/Oct/2017:12:40:01 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 178 212.92.XXX.XXX - - [13/Oct/2017:12:40:01 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0&quo