从 api 获取数据并渲染数据需要太多时间

Fetching data from api and render it takes too much time

提问人:Vasile Midrigan 提问时间:11/10/2023 更新时间:11/11/2023 访问量:42

问:

导航菜单

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 获取数据。

你有什么改进建议吗?

reactjs 性能 下一个 .js fetching-strategy

评论

1赞 David 11/10/2023
调试时,实际瓶颈是什么?如果 API 需要 4-6 秒才能响应,则显示的代码将无法控制该响应。
0赞 Vasile Midrigan 11/10/2023
问题是渲染所需的时间,而 db 中只有 15 个项目。然后,当我单击徽标导航回家时,也花费了太多时间。
0赞 AKX 11/10/2023
您测量的是渲染时间,还是提取时间?查看浏览器的网络检查器。如果 API 速度很慢,您需要修复它,而不是前端。
0赞 Vasile Midrigan 11/10/2023
内容下载 9.7s .所以原因是下载内容需要很多时间。
0赞 David 11/10/2023
@VasileMidrigan:“问题在于渲染所需的时间[...]原因是下载需要很多时间“ - 这是两件截然不同的事情。同样,如果服务器需要很长时间才能响应,那么这与客户端呈现数据完全无关。请务必确定实际的瓶颈,而不是根据猜测或假设对代码进行随机更改。您在上面的问题中显示的是客户端代码,但您现在描述的问题是服务器端。

答:

0赞 Vasile Midrigan 11/11/2023 #1

溶液

问题是,由于某种原因,通过使用作为参数来获取数据的工作速度非常慢,大约是 ~7s,但更改参数可以解决问题。现在它以 ~1.3s 获取数据。所以它应该是 API 的问题。category_slugcategory_id