Magentoシステムで、多数の属性の保存がまったく機能しないか、部分的にしか機能しないという問題が発生しています。これはJavaScriptに関連する問題のようで、Stack Overflowの誰かがこの状況に対処するための「既知の科学」を持っているか、正しい方向を示すことができると期待していました。
基本的な問題は、問題のMagentoシステムに250を超えるカラー属性オプションラベルがあることです。管理者ユーザーが次のようにしてこれらを管理しようとした場合
- [カタログ]->[属性]->[属性の管理]に移動します
- 色属性の選択
- [ラベル/オプションの管理]タブをクリックします
- 最後のラベルオプションの編集
- [保存して編集を続行]をクリックします
2つのうちの1つが起こります。
OSX上のGoogleChromeでは、ボタンが「押された」状態のままになり、しばらくすると、GoogleChromeの「このページは応答しません」という強制終了ダイアログが表示されます。
OS X上のMozillaベースのブラウザでは、ボタンをクリックするとブラウザが少し「考え」ますが、最終的にはフォームを送信します。 ただし、属性ラベルのリストの一部のみが管理コントローラーに送信されます。つまり、他のラベルは送信されないため、ユーザーは最初の75〜100個のラベルしか編集できません。
2番目の動作についても説明しているWindowsユーザーからのレポートがあります(ブラウザーは非特定です)
明らかな答えは、パフォーマンスの低いjavascriptを調査するか、(Grouch Marxスタイルで)「それを行わない」ことです。そのページのJavaScriptのプロファイリング/発掘に時間を費やす前に、これに対する既知の修正、または問題の原因に関する特定の知識があることを期待していました。
Magento CE 1.7.x、それが重要な場合。
更新: Javascriptのパフォーマンスの問題は問題です。これらは、で繰り返される膨大な数の入力フィールドが原因です。
js/prototype/validation.js
特にこのtrycatchブロックでは
try {
if(this.options.stopOnFirst) {
result = Form.getElements(this.form).all(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this);
} else {
result = Form.getElements(this.form).collect(function(elm) {
if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
return true;
}
return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
}, this).all();
}
} catch (e) {
}
ただし、これを短絡して関数をtrueに戻しても、すべてのラベルを保存しないという動作は持続します。