【发布时间】:2022-02-09 14:36:15
【问题描述】:
我正在遍历从 Sveltekit 商店检索到的项目,并异步检索每个迭代项目的附加信息。
简化后的代码如下:
{#each $order.itemIDs as itemID}
{#await calcItemPrice(itemID)}
{:then price}
{#await itemFor(itemID)}
{:then item}
<OrderItem itemID={item._id} description={item.description} price={price} />
{/await}
{/await}
{/each}
另外,UI 允许向$order.itemIDs 添加更多条目(使用update),这会触发在每个循环中重新绘制 DOM 元素。这样做的关键问题是:
- 每次添加项目时重绘
#each循环意味着每次都重新对每个项目进行异步调用。随着越来越多的项目被添加,这显然会影响性能。 - 在此(缓慢)重绘期间,
#each中的 DOM 元素会闪烁,因为它们会立即消失,并在执行所有提取查询后重新出现。
我认为我的问题有两个方面:
- 我怎样才能使添加新的
itemID到$order.itemIDs不会触发所有渲染元素的重绘,而只是将新元素附加到 DOM? - 我应该在什么时候运行异步调用来提高渲染性能? (我感觉在渲染时运行不是最理想的)
【问题讨论】: