以下是您正在搜索的答案:
Ajax takes 10x as long as it should/could
不幸的是,那里的解决方案需要非常详细的知识,包括哪些部件需要加载/哪些部件不需要加载以及为什么东西会断裂。通过阅读github问题/评论,这似乎不适用于HTTPS。
否则,你真的无法加速,我已经对此进行了广泛的研究。
但是我可以推荐REST API吗?RA只需提取公开的数据就可以了。想想产品、帖子和任何其他只是信息性的信息。
当我决定切换时,这使我的脚本速度加快了很多。
尝试一下,看看它是否适合您的用例。从表面上看,确实如此。您没有透露任何信息,因此具有只读函数的rest端点将适合您。
这里是我对Rest API与AJAX的1:1测试。
我只是检索一些数据,然后用它们来显示-
WP AJAX:
function get_block_help_data(block_identifier) {
return jQuery.ajax({
url: block_help_data.ajax_url,
type: \'POST\',
data: {
action: \'parse_block_help_request\',
security: block_help_data.ajax_nonce,
block_identifier: block_identifier
},
});
}
在后端实现:
add_action( \'wp_ajax_parse_block_help_request\', array( $this, \'parseBlockHelpRequest\' ) );
public function parseBlockHelpRequest()
{
check_ajax_referer( \'block_help_nonce\', \'security\' );
$block_identifier = sanitize_text_field( $_POST[\'block_identifier\'] );
//Check if the data is what we need.
if( ( empty( $block_identifier ) || is_wp_error( $block_identifier ) ) ) {
wp_send_json( \'Invalid data.\', 500 );
return;
}
wp_send_json( DataPool::getBlockHelpItem( $block_identifier ) );
}
休息时间:
function get_block_help_data(block_identifier) {
return jQuery.ajax({
url: block_help_data.rest_link + block_identifier,
type: \'GET\',
dataType: \'JSON\'
});
}
在后端实现:
class BlockHelpREST extends \\WP_REST_Controller
{
/**
* Holds the namespace for the REST endpoint.
*
* @var string
*/
protected $block_help_namespace = \'block_help/v\';
/**
* Holds the version for the REST endpoint.
*
* @var string
*/
protected $block_help_version = \'1\';
public function __construct()
{
$this->hookRestRouteToServer();
}
/**
* Registers the main routes for the Block Help REST API.
*/
public function registerRoutes() {
$namespace = $this->block_help_namespace . $this->block_help_version;
$base = \'block_identification\';
register_rest_route(
$namespace, \'/\' . $base,
array(
array(
\'methods\' => \\WP_REST_Server::READABLE,
\'callback\' => array( new DataPool, \'getBlockHelpItemByREST\' ),
//\'permission_callback\' => array( new Privileges, \'canLoadSprout\' )
)
)
);
}
public function hookRestRouteToServer(){
add_action( \'rest_api_init\', array( $this, \'registerRoutes\' ) );
}
}
超过20-30次运行(我知道,这还不够,但我可以清楚地看到WP AJAX有点慢):
其余通话时间:MOSTLY 150ms with one high of 215.
API调用始终,without exception, took at least ~400-500ms.
忽略这一点,这是难以置信的收获,但请记住,样本很小。我会继续测试和更新,因为它看起来确实太好了,不可能是真的。