0

サーバー上でスクリプトを実行して、Magento ストアからすべての製品を取得し、それをショッピング エンジンで使用する特定のフィード形式に分割しています。

属性とその値 (色、サイズなど) を取得するときに問題が発生します。

この特定のストアには 24 の異なる属性タイプと 1300 の製品があり、スクリプトを実行するたびに、サーバーの CPU 負荷が最大で約 97% になります。これは、製品属性コードを取得する機能を追加してから発生しただけです。値。

各属性値を取得するために使用している呼び出しは、たとえば次のとおりです。

$_product->getResource()->getAttribute('bed_size')->getFrontend()->getValue($_product); $_product->getResource()->getAttribute('bowl_size')->getFrontend()->getValue($_product); $_product->getResource()->getAttribute('cage_size')->getFrontend()->getValue($_product); $_product->getResource()->getAttribute('coat_size')->getFrontend()->getValue($_product);
これは、いくつかの属性を持つすべての製品で問題なく機能しますが、24 個の属性すべてを扱い始めると大きな問題が発生します (なぜそんなに多くの属性があるのか​​を聞かないでください。残念ながら、これらの変更/統合を制御することはできません)。以下に)。

すべての製品属性と値を 1 つの初期配列にロードし、PHP を使用して処理作業を行う方法があるかどうかを知る必要があります。

このデータの取得に関して Magento がどのように機能するかについては 100% 確信が持てませんが、各->getValue($_product)呼び出しがデータベースを呼び出して属性値を取得し、データベース システムに過度の負荷がかかっているように思われます。

これが正しければ、スクリプトを実行するたびに 24 * 1300 のデータベース コールが発生し、1 分強で合計 31,200 のコールが発生します。

これをすべての属性に対して製品ごとに 1 つのデータベース呼び出しに減らし、PHP で配列を使用して結果を処理できれば、サーバーの負荷は管理可能になると予想されますが、前述のように、Magento がこの情報をどのように処理するかを 100% 理解していないのは難しいことです私が確かめるために。

補足として、私は別のサイトで同じスクリプトを実行していますが、属性は 3 つしかなく、製品の数はほぼ同じですが、このような問題は発生していません。

ベッドサイズの値を取得するために次を使用できますが、$_product->getBedSizeこれは数値オプション値を返します。これは、選択ボックスタイプの属性値であり、テキストボックスまたはテキストエリアタイプではなく、必要なテキスト値ではないためだと思います.

4

1 に答える 1

1

おお、すべての属性の値を 1 つずつ取得していますか?

以下のスクリプトを使用してすべての属性値を取得し、「属性名」をキーとして配列に格納することをお勧めします。

$attrValues = array();
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
    if ($attribute->getIsVisibleOnFront()) {
        $value = $attribute->getFrontend()->getValue($product);
        $attrValues[$attribute->getAttributeCode()] = $value;
    }
}

print_r($attrValues);
于 2013-02-14T13:14:02.100 に答える