使用动态编码时页面加载速度较慢

时间:2019-03-19 作者:Omer

我编写了代码来获取某些标记,然后显示具有这些标记的产品。

代码如下:

$tag_string = \'\';

for ($i = 0; $i < 8; $i++) {
    for ($j = 0; $j < 8; $j++) {

        $tag_to_use = get_post_meta($post->ID, \'_tag_to_use_\'.$i.\'_\'.$j, true);
        $tag_string = $tag_to_use ? $tag_string .= $tag_to_use . \',\' : $tag_string .= \'\';

    }
}

if ( substr( $tag_string, -1) == \',\' ) {
    $tag_string = rtrim( $tag_string, \',\' );
}

echo do_shortcode( \'[products tag="\' . $tag_string . \'"]\' );

}
当我运行th代码时,页面加载速度很慢。

当我更改此选项时:

echo do_shortcode( \'[products tag="\' . $tag_string . \'"]\' );
为此:

echo do_shortcode( \'[products tag="test,test1"]\' );
页面加载速度很快。

为什么会发生这种情况,我该如何解决?如果需要更多信息,请告诉我,我会更新问题。

谢谢

1 个回复
SO网友:Antti Koskinen

我不确定这是否是问题的根源,但我注意到的是,您的代码最终会调用get_post_meta 同一篇文章有很多次(是的,8个循环中有64个循环)。

也许在for循环之前,您可以只获得一次所有的post meta。然后在循环内使用isset()! empty() 检查数据是否存在。

沿着这些路线,

$post_meta = get_post_meta($post->ID); // This returns an array with all the data in position 0, if I remember correctly
for ($i = 0; $i < 8; $i++) {
  for ($j = 0; $j < 8; $j++) {
    if ( isset( $post_meta[0][\'_tag_to_use_\'.$i.\'_\'.$j] ) ) {
      $tag_to_use = $post_meta[0][\'_tag_to_use_\'.$i.\'_\'.$j];
      // The meta value might be in a array with the position 0, var_dump $tag_to_use to see if this is the case
      // $tag_to_use = $post_meta[0][\'_tag_to_use_\'.$i.\'_\'.$j][0];
      $tag_string = $tag_to_use ? $tag_string .= $tag_to_use . \',\' : $tag_string .= \'\';
    }
  }
}
使用var_dump 检查数组索引是否正确,以及maybe_unserialize() 元数据(如果需要)。

我不知道这是否只是broscience和一厢情愿的想法,但也许值得一试。你当然可以使用microtime 要大致了解一下,如果上面的循环比原始循环快。

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗