Ошибка нехватки памяти - не могу найти причину - PullRequest
0 голосов
/ 10 июля 2010

У меня есть этот код, который был сделан из советов здесь давным-давно.

var tm
var tn;
var rot = true;
var rot2 = true;
var th = 482;
var tmh = 0;
var $paneTarget = $('#lyr1');

var slideshow = {
    delay: 5000,
    actions:[],
    run: function() {
        if (slideshow.actions.length) {
            var current = slideshow.actions.shift(); 
            current(); 
            slideshow.actions.push( current ); 
            tm = setTimeout(slideshow.run, slideshow.delay); 
        }
    },
    play: function(n) {
        if (n!=true)
            $(document).clearQueue();
        if (slideshow.actions.length) {
            tm = setTimeout(slideshow.run, slideshow.delay); 
        }
    },
    pause: function() {
        clearTimeout(tm);
        $(document).clearQueue();
    }
};

$(".sideimg").each(function(){
    var that = this;
    slideshow.actions.push(function(){
        if (tn != "") {
            out(tn);
        **}**
        over($(that).attr("id"));
        n = $(that).attr("id").substring($(that).attr("id").indexOf("img")+3,$(that).attr("id").length)
        info("image.asp?id="+n+"","info");
        var $target = $paneTarget.find('#'+$(that).attr("id"));
        var timg = document.getElementById($(that).attr("id"));
        if (timg.offsetTop>th||timg.offsetTop+timg.height>th||timg.offsetTop<tmh) {
            $paneTarget.stop().scrollTo( $target , 800 );

            tmh = timg.offsetTop;
        }
        $("#rimg").fadeOut("slow",function () {
            slideshow.pause;
            $("#rimg").attr("src",$(that).attr("bsrc")).load(function(){
                $("#rimg").attr("alt",$(that).attr("alt"));
                $("#rimg").fadeIn("normal");
                slideshow.play;
            });

        });
        tn = $(that).attr("id");
    });
});

ошибка: «недостаточно памяти в строке: 37» эта строка выделена жирным шрифтом} (жирный шрифт не работает, потому что он находится внутри строки кода, поэтому ищите **}**)

оно не появляется после первого цикла или даже второго - требуется много времени, пока оно не появится ... возможно, 20 минут?

я запустил его в IE, получил сообщение ... было в Chrome и, кажется, все в порядке ... было в FF с firebug, чтобы увидеть DOM, но без ошибки через час

Я действительно не знаю, что делать ...

обновление - я использую jquery 1.4.1, и ошибка в библиотеке jquery (после 22-23 минут зацикливания изображений) я все еще не знаю, что делать

Ответы [ 2 ]

0 голосов
/ 10 июля 2010

Проблемы, которые я вижу:

slideshow.pause;
slideshow.play;

Должно быть

slideshow.pause();
slideshow.play();

n не определено: все, что вы хотите с ним, определите его в правильной области.

Наконец, я не знаю, что такое over() и out();

0 голосов
/ 10 июля 2010

В идеале все объекты, выделенные вашим кодом, должны быть должным образом освобождены сборщиком мусора JS. Однако существуют различия между реализацией сборки мусора в разных браузерах, что объясняет, почему вы видите эту ошибку только в IE.

В частности, я знаю по крайней мере одну ошибку в более ранних версиях IE (6 и ниже, не знаю, есть ли она в 7+), где объекты с циклическими ссылками не собираются должным образом, что приводит к утечке памяти. Я подозреваю, что вы попали либо в эту конкретную ошибку, либо в нечто подобное.

К сожалению, у меня нет простого решения для вас; вам может потребоваться немного изменить структуру своего кода, чтобы избежать утечек памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...