是否按ID通过AJAX加载镜像资源?

时间:2016-10-20 作者:Louis W

我一直在努力优化一个网站,努力减少数据库查询。我注意到一件非常昂贵的事情是wp_get_attachment_image_src. 在列出节的全部内容的概述页面上,我的页面在自定义字段中设置了图像id。如果我在那页上打电话wp_get_attachment_image_src 它需要对每个数据库进行额外的DB查询。

头脑风暴的想法是,只需在HTML中输出ID,呈现页面,并让JavaScript向服务器发出Ajax请求,以执行此附加查询并获取src。

这将如何实现?

1 个回复
SO网友:TheDeadMedic

在实际输出之前,最好先预加载当前页面的所有图像。然后将查询从n*2 (每个get image调用实际上有两个数据库查询,一个来自wp_posts 表,另一个来自wp_postmeta) 降到只有两个。

$images = [];
foreach ( $pages as $page )
    $images[] = ( int ) get_post_meta( $page->ID, \'image_field\', true );

if ( $images = array_filter( $images ) ) {
    new WP_Query([
        \'post__in\'       => $images,
        \'posts_per_page\' => -1,
        \'no_found_rows\'  => true,
        \'post_status\'    => [ \'publish\', \'inherit\' ],
        \'post_type\'      => \'attachment\',
    ]);
}
这只是为了演示,但其思想是您构建一个仅包含图像ID的数组,然后使用查询将它们一次全部拉入内存。对上述ID的后续映像函数调用将命中缓存而不是数据库。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i