搜索
首页web前端js教程根据可用产品 SKU 确定可用选择

如果您过去或曾经在电子商务应用程序中工作过,您可能会遇到必须处理产品显示页面的情况。这是用户决定是否将产品添加到购物车之前看到的页面。与任何其他页面一样,此页面必须快速加载,并且还必须显示有关产品的重要信息,例如描述、图片和可用选项。

Determine Available Selections Depending on Available Product SKUs

可用选项是产品的不同可用变体。例如,男士衬衫通常有不同尺码,但有时商店可能会缺货。对于这种情况,禁用该选择是有益的,以便用户提前知道此变体不适用于该给定产品。

解决此问题的两种方法之一是使用当前选择对后端进行 api 调用,以根据这些选择确定哪些选项可用。例如,如果我选择绿色,我应该只会看到该特定颜色可用的尺寸。如果中号尺寸不提供绿色,则只要之前选择了绿色,则应禁用选择中号的选项。使用第一种方法,将查询数据库以确定基于当前选择的选项哪些是剩余的可用选项。这将在数​​据库中查询 ProductSkus、ProductSkuOptions 和 ConfigurableOptions,并对这些表进行 10 个不同的查询。这将对每个用户的选择进行。

Determine Available Selections Depending on Available Product SKUs

第二种方式是后端以 SKU 的形式返回可用变体的列表('ZARA-001-RED-S'、'ZARA-001-BLUE-S'、'ZARA-001-GREEN- S'、'ZARA-001-RED-M'、'ZARA-001-BLUE-M')。此 SKU 列表可以是产品详细信息 api 调用的一部分,它将添加一个数据库查询,即 ProductSkus.where(product_id:)。此查询 (ruby on Rails) 返回与产品相关的 sku 列表。

第一种方法需要在选择之间具有加载状态,这是可行的,但对于现代 Web 开发标准来说并不理想。第二种方法速度更快,几乎可以立即执行,不需要加载状态。第一种方法将繁重的工作委托给后端,而第二种方法则在前端完成所有繁重的工作,但是前端执行速度会快得多,因为不需要数据库通信。

这篇文章我将重点关注第二种方法。

  const updateUIBasedOnSelection = () => {
    const newAvailableOptions = filterAvailableOptions(
      selectedOptions,
      Object.keys(availableOptions),
      product.available_skus
    )
    // Go through each selection and see what is available according to the other selections
    Object.keys(availableOptions).forEach(type => {
      const selectedOptionsCopy = { ...selectedOptions }
      delete selectedOptionsCopy[type] // remove the current selection so we can see what is available according to the other selections
      const newAvailableOptionsWithSelf = filterAvailableOptions(
        selectedOptionsCopy,
        Object.keys(availableOptions),
        product.available_skus
      )
      newAvailableOptions[type] = new Set([...newAvailableOptions[type], ...newAvailableOptionsWithSelf[type]])
      return newAvailableOptionsWithSelf
    })

    setAvailableOptions(newAvailableOptions)
  }

此代码在监视 selectedOptions 更改的钩子上运行。此代码与 filterAvailableOptions 函数一起确定将禁用哪些选项。这里使用的数据结构是以变体名称为键的对象(例如“颜色”和“大小”)和 javascript 集(Set),类似于数组,但值是唯一的,值在 Set 中不能重复。

可用选项由所有可用的 sku 构造而成,并使用以下值进行初始化:

{
 'color': new Set('RED', 'BLUE', 'GREEN'),
 'size': new Set('S', 'M')
}

另一种更可行的方法是也使用变体 id 作为键而不是变体类型。

{
  1: new Set('RED', 'BLUE', 'GREEN'),
  2: new Set('S', 'M')
}

这样,代码就不会受到可能显示相同类型的变体的限制。例如,也许可以有两种颜色选择。

Determine Available Selections Depending on Available Product SKUs

存货

除了现有的 sku 之外,您可能还想对用户可以选择的所有可能选项进行库存检查,这样用户可以一眼看出某个选项是否可用。为此,您可以找到迄今为止与当前选择匹配的所有 sku。

如果用户已经选择了红色,则查找所有包含红色的 sku,并对所有与红色匹配的 sku 进行库存检查。这样您就可以判断下一个可能的选择选项是否可用。

但是,用户可能想要改变她/他的想法,而不是决定红色然后尺寸为 xs s/他可以选择红色,改变她/他的想法并更改为绿色。您的算法应该足够灵活,以便始终获取 sku。有时,当用户做出选择时,需要获取所有可用选项。例如,每当用户做出选择时,沃尔玛都会检查库存。

另一件事要记住是后端部分。有时即将到来的选择可能多达数百个。您的后端应该足够快速和准确,以处理如此数量的可能选择。一次快速的 GPT 聊天揭示了许多快速、准确的方法,其中许多方法包括使用事件驱动代码,在交易发生时更新库存。这很敏感,因为如果做得不正确,可能会不同步,请记住互斥并避免两个客户可能同时购买该商品的竞争条件。如果必须选择的话,我会选择 Kafka 的组合来处理事件,Redis 来缓存库存值。

就我个人而言,我不必选择其中任何一个,只需优化后端查询以确保它每 2 秒运行 20 个 sku。当用户做出选择时,我会缩小 sku 的范围,因此用户做出的选择越多,我需要检查库存的 sku 就越少,并且 api 调用的速度也越快。

无论如何,我仍然需要弄清楚是否应该获取所有 sku 匹配项或剩余等待选择的 sku。所有匹配的 sku 是与当前选择匹配的所有 sku,剩余的 sku 是用户未选择的 sku。

在电子商务中,提供高性能的代码非常重要,因为有些人依靠该服务从购买体验(有时从他们购买的商品)中获得情感安慰。使用写得不好的应用程序可能会导致情感需求得不到满足,从而毁掉某人的一天,进而导致决策能力不佳。

sku 检查只能在产品显示页面加载开始时进行,但库存检查可以在用户做出选择时进行。因此,本质上只需一次获取 sku,并多次获取库存检查。

结论

很可能有多种方法可以实现此结果。这种方式几乎是瞬时的。同一产品只有这么多不同的变体,因此不需要进一步优化。我保留了部分代码,以免给我目前工作的公司带来麻烦,但我很乐意讨论您的预期方法。

长话短说,获取所有 sku(应该随着用户选择的变化而变化),并通过查看不同的 sku 选项来构建可用的选项选择元素。

以上是根据可用产品 SKU 确定可用选择的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。