首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json API响应时间慢

Json API响应时间慢
EN

Stack Overflow用户
提问于 2017-04-28 21:19:11
回答 1查看 865关注 0票数 1

我们使用的是JSON API插件,在这个插件中我们面临着性能问题,因为App.It需要10-20秒的加载时间来启动应用程序。

我们测试了Api请求,当一些缓慢的sql查询调用时,我们得到了结果,正如前面提到的来自JSON API请求的below.This查询。

我们无法确定这个sql查询是从哪里触发的,因为查询中提到的路径我们在post_type中做了一些更改,例如,我们从query.php中排除了post1和post2,但仍然没有更改,我们在数据库中的缓慢sql查询中得到了相同的结果。

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
    <?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响应中优化了附件和标签,性能和以前一样有所提高,但我们仍然面临着数据库查询速度慢的性能问题。我们如何优化查询有任何帮助.

EN

回答 1

Stack Overflow用户

发布于 2017-04-30 09:08:37

去掉postmeta中的id,将PK改为PRIMARY KEY(post_id, meta_key)

参见的GROUP BY可以在不更改输出的情况下删除。

JSON和它有什么关系?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43681224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档