next.js 从API获取数据并呈现数据需要太多时间

xt0899hw  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(127)

导航菜单

import { v4 as uuid } from "uuid";
import Link from "next/link";
import { getAllCategories } from "src/utils/api";

export default async function NavMenu() {
  const {data: categories} = await getAllCategories();

  return (
    <div className="NavMenu">
      <ul className="NavMenu__categories">
        {categories?.map((cat) => (
          <li key={uuid()} className="NavMenu__category">
            <Link href={`/category/${cat.name}`} prefetch={true}>{cat.name}</Link>
          </li>
        ))}
      </ul>
    </div>
  );
}

字符串

类别页面:(点击上面的链接时打开)

export default async function CategoryPage({ params }) {
  
  const { data: products } = await getProductsByCategory(params.id);

  return (
    <div className="CategoryPage">
      <div className="CategoryPage__grid">
        {products.map((product) => (
          <ProductCard key={uuid()} name={product.name} price={product.price} />
        ))}
      </div>
      <div className="CategoryPage__pagination">
        <Pagination />
      </div>
    </div>
  );
}

  • 从API函数获取数据:*
export async function getProductsByCategory(category) {
  const url = productsURL;
  const params = {
    category_slug: category,
  };
  Object.keys(params).forEach((key) =>
    url.searchParams.append(key, params[key])
  );

  const products = await fetchTemplate(productsURL, "GET", publicHeaders);
  return products;
}


从API加载项目的时间太长。
我在API中有15个项目。当为特定类别页面获取数据时,它会过滤3个项目,但渲染需要大约4-6秒的时间。
当我点击链接时,它会导航到类别页面。
但这太费时间了。
我想在这种情况下,我必须选择一种更好的方法来从API获取数据。
你有什么改进的建议吗?

wfveoks0

wfveoks01#

解决方案

问题是,由于某种原因,通过使用category_slug作为参数获取数据的速度非常慢,大约7秒,但将参数更改为category_id解决了这个问题。现在它获取数据的时间约为1.3秒。所以这应该是API的问题。

相关问题