提高性能 - 循​​环项 - Vue JS

Improve Performance - Loop Items - Vue JS

我有一家电子商务在线商店,其中包含包含商品的类别和包含所有可用商品(有货)的一页。

有些类别有近 1500 个项目。所有可用产品的页面有近 4000 个项目。

我可以用 api 非常快地加载所有内容,项目的有效负载在 50 毫秒到 300 毫秒(大小为 90kb,较大者)内交付。

开头只显示了30个项目。当用户滚动到页面底部时,我使用 vue-observe-visibility 来加载更多内容。因此它“每页”或“视图”加载 30 个项目。

项目使用我在其中循环的项目组件。 示例

<div v-for="value in filteredRecords.slice( 0, 30)" :key="value.id">
 <item-card 
:product_id="value.id" 
:product_slug="value.product_slug"
:product_name="value.product_name"
:product_img="getImage(value.product_img , '300x300')" 
:product_price="value.product_price" 
:product_sale_price="value.product_sale_price"
:product_stock="value.product_stock"
:locale="locale" 
:heart="true" v-if="!mobile">

<item-card-for-mobile
:product_id="value.id" 
:product_slug="value.product_slug"
:product_name="value.product_name"
:product_img="getImage(value.product_img , '300x300')" 
:product_price="value.product_price" 
:product_sale_price="value.product_sale_price"
:product_stock="value.product_stock"
:locale="locale" 
:quickview="true"
v-else>
<div>

我测试了它,当用户滚动很多并且产品的增量达到 1250 个项目时,例如,在更改页面时(例如带有文本的空白页面,没有 api 调用)单个页面应用程序需要 4 到 6 秒才能更改。

有没有办法让它更有效率?

tips 提高列表的性能:

这种情况下,可以这样处理

<div v-for="value in filteredRecords.slice( 0, 30)" :key="value.id" v-if="!mobile">
 <item-card 
:product_id="value.id" 
:product_slug="value.product_slug"
:product_name="value.product_name"
:product_img="getImage(value.product_img , '300x300')" 
:product_price="value.product_price" 
:product_sale_price="value.product_sale_price"
:product_stock="value.product_stock"
:locale="locale" 
:heart="true">
<div>

<div v-for="value in filteredRecords.slice( 0, 30)" :key="value.id" v-else>
 <item-card-for-mobile
:product_id="value.id" 
:product_slug="value.product_slug"
:product_name="value.product_name"
:product_img="getImage(value.product_img , '300x300')" 
:product_price="value.product_price" 
:product_sale_price="value.product_sale_price"
:product_stock="value.product_stock"
:locale="locale" 
:quickview="true"
>

<div>

(ps 这是一个小的代码重复但是它避免了检查 N 次 mobile prop)