Время отклика Json API медленное

Мы используем плагин JSON API, в котором мы сталкиваемся с проблемой производительности приложения. Для запуска приложения требуется 10-20 секунд времени загрузки.

Мы протестировали запрос Api и получили результат, так как некоторые медленные SQL-запросы получают вызов, как указано ниже. Этот запрос происходит из запроса JSON API.

Мы не можем определить, откуда этот SQL-запрос запускается, поскольку путь, упомянутый в запросе, мы внесли некоторые изменения в post_type, например, мы исключили post1 И post2 из query.php, но без изменений мы получаем тот же результат в медленном режиме. SQL запрос в базе данных.

SELECT  iqoyau1_posts.ID
FROM  iqoyau1_posts
INNER JOIN  iqoyau1_postmeta  ON ( iqoyau1_posts.ID = iqoyau1_postmeta.post_id )
WHERE  1=1
AND  (
( iqoyau1_postmeta.meta_key = '_hide-in-ipad'
AND  CAST(iqoyau1_postmeta.meta_value AS CHAR) = '1'
)
)
AND  iqoyau1_posts.post_type IN ('post1', 'post2', 'post3', 'post4',
'post5)
AND  ((iqoyau1_posts.post_status = 'publish'))
GROUP BY  iqoyau1_posts.ID
ORDER BY  iqoyau1_posts.post_date DESC /* in [/plugins/ipad-app/query.php:38]

Вот наш код query.php:

    <?php

function pre_get_posts( $wp_query ){

$json = $wp_query->get( 'json' );
if( !$json )
return $wp_query;
$api_version = $wp_query->get( 'api_ver' );
if( version_compare($api_version, '2.0', '<') ){
$wp_query->query_vars['post_type'] =array( 'ipad-post' );
$wp_query->query_vars['posts_per_page'] = 36;
}
elseif( version_compare($api_version, '2.0', '>=') ){
$url = $_SERVER['REQUEST_URI'];
if  ($_GET["post_type"]== "XXX" && strpos($url,'api_v2') ){
$wp_query->query_vars['post_type'] =  'XXX';
$wp_query->query_vars['posts_per_page'] = $_GET["count"];
}else{
$wp_query->query_vars['post_type'] = array( 'post3', 'post4','post5);
$wp_query->query_vars['posts_per_page'] = $_GET["count"];
}

// exclude posts set to not show in ipad app
$not_in = new \WP_Query( array(
'fields' => 'ids',
'meta_key' => '_hide-in-ipad',
'meta_value' => 1,
'posts_per_page' => -1
) );

$wp_query->query_vars['post__not_in'] =
array_merge( $not_in->posts, $wp_query->get('post__not_in') );
}

$wp_query->query_vars['ignore_sticky_posts'] = TRUE;
return $wp_query;
}
add_filter( 'pre_get_posts', __NAMESPACE__.'\pre_get_posts' );

/*
*   allow post__not_in in query string with normal or json syntax
*   @param array
*   @return array
*/
function request( $qv ){
if( !empty($qv['api_ver'])
&& version_compare($qv['api_ver'], '2.0', '>=')
&& !empty($_GET['post__not_in']) ){
if( is_string($_GET['post__not_in']) )
$qv['post__not_in'] = (array) json_decode( $_GET['post__not_in'] );
elseif( is_array($_GET['post__not_in']) )
$qv['post__not_in'] = $_GET['post__not_in'];

$qv['post__not_in'] = array_map( 'intval', $qv['post__not_in'] );
}

return $qv;
}
add_filter( 'request', __NAMESPACE__.'\request' );

Мы также оптимизировали вложения и теги из ответа json, производительность немного улучшилась, как и раньше, но мы все еще сталкиваемся с проблемой производительности из-за медленного запроса к базе данных.
Как мы можем оптимизировать запрос Любая Помощь.

0

Решение

Избавиться от id в postmeta и измените PK на PRIMARY KEY(post_id, meta_key),

Видеть GROUP BY могут быть удалены без изменения выхода.

При чем тут JSON?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]