#javascript #performance #internet-explorer #prototypejs
#javascript #Производительность #internet-explorer #prototypejs
Вопрос:
Я использую галерею изображений js на сайте magento. Поскольку Magento использует prototype, я использовал prototype для этой галереи; это простое приложение, и я подумал, что нет необходимости загружать библиотеку jQuery только для этого одного элемента.
Если вы посмотрите на http://web74.justhost.com / ~ persia28 / в IE8 или менее, переходы между слайдами галереи настолько медленные, что текст с одного слайда остается видимым в течение короткого времени, когда следующий слайд находится на месте.
Я знаю, что IE — это мусор с js, но я подумал, что степень медлительности здесь экстремальна, даже для IE.
Я не хочу загружать библиотеку jQuery только для этой галереи, Magento и так достаточно много; поэтому, если дело дойдет до этого, я мог бы выбрать просто размещение текста в изображениях, а не в HTML.
В любом случае, было бы здорово услышать вашу мудрость.
Большое спасибо, и вот js-код для галереи.
var i = 0;
// The array of div names which will hold the images.
var image_slide = new Array('image-1', 'image-2', 'image-3');
// The number of images in the array.
var NumOfImages = image_slide.length;
// The time to wait before moving to the next image. Set to 3 seconds by default.
var wait = 4000;
// The Fade Function
function SwapImage(x,y) {
$(image_slide[x]).appear({ duration: 1.5 });
$(image_slide[y]).fade({duration: 1.5});
}
// the onload event handler that starts the fading.
function StartSlideShow() {
play = setInterval('Play()',wait);
$('PlayButton').hide();
$('PauseButton').appear({ duration: 0});
}
function Play() {
var imageShow, imageHide;
imageShow = i 1;
imageHide = i;
if (imageShow == NumOfImages) {
SwapImage(0,imageHide);
i = 0;
} else {
SwapImage(imageShow,imageHide);
i ;
}
}
function Stop () {
clearInterval(play);
$('PlayButton').appear({ duration: 0});
$('PauseButton').hide();
}
function GoNext() {
clearInterval(play);
$('PlayButton').appear({ duration: 0});
$('PauseButton').hide();
var imageShow, imageHide;
imageShow = i 1;
imageHide = i;
if (imageShow == NumOfImages) {
SwapImage(0,imageHide);
i = 0;
} else {
SwapImage(imageShow,imageHide);
i ;
}
}
function GoPrevious() {
clearInterval(play);
$('PlayButton').appear({ duration: 0});
$('PauseButton').hide();
var imageShow, imageHide;
imageShow = i-1;
imageHide = i;
if (i == 0) {
SwapImage(NumOfImages-1,imageHide);
i = NumOfImages-1;
} else {
SwapImage(imageShow,imageHide);
i--;
}
}
Комментарии:
1. Вы пробовали выполнять простой тест, выполняя ту же анимацию с помощью jQuery? Как эти два сравниваются в IE <8? Примечание: приятный дизайн 🙂
2. Спасибо WTK. Я не проводил тест. Я всегда предпочитаю использовать jQuery, но я решил не использовать его здесь по причинам, указанным выше. Я бы предположил, что это было бы, по крайней мере, немного лучше, но если это ситуация с непрозрачностью IE8, предложенная ниже, вероятно, это не полное решение.
Ответ №1:
Я посмотрел на сайт, и он не кажется медленным, для запуска требуется столько же времени. Похоже, что непрозрачность текста не меняется до конца анимации, а затем просто скрывается. Когда я смотрю с IE7, он работает нормально, что является подсказкой, в IE8 есть другой способ создания прозрачных пленок.
Magento по-прежнему поставляется с Prototype 1.6.0, хотя я знаю, что Prototype 1.6.1 исправляет несколько ошибок IE8, а Prototype 1.7 также исправляет некоторые ошибки IE9. Вы можете попробовать обновить Prototype и Scriptaculous в js/prototype/
js/scriptaculous/
каталогах and . Я не знаю, включена ли эта точная проблема, поэтому вам следует сделать резервную копию перед перезаписью файлов, если это не сработает, у вас будет что-то для отката.
Комментарии:
1. Спасибо заводной компьютерщик. Я попробую обновить. У меня есть дополнительный план действий на случай непредвиденных обстоятельств, так что эта проблема достаточно близка к решению. Спасибо.