<rmcreative>

RSS

Устраняем утечки памяти в JavaScript IE6

9 июня 2008

Хэджер Вэнг искал способы устранения утечек памяти в IE6 и нашёл относительно новый способ, рассмотренный в китайском блоге.

/**
     * Используем try ... finally для предотвращения утечки памяти
     */
    function createButton() {
      var obj = document.createElement("button");
      obj.innerHTML = "click me";
      obj.onclick = function() {
        //handle onclick
      }
      obj.onmouseover = function() {
        //handle onmouseover
      }
 
 
      //вот оно самое :)
      try {
        return obj;
 
      } finally {
        obj = null;
      }
    }

Комментарии RSS

  1. №340
    Octane
    Octane 10 июня 2008 г., 1:29:04

    Странно, почему obj не уничтожается после завершения функции

  2. №341
    lusever
    lusever 10 июня 2008 г., 9:39:21

    Видимо, чтобы нормально работать с кнопкой.

  3. №342
    Алекс
    Алекс 10 июня 2008 г., 18:10:49

    Особо приколола ссылка на китайский блог:)))

  4. №391
    DenisO
    DenisO 30 июня 2008 г., 3:56:27

    Было бы более актуально почитать подобное про IE7. Где такое есть?

  5. №392
    Sam
    Sam 30 июня 2008 г., 11:40:30

    В седьмом утечек почти нет. Можно проверить:

    JavaScript Memory Leak Detector

  6. №1784
    lol
    lol 12 авг. 2009 г., 23:46:04

    Нет тут не каких утечек просто в IE объект удаляется после вставки на страницу это удаление реализовано в фунции appendChild а так как вставки не было то объект и весит в памяти Автор этого поста просто мудак

  7. №1785
    lol
    lol 12 авг. 2009 г., 23:50:52

    После вызова appendChild эта херня вобще не нужна

    //вот оно самое :)
    try {
      return obj;
    } finally {
      obj = null;
    }
  8. №1786
    MPX
    MPX 12 авг. 2009 г., 23:53:22

    Да развелось говно кодеров

  9. №2186
    JavaScriptCoder
    JavaScriptCoder 21 янв. 2010 г., 10:36:28

    Сами вы мудаки. Красивое решение.

    Смысл в том что ссылка на obj сохраняется в контексте функций навешанных

    на obj.onclick и obj.onmouseover. Это называется замыканием.

    Для того что обнулить ссылку на объект, требуется обязательно в конце функции createButton сделать obj = null.

    Но сделать мы этого не можем потому как нам этот obj надо вернуть из самой функции.

    Вот для этого то и делается сея конструкция try.

  10. №2300
    Сергей
    Сергей 17 февр. 2010 г., 13:24:23

    Давеча пришлось заниматься проблемой утечек памяти. Но проект большой, за всеми телодвижениями не уследишь. Поэтому искал детекторы ликов. Ссылка из #5 комментария - нерабочая. Автор что-нибудь посоветует по этому поводу?

  11. №4937
    Некромант
    Некромант 09 июля 2011 г., 3:57:42

    Советую застрелится

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.