我正在使用NextJS 12和Strapi作为我的CMS来制作一个个人投资组合/博客页面。https://github.com/leerob/leerob.io)的数据。
My /blog部分显示所有的blog文章,并使用NextJS的增量静态再生来获取所有的文章。
export async function getStaticProps() {
const res = await fetch(`${process.env.NEXT_PUBLIC_STRAPI_URL}/api/posts?populate=*`);
const posts = await res.json();
return {
props: {
posts,
},
// Next.js will attempt to re-generate the page:
// - When a request comes in
// - At most once every 60 seconds
revalidate: 60, // In seconds
};
}
我试图让我的博客尽可能地适应未来的需要,只是为了自己测试一下,看看什么解决方案最适合每一种情况。我还想提一下,在/blog中,我实现了一个搜索功能,它根据输入来过滤一系列的帖子。
为了强调一下,我从Strapi中随机生成了数百个帖子。也就是说,我在开始时只显示了其中的几个,只是为了不一次性将所有这些元素填充到DOM中,并给予用户能够通过一个按钮加载更多的帖子(如下所示)。
但我意识到获取所有帖子的获取请求变得有些大(~1- 2 mb),甚至NextJS都给了我以下警告:
- “警告:页面“/blog”的数据为1.5 MB,这超过了128 kB的阈值,此数据量可能会降低性能。*请在此处查看更多信息:https://nextjs.org/docs/messages/large-page-data".
这是否意味着getStaticProps是一个不好的选择?如果是这样的话,对于一个大的NextJS博客页面来说,什么是理想的获取方法来获得更好的性能和SEO呢?
我正在考虑切换到服务器端呈现-分页/blog和getStaticPaths/blog/[slug],以保持更好的SEO性能相比,客户端呈现。
我尝试了增量静态再生,但由于提取请求大小增加,这(可能?)会损害大规模应用程序的性能。
1条答案
按热度按时间vsdwdz231#
正如你所提到的,博客页面很大,这里有几件事,你可能想在这里做。
1.请不要在API调用中使用populate=*,而只提取必填字段作为正文,或者此页中可能不需要某些其他大字段。请参考此处:https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.html#field-selection
1.请确保您使用的是图像的next.js图像组件。它支持延迟加载。
1.当你在实现搜索的时候,你可能需要使用https://market.strapi.io/plugins/strapi-plugin-meilisearch沿着一个Meilisearch示例。这是一篇由Meilisearch团队(https://blog.meilisearch.com/strapi-v4-plugin-meilisearch/)撰写的文章。这可能不是必需的,但是如果博客的数量是成百上千的话,我强烈建议你添加一个这样的全文搜索。对于100-200篇文章,过滤数组也应该可以工作。
1.对于SEO使用官方strapi插件https://market.strapi.io/plugins/@strapi-plugin-seo使事情变得更容易。