Где утечка памяти в JavaScript / jquery? - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть два синглета:

Поиск - выполняет функции поиска

Тема - представление тем (результатов поиска)

var Search = new function () {

    this.GetTopics = function () {

        var query = $("#globalSearch").val();

        $.ajax({
            url: 'Search/GetTopics',
            dataType: 'json',
            data: { query: query },
            success: function (result) {

                var links = $("<ul />")
                            .click(function (event) {
                                Search.OpenTopicContent(event);
                            });

                $.each(result.Topics, function (key, value) {
                    links.append(
                        Topic.FormatTopic(value.Name, value.Id, value.Rank)
                    );
                });

                $("#searchResult").empty();
                $("#searchResult").html(links);
        }
    }

}();

Это тема синглтона:

var Topic = new function () {

    this.FormatTopic = function (name, id, rank) {

        var li = $("<li />")
            .attr("id", id)
            .addClass("{rank:" + rank + "}")

        var topicName = $("<p />")
            .append(name)
            .addClass("tName");

        return li.append(topicName);
    }

}();

Вот вызов

$("#searchButton").click( function () { Search.GetTopics() });

Итак, Search.GetTopics () должен отформатировать список тем и представить их в div # searchResult.

Количествотемы могут быть около 100.

Проблема в том, что каждый поисковый вызов увеличивает использование памяти на 1-3Мб.Это происходит в IE8 и Firefox.

Это RIA с долго выполняющимися сценариями, поэтому важно ограничить использование памяти.

В чем проблема?Как я могу оптимизировать код, рефакторинг?Разумно ли использовать синглтоны таким образом?

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

И вызовы Ajax, и .empty () будут пропускать память в IE. Смотрите следующее:

http://blog.linkibol.com/2010/05/07/did-you-know-that-jquery-leaks-memory-like-a-fountain/

Утечка памяти jQuery с удалением DOM

0 голосов
/ 23 сентября 2010

Профиль памяти Google chrome r может вам помочь.

Таким образом, вы можете видеть использование памяти вашими объектами.

...