trunglv/ magento2-concurrent_indexer
Magento2 并行索引器,使用 spatie/fork
dev-main
2024-08-15 08:21 UTC
Requires
- php: >=8.0
- spatie/fork: *
This package is auto-updated.
Last update: 2024-09-15 08:26:04 UTC
README
目的
Magento 2 已经支持某些索引进程的多线程,但并非全部——特别是产品扁平索引器。本模块的目的是
1. 启用产品扁平索引器并行运行。
2. 用 spatie/fork 模块替换 Magento 核心的默认多线程功能。虽然我还没有进行基准测试,但我感觉 spatie/fork 更快,并且在代码方面似乎更现代和专业。
安装
composer require trunglv/magento2-concurrent_indexer
配置
在 etc/env.php 中,我们应该定义 MAGE_INDEXER_THREADS_COUNT(Magento2 核心)和一个新的,BETA_CONCURRENT_INDEXER_THREADS_ENABLE。
!!!!如果你想使用 "spatie/fork",你应该启用 BETA_CONCURRENT_INDEXER_THREADS_ENABLE
...
'MAGE_INDEXER_THREADS_COUNT' => 3,
'BETA_CONCURRENT_INDEXER_THREADS_ENABLE' => 1
Magento 2 核心如何实现索引器的多线程?
CLASS \Magento\Catalog\Model\Indexer\Category\Product\Action
/**
* Run reindexation
*
* @return void
*/
protected function reindex(): void
{
$userFunctions = [];
foreach ($this->storeManager->getStores() as $store) {
if ($this->getPathFromCategoryId($store->getRootCategoryId())) {
$userFunctions[$store->getId()] = function () use ($store) {
$this->reindexStore($store);
};
}
}
$this->processManager->execute($userFunctions);
}
CLASS \Magento\Indexer\Model\ProcessManager
/**
* Execute user functions
*
* @param \Traversable $userFunctions
*/
public function execute($userFunctions)
{
if ($this->threadsCount > 1 && $this->isCanBeParalleled() && !$this->isSetupMode() && PHP_SAPI == 'cli') {
$this->multiThreadsExecute($userFunctions);
} else {
$this->simpleThreadExecute($userFunctions);
}
}
我的模块如何实现索引器的多线程?
CLASS \Betagento\ConcurrentIndexer\Plugin\Indexer\AroundProcessManager
if ($this->config->isEnabled() && $this->config->getThreadCount() > 1 && $this->config->isCanBeParalleled() && !$this->config->isSetupMode() && PHP_SAPI == 'cli') {
\Spatie\Fork\Fork::new()->concurrent($this->config->getThreadCount())->run(...$userFunctions);
return;
}
@trunglv Skype : beta.trunglv@outlook.com - 邮箱 : luuvantrung@gmail.com
vendor/bin/phpstan analyse app/code/Betagento/ConcurrentIndexer/ --level 9 5/5 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% [OK] No errors