【发布时间】:2020-11-16 02:46:11
【问题描述】:
问题
我有两个触发事件的输入,这将更新特定产品的数量(这些输入引用到产品)。
而且由于我可以写一个数字,例如数量,非常快,通常很慢。
需要 1-2 秒(当我有更多产品时)更新产品数量...
更新产品的函数会返回一个新的basket,它基本上就是所有产品所在的“购物车”,然后我会用新的(带有修改)。
我应该实施什么样的性能改进?
注意:我正在使用 React,该函数属于 Context API。
方法:修改ProductQuantity()
export const modifyProductQuantity = (
productToModify: ProductInterface,
quantity: number,
basket: ProductInterface[]
): ProductInterface[] => {
const basketWithUpdatedProduct = basket.map((product) => {
if (product.id === productToModify.id) {
const totalPrice = product.pricePerMeasurement * quantity;
const roundedTotalPrice = parseFloat(totalPrice.toFixed(2));
const roundedTotalQuantity = parseFloat(quantity.toFixed(2));
return {
...product,
quantity: roundedTotalQuantity,
price: roundedTotalPrice,
};
}
return product;
});
return basketWithUpdatedProduct;
};
我可能的解决方案:
如果我在后台处理产品修改,我可能会获得更好的性能,它的工作原理是这样的:
- 例如,每次更改输入时,我都会运行 3 秒的 setTimeOut。
- 如果我再次更改输入,将运行另一个 setTimeOut。
- 因此我只会在用户停止输入时运行该函数
你们怎么看???
【问题讨论】:
-
basketWithUpdatedProduct的长度很长? -
你解释的解决方案叫做去抖动。
-
它没有。最多可以达到20个!但是我已经看到,当我添加产品时,比如 6,它会变得更慢,因为我更改输入值(数量)需要 1 秒@kyun
-
太好了,谢谢@JacobSmit。我想我可以用它来实现我想要的,或者你认为有更好的方法吗?
-
实际上更新内存中的值应该不会很慢,尤其是只有 6 个对象。可能导致缓慢的是重新渲染。您是否同时在屏幕上显示所有购物车项目?您是否进行了性能测试并检查了渲染组件需要多长时间?
标签: reactjs typescript react-typescript