В Firefox 16 заработает инкрементальный сборщик мусора

    16-я версия браузера Firefox, релиз которой намечен на 9 октября, содержит серьёзное обновление движка JavaScript. Сборщик мусора перейдёт от стратегии «stop-the-world», когда на время уборки полностью замораживается работа скриптов, к инкрементальной стратегии, когда сборка мусора происходит в несколько этапов. Хотя в целом работа сборщика мусора будет отнимать немного больше времени, отзывчивость браузера существенно улучшится, так как элементы интерфейса, анимация и игры не будут больше подвисать на несколько сотен миллисекунд на время уборки.

    Посмотреть, как работает новый сборщик мусора, и поэкспериментировать с его параметрами можно, установив бета-версию Firefox (инструкция для Ubuntu). На странице about:config настройки находятся в ветке javascript.options.mem.gc_*. Увидеть результат своих действий можно на этой демо-страничке, которая пытается обновлять график с частотой 60 кадров в секунду. На логарифмической шкале в миллисекундах показано реальное время задержки между двумя кадрами. С отключенной инкрементальной сборкой мусора (javascript.options.mem.gc_incremental установлен в false) периодически возникают хорошо заметные задержки в 300 — 500 миллисекунд. Если инкрементальная сборка включена, задержки редко бывают выше 50 — 80 миллисекунд, что почти незаметно. Кроме того, следить за состоянием памяти и уборкой мусора можно с помощью дополнения MemChaser.

    Работа над инкрементальной сборкой мусора началась больше года назад и сейчас идёт очень активно. В 17 и 18 версиях ожидается дальнейшее улучшение характеристик сборщика мусора. Кстати, отзывчивости браузера Firefox посвящён отдельный раздел на сайте MozillaWiki, где собрана воедино вся информация, касающаяся воспринимаемой скорости, задержек и подвисаний Firefox.

    Источник — blogs.mozilla.org/javascript.

    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 23

      0
      Ещё бы был способ определять, что именно фризит браузер…
        +1
        Вроде бы в новом профилировщике есть даже специальная опция «jank» — если включить, профайлер анализирует моменты, когда страничка подвисает.
          0
          Интересная штука, ждём A «Doctor» extension that would detect if the user's browser periodically hangs for more than 500 ms and provide a UI notification with some profile data. The profile data can either be reported to Mozilla to correlate proble
          0
          MemChaser умеет писать в лог…
          Или вы хотите определять это программно?
            0
            Я понятия не имею почему эпизодически браузер зависает и по 10 минут скроллит страницу. Это может быть браузер, может быть какое-то расширение, может быть конкретная страница. В хромиуме проще диагностировать, но он по другим причинам не подходит.
              0
              Самые большие тормоза в работу браузера вносят плагины антивирусов, адблоки, флеш. В первом случае помогает отключение, во втором stylish, в третьем flashblock
                0
                Расскажите, пожалуйста, как друг с другом соотносятся Adblock Plus и Stylish?
                  0
                  В правильных руках делают одно и то же, но гораздо менее затратно использовать Stylish
                  0
                  Антивирусов нет, флэш всё же в другом процессе работает, а вот адблок, да, стоит.
                    0
                    Адблок года три назад тормозил фокс более чем в два раза. Поэтому лучше его снести.
                      0
                      Скорость как таковая особо не интересует, но вот именно фризы без видимых причин, когда фокс не реагирует даже на кнопки закрытия окна…
                        0
                        Да-да-да, именно так и проявляется. Переключение табов может идти с зависанием на секунд тридцать, скролл больших страниц залипает.
                  +1
                  Убейте плагин контейнер в диспечере задач и фриз сразу же пройдет. Скорее всего.
                    0
                    Не проходит, 100% CPU жрёт именно сам firefox.
                      0
                      Я в курсе, у меня он так же жрет все что только сможет. Но как только убиваю флеш, сразу же прекращает жрать и работает тихо да спокойно.
              +3
              Вот это отличная новость. Безсмысленные фризы уже утомили.
              Ещё бы добавить хотя бы базовую возможность управлять сборщиком.
                +1
                Кстати, почему пример не работает в IE и Опера?
                  0
                  Кто-то забыл добавить
                  (function() {
                      var lastTime = 0;
                      var vendors = ['ms', 'moz', 'webkit', 'o'];
                      for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
                          window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
                          window.cancelAnimationFrame = 
                            window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
                      }
                   
                      if (!window.requestAnimationFrame)
                          window.requestAnimationFrame = function(callback, element) {
                              var currTime = new Date().getTime();
                              var timeToCall = Math.max(0, 16 - (currTime - lastTime));
                              var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
                                timeToCall);
                              lastTime = currTime + timeToCall;
                              return id;
                          };
                   
                      if (!window.cancelAnimationFrame)
                          window.cancelAnimationFrame = function(id) {
                              clearTimeout(id);
                          };
                  }());
                  

                  via Paul Irish
                0
                А память новый сборщик будет кушать так же жадно?
                Если не ошибаюсь, именно регулярный проход сборщика по всем объектам непомерно раздувает working set.
                  0
                    0
                    У меня все фризы у ff в linux прошли раз и навсегда, когда полностью поместил весь профайл на ram disk.
                    видимо он спешит писать на диск (sqlite) всякие очень нужные данные, замораживая gui.
                    ( диск wd caviar blue 1TB 7200, сам диск ок, больше ничего не тормозит, ssd не пробовал, дисковый кэш ff отключен в пользу squid )
                      0
                      Иногда подвисает видео на ютубе, совсем на чуть-чуть, но заметно. Надеюсь, теперь перестанет подвисать.
                        0
                        Так это же флеш, а сборщик мусора для JS. Так что не факт)

                      Only users with full accounts can post comments. Log in, please.