У меня возникает проблема в системе Magento, где сохранение большого количества атрибутов либо вообще не работает, либо работает только частично. Это похоже на проблему, связанную с javascript, и я надеялся, что у кого-то из Qaru есть некоторая "известная наука" для решения этой ситуации или может указать мне в правильном направлении.
Основная проблема заключается в том, что система Magento имеет более 250 ярлыков атрибутов атрибутов цвета. Если пользователь-администратор пытается их устранить, выполнив следующие
- Навигация в каталог → Атрибуты → Управление атрибутами
- Выбор цветовых атрибутов
- Нажав на вкладку "Управление ярлыками/вкладками"
- Редактирование последней опции метки
- Нажав "Сохранить и продолжить редактирование"
Случается одна из двух вещей.
В Google Chrome на OS X кнопка находится в состоянии "нажата", и через некоторое время Google Chrome "Эта страница не реагирует" появляется диалоговое окно "Kill".
В браузере на базе Mozilla на OS X нажатие кнопки заставляет браузер "думать" немного, но в конце концов он представляет форму. Однако в контроллер администратора отправляется только неполный список ярлыков атрибутов. Это означает, что пользователь может редактировать только первые 75 - 100 ярлыков, поскольку другие ярлыки никогда не отправляются.
У меня есть отчеты от пользователей Windows, описывающих второе поведение (браузеры неспецифичны)
Очевидные ответы - либо исследовать плохо исполняемый javascript, либо (стиль Гроуха Маркса) "не делайте этого". Прежде чем тратить время на профилирование/экскавацию javascript на этой странице, я надеялся, что есть какое-то известное решение для этого или конкретные знания о том, что вызывает проблему.
Magento CE 1.7.x, если он сопрягается.
Обновление: Проблемы с производительностью Javascript - это красная селедка. Они вызваны массивным количеством полей ввода, которые повторяются через
js/prototype/validation.js
В частности, в этом try catch block
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, поведение сохранения всех ярлыков сохраняется.