elgentos/largeconfigproducts

该软件包最新版本(0.3.5)没有可用的许可信息。

安装3,279

依赖项: 0

建议者: 0

安全性: 0

星标: 91

关注者: 14

分支: 28

公开问题: 6

类型:magento2-module

0.3.5 2019-08-07 14:15 UTC

README

此扩展是为了解决当使用大量关联简单产品配置产品时,Magento 2造成的各种问题而构建的。Magento 2可以很好地处理约3000个关联简单产品。超过这个数量,它变得非常慢,有时甚至无法使用(例如,web服务器超时)。

此版本仅与Magento 2.3.X兼容

示例

peek 2018-01-19 10-14

试图解决的问题

主要问题是:

  • 在前端,Magento 2在巨大的JSON对象中加载所有变体(关联简单产品),并将其渲染到DOM中。对于10k个变体,此JSON对象大小为20兆字节。
  • 在后台,此JSON也会构建并传递给一个包装在XML中的UI组件。PHP的xmllib无法将极其大的XML结构附加到现有的XML结构中。

我们已经为这两个问题创建了解决方案。在前端,我们通过AJAX请求卸载获取JSON blob。使用控制台命令预加热JSON本身,并将其存储在Redis中。我们选择Redis而不是Magento缓存系统本身,因为Redis在清空整个Magento缓存时不会被刷新(例如,在部署期间)。

当产品页面加载且没有缓存条目时,它会创建它。当然,这会比预加热缓存条目花费更长的时间。

在后台,我们使用DOMDocument的LIBXML_PARSEHUGE常量来处理极其大的XML结构。

此扩展免费使用。如果您发现任何错误,请通知我们。它已在PHP 7.0上的Magento 2.2.2上进行了测试。

控制台命令

此扩展包含一个控制台命令php bin/magento lcp:prewarm。此控制台命令预加热JSON blob,以便您的客户在产品页面上首次点击时不必等待缓存构建。

该命令有一些选项;

--products 123,456,789 - 定义您要运行预加热器的产品ID

--storecodes english,dutch,german - 定义您要运行预加热器的商店代码

--force true - 强制预加热器覆盖现有条目。否则,预加热器将跳过已具有条目的产品/商店代码组合。

Magento 2.3.X

Magento 2.3.0包含使用RabbitMQ的集成消息队列管理,这已替换了用于在保存后动态预加热配置产品的renatocason/magento2-module-mq模块。

要使用此模块中的RabbitMQ消息,您需要一个可由Magento访问的RabbitMQ服务器。

https://devdocs.magento.com/guides/v2.3/install-gde/prereq/install-rabbitmq.html

在env.php文件中配置服务器

'queue' =>
  array (
    'amqp' =>
    array (
      'host' => 'magento2_rabbitmq_1',
      'port' => 5672,
      'user' => 'guest',
      'password' => 'guest',
      'virtualhost' => '/'
     ),
  ),

安装模块后,运行setup:upgrade以创建消息队列。使用以下命令确认消息队列存在:

bin/magento queue:consumers:list

使用以下命令启动消息队列消费者:

bin/magento queue:consumers:start elgentos_magento_lcp_product_prewarm

要测试缓存的动态更新,请编辑并保存一个配置产品(父或子)

您将看到预加热过程正在更新缓存

Processing 67..
Prewarming
Prewarming MH01 for store en (1/2)
Prewarming MH01 for store de (2/2)
Done prewarming

您可以将其作为后台进程运行消费者。您可能需要使用监督进程管理消费者,以确保其始终运行。如果您使用Docker,则消费者可以作为一个始终重新启动的独立容器运行。

版本说明

0.4.0 - gaiterjones - 2020.04
使用内置AQMP/RabbitMQ集成与Magento 2.3.x兼容
移除了对renatocason/magento2-module-mq的依赖
更新了swatch-renderer-mixin中的updateBaseImage方法
禁用了configurable-customer-data,该功能原本在requirejs中用于自动选择第一个选项,但在2.3.x中不工作
添加了禁用按客户组缓存的功能,以便始终使用组0。如果您没有客户组定价,请使用此功能