我有一个wordpress页面模板,在那里我加载自定义帖子。
获取这些自定义帖子的代码如下所示:
template-parts/content-page.php
<article id="songs">
<?php get_template_part( \'partials/content/custom\', \'songs\' ); ?>
</article>
partials/content/custom/songs.php
$args = array(
\'posts_per_page\' => 0,
\'offset\' => 0,
\'category\' => \'\',
\'category_name\' => \'\',
\'orderby\' => $orderBy,
\'order\' => $order,
\'include\' => \'\',
\'meta_key\' => \'\',
\'meta_value\' => \'\',
\'post_type\' => \'custom_song\',
\'post_mime_type\' => \'\',
\'post_parent\' => \'\',
\'author\' => \'\',
\'post_status\' => \'publish\',
\'suppress_filters\' => true
);
$songs_array = get_posts( $args );
if (count($songs_array) > 0){
?>
<ul>
<?php
foreach ($songs_array as $mysong){
set_query_var( \'mysong\', $mysong);
get_template_part( \'partials/content/custom\', \'normal\' );
}
?>
</ul>
<?php
}
?>
问题是有2000多条记录。我希望所有这些文件都能在不分页的情况下立即加载。上面的代码可以工作,它确实加载了所有的帖子,但由于这个查询,页面速度很慢。
你能帮助我如何优化这一点并加快加载速度吗?有没有办法异步加载?这样我就可以在页面的这一部分显示加载图标,直到帖子加载完毕?
SO网友:Bysander
无论您是否通过AJAX加载,如果您需要在一个页面、一次或一个请求中加载2000多条记录,那么您总是要在服务器资源的支配下进行加载。
我将首先研究缓存解决方案,因为这是最简单的快速设置方法,然后在此期间,查询优化将为您节省时间。只有获取您需要显示的基本数据才会有很大帮助。例如,如果仅显示链接,则仅查找标题(&a);Permalink。这可以通过WP_Query
以及fields
参数here - 或自定义MySQL查询。
如果你想走AJAX路线,那么你需要确保你的脚本只输出有用的数据——片段/内容/自定义/歌曲。php模板可以有自己的url端点,然后可以使用jQuery-AJAX load()方法在页面上调用它。不要加载整个页面及其关联的样式表、JS脚本和其他资源(页眉页脚等),然后选择要加载的相关DIV。使该页面成为一个只包含所需数据的纯html页面。
我似乎还记得一件事,叫做;“分块”;Nginx或Apache(不记得是哪个)。我也找不到太多关于它的信息。在脚本末尾完成加载之前,这会从内存将页面的一部分返回给最终用户。如果您希望用户在处理/加载整个页面之前看到“某些东西”,那么这可能值得一看。
最后——教育——告诉客户,如果你的服务器速度慢,而你只有2000张唱片,而他们希望增加歌曲目录,那么你就朝着一个方向前进。昂贵的服务器/CPU账单。向开发人员支付一次修复/优化某个东西的费用通常比每月支付2年以上的更高使用率和更大的服务器账单要便宜。如果你让他们明白这一点,请教我如何。。。
通过查询分页进行AJAX延迟加载是一种明智的方法,您甚至可以在完成第一页加载时触发第一次延迟加载,并将滚动偏移量触发器置于高位-在加载下一位之前,您可能永远看不到列表的结尾。。。。
抱歉-今天文本太多,代码太少。。。但至少要心存感激。这是一条评论,没有人想读那么长的评论