scandipwa/performance

N/A

安装量: 186 002

依赖: 7

建议者: 0

安全: 0

星标: 4

关注者: 4

分支: 20

类型:magento2-module

1.5.7 2022-11-23 07:35 UTC

This package is auto-updated.

Last update: 2024-09-23 11:26:01 UTC


README

增强产品加载性能。

如何使用

当向产品接口添加新的解析字段时,请确保

  1. 了解何时可以加载它?如果你可以在集合上加载它,请创建一个处理器,并使用DI将其注册到CompositeCollectionProcessor中。
  2. 如果需要格式化数据,或者不能使用集合请求数据,请使用DataPostProcessor。在那里注册处理器,并返回一个产品(键 => 值数组)处理函数(请参阅实现中的示例)。
  3. 如果数据在集合加载之前无法请求,但在加载后可以附加(使用集合本身) - 请使用CollectionPostProcessor,以与DataPostProcessor相同的方式在那里注册处理器。

相关模块

初始动机

情况一:数据无法与产品集合一起请求(只有加载后才能进行

  1. 在集合加载后,检查每个附加信息类别中的模式(使用 $info)中请求的请求字段
  2. 如果请求了附加信息,则助手一次请求并返回所有产品的信息
  3. 遍历所有加载的产品,将辅助器的数据应用于每个特定产品

情况二:可以在加载之前请求数据(字段可以在集合加载时解析

这个由M2(默认)处理 - 我们将只忽略这个。

  1. 集合处理器遍历集合,将请求的字段添加到集合中
  2. 如果字段需要额外的工作,则在集合加载后进行格式化
  3. 如果字段不需要格式化,它将自动输出到结果数据数组中

情况三:数据可以在集合加载之后请求数据,但基于集合数据,而不是产品数组。

潜在问题

a. 代码在每个集合加载的5个地方都进行了复制[需要抽象] b. 数据结构通常不同,检查字段是否被请求很困难

  1. 可配置变体: variants/product
  2. 默认: products/items
  3. 购物车,愿望单: items/product
  4. 订单: order_products

已实现的内容

GraphQL模式读取特性 [新]

类名: ScandiPWA\Performance\Model\Resolver\ResolveInfoFieldsTrait

动机: 允许解析GraphQL info,可以从中提取字段。默认返回产品字段数组,可以通过重写getFieldContent方法更改产品字段的解析。

用于:

  1. ScandiPWA\Performance\Model\Resolver\Products\DataPostProcessor\Images
  2. ScandiPWA\Performance\Model\Resolver\Products\DataPostProcessor\Stocks
  3. ScandiPWA\Performance\Model\Resolver\Products\DataPostProcessor\Attributes
  4. ScandiPWA\CatalogGraphQl\Model\Resolver\ConfigurableVariant
  5. ScandiPWA\CatalogGraphQl\Model\Resolver\Products\Query\Filter
  6. ScandiPWA\WishlistGraphQl\Model\Resolver\WishlistItemsResolver
  7. ScandiPWA\QuoteGraphQl\Model\Resolver\ProductsResolver

集合后处理器 [新]

类名: ScandiPWA\Performance\Model\Resolver\Products\CollectionPostProcessor

动机: 允许对集合进行后处理,用于数据应用在加载集合之上时的场景 - 媒体画廊数据,产品选项数据等。

用于:

  1. ScandiPWA\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product
  2. ScandiPWA\CatalogGraphQl\Model\Variant\Collection

数据后处理器 [新增]

类名: ScandiPWA\Performance\Model\Resolver\Products\DataPostProcessor

动机: 允许对加载的产品集合数据进行后处理。接受产品数组、解析信息,并可以高效处理产品数据。旨在防止产品子字段在循环中请求数据。属性、图像、库存信息从产品移动到这个解析器。

用于:

  1. ScandiPWA\WishlistGraphQl\Model\Resolver\WishlistItemsResolver
  2. ScandiPWA\QuoteGraphQl\Model\Resolver\GetCartForCustomer
  3. ScandiPWA\CatalogGraphQl\Model\Resolver\Products\Query\Filter
  4. ScandiPWA\QuoteGraphQl\Model\Resolver\ProductsResolver
  5. ScandiPWA\CatalogGraphQl\Model\Resolver\ConfigurableVariant

产品数据提供者 [修改]

类名: ScandiPWA\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product

动机: 之前集合后处理器在这里实现(硬编码)。由于它被移动到单独的类中,逻辑不得不从原始位置移除。

用于:

  1. ScandiPWA\QuoteGraphQl\Model\Resolver\ProductsResolver
  2. ScandiPWA\CatalogGraphQl\Model\Resolver\Products\Query\Filter

产品集合处理器 [修改]

类名: Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CompositeCollectionProcessor

动机: M2 实现是好的,只是增加了额外的处理器。

  1. ScandiPWA\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessor\ImagesProcessor