Walker_NAV导航菜单中的url_to_postid方法导致异常高的TTFB

时间:2021-08-31 作者:Prateek Pandey

我正在使用walker类创建我的自定义mega菜单,并使用它以2的菜单深度显示帖子缩略图。

似乎使用url\\u to\\u postid方法会导致ttfb高达>;10秒。我最初认为这是图像大小的问题,但即使将图像压缩了95%,我似乎也得到了相同的ttfb。

删除违规代码后,ttfb会急剧下降到<;1s,但不显示附件图像。

有没有其他方法可以让我的缩略图显示在超大菜单中,而不会导致性能大幅下降?

沃克。php代码:

function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ){

//url_to_post id causing >10s ttfb
$postid = url_to_postid( $item->url );
$thumbnail = get_the_post_thumbnail_url($postid);

   

if ( array_search( \'menu-item-has-children\', $item->classes )&& $depth==0 ) {
    
    
    
 $output .= sprintf( "\\n<li class=\'topnavitem %s\'><a href=\'%s\' class=\\"topnavtext\\">%s</a> <span class=\'plus\'><i class=\'fas fa-angle-down\'></i></span>\\n", ( array_search( \'current-menu-item\', $item->classes ) || array_search( \'current-page-parent\', $item->classes ) ) ? \'\' : \'\', $item->url, $item->title );
} 

elseif ( array_search( \'menu-item-has-children\', $item->classes )&& $depth==1 ) {
    $output .= sprintf( "\\n<li class=\'productsnav %s\'><a href=\'%s\' class=\\"productsnavtext\\">%s</a><span class =\'sub-plus\'><i class =\'fas fa-angle-down\'></i></span>\\n", ( array_search( \'current-menu-item\', $item->classes ) || array_search( \'current-page-parent\', $item->classes ) ) ? \'\' : \'\', $item->url, $item->title );
} 

 //$thumbnail using url_to_postid being called at a menu depth of 2 

elseif ($depth==2){
    $output .= sprintf( "\\n<li class=\'midnavitem %s\'><div class=\'pictext\'><img src=\'%s\'/><a href=\'%s\' class=\\"midnavtext$postid\\">%s</a></div>\\n", ( array_search( \'current-menu-item\', $item->classes) ) ? \'\' : \'\', $thumbnail,$item->url, $item->title );
}




else {
    $output .= sprintf( "\\n<li class=\'topnavitem %s\'><a href=\'%s\' class=\\"topnavtext\\">%s</a>\\n", ( array_search( \'current-menu-item\', $item->classes) ) ? \'\' : \'\', $item->url, $item->title );
}
 }

function start_lvl( &$output, $depth ) {
$indent = str_repeat( "\\t", $depth );
if ($depth == 0) {
$output .= "\\n$indent<ul class=\\"nav-level-one\\" role=\\"submenu\\">\\n";
}


    if ($depth == 1) {
    $output .= "\\n$indent<ul class=\\"nav-level-two\\" role=\\"subsubmenu\\">\\n";
}

}

1 个回复
SO网友:Jacob Peattie

我不能肯定,但我敢打赌url_to_postid() 只是不是一个很快的函数。但您不需要使用它,因为原始的帖子ID可以从$item:

if ( \'post\' === $item->object ) {
    $post_id   = $item->object_id;
    $thumbnail = get_the_post_thumbnail_url( $post_id );
}