Форум программистов, компьютерный форум, киберфорум
GuardCat
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Исследование ресурсоёмкости setTimeout

Запись от GuardCat размещена 30.05.2012 в 15:03
Показов 4188 Комментарии 5

Я решил провести исследование ресурсоёмкости setTimeout, чтобы ответить на следующие вопросы:
  1. Ощутимо ли много памяти требует setTimeout?
  2. Имеет ли смысл то, как назначается setTimeout: когда несколько их назначается одновременно или же назначение идёт поэтапно: следующий не ранее того, как отработал предыдущий?
  3. Очищает ли JS память от отработанных таймеров?
  4. Можно ли очистить память, используя clearTimeout по отработавшим таймерам?

Начнём:
1. Загружаем Chrome(19), запускаем консоль и встроенный диспетчер задач. Вкладка потребляет 14 084КБ.
2. Создадим рабочие функции.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function littleTest() {console.log(1)} // Просто функция для навешивания по таймеру.
 
  function test(fn, loop) { // Функция навесит указанную функцию loop раз на setTimeout и вернёт каждый идентификатор таймера.
    var result = [  ];
    for (x = 0; x <= loop; x++) {
      result.push(setTimeout(fn, 4000))   
    }
    return result;
  }
  
  function detach(arr) { // Функция примет массив идентификаторов таймеров и очистит таймеры.
    for(x = 0; x < arr.length; x++) {
      clearTimeout(arr[x])
    }
  }
И объявим их в консоли.
Ого! Браузер подоптимизировал память! Уже 13 288КБ.

3. Запускаем
JavaScript
1
 var ids = test(littleTest, 100000);
Смотрим память, как только браузер навесил все таймауты. 46 384КБ! Ого!

4. И смотрим память после отработки таймеров. 23 224КБ. Хм. Ну вот, отстрелил таймеры сборщик мусора, потребление снизилось в два раза от максимума. Но оно всё же значительно больше стартового. Какие-то обломки остались и не оптимизировались.

5. Попробуем очистить память по методу kalabuni. У нас есть все id всех таймеров. А очистим-ка мы их!
JavaScript
1
detach( ids );
Бесполезно. Наоборот, работа цикла отъела ещё небольшой кусочек памяти. 23 284КБ.

Выводы раз:
  1. Использование большого количества таймеров приводит к увеличению потребления памяти, верно.
  2. Но очистку javascript производит самостоятельно, хотя и не идеально.
  3. clearTimeout по отработавшим таймерам бесполезен.
Посмотрим на последовательное назначение таймеров, т.е. когда таймер назначается только после того, как отработал предыдущий.
6. Загружаем Chrome(19), запускаем консоль и встроенный диспетчер задач. Вкладка потребляет 13 056КБ.

7. Запустим последовательно 100 000 таймеров.
JavaScript
1
2
3
4
5
6
var n = 0;
function setHundredTimers() {
  console.log(1);
  if (n++ < 100000) setTimeout( setHundredTimers, 1 );
}
setHundredTimers();
И поснимаем скриншоты...
На двух тысячах, примерно на половине и в конце.
Выводы:
  1. Есть небольшое потребление памяти, связанное с работой цикла. 13 920КБ потребляет вкладка.
  2. Почти в 10 раз меньше потребляется памяти, чем при одновременном назначении обработчиков.
  3. Нет растущих утечек памяти, можно оставлять комп на длительное время (более длительное, чем в предыдущем случае).

Итого: следует назначать следующий setTimeout не раньше, чем отработает предыдущий — так вы сбережёте и память и ресурсы процессора.
Миниатюры
Нажмите на изображение для увеличения
Название: 001.jpg
Просмотров: 636
Размер:	70.5 Кб
ID:	732   Нажмите на изображение для увеличения
Название: 002.jpg
Просмотров: 645
Размер:	85.6 Кб
ID:	733   Нажмите на изображение для увеличения
Название: 003.jpg
Просмотров: 479
Размер:	83.7 Кб
ID:	734  

Нажмите на изображение для увеличения
Название: 004.jpg
Просмотров: 551
Размер:	85.1 Кб
ID:	735   Нажмите на изображение для увеличения
Название: 005.jpg
Просмотров: 625
Размер:	86.8 Кб
ID:	736   Нажмите на изображение для увеличения
Название: 006.jpg
Просмотров: 543
Размер:	56.3 Кб
ID:	737  

Нажмите на изображение для увеличения
Название: 007.1.jpg
Просмотров: 650
Размер:	66.9 Кб
ID:	738   Нажмите на изображение для увеличения
Название: 007.2.jpg
Просмотров: 717
Размер:	67.5 Кб
ID:	739   Нажмите на изображение для увеличения
Название: 007.3.jpg
Просмотров: 588
Размер:	66.3 Кб
ID:	740  

Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 5
Комментарии
  1. Старый комментарий
    Аватар для Alex_pac
    Да ладно копейки все считать. Щас в среднем у браузеры у всех потребляют от 200 мб RAM
    а то бывает и до 400 доходит.

    При сегодняшнем прогрессе, думаю не стоит учитывать что там JS на странице не успел очистить.
    Запись от Alex_pac размещена 30.05.2012 в 17:10 Alex_pac вне форума
  2. Старый комментарий
    Аватар для GuardCat
    Цитата Сообщение от Alex_pac
    Да ладно копейки все считать...
    Если речь о странице, которую открывают на пару минут --- соглашусь. Хотя даже в этом случае, при установке большого количества таймеров одновременно, комп начинает тормозить.

    А если речь о приложении, которое должно быть открыто длительное время, то экономию считаю целесообразной.
    Запись от GuardCat размещена 30.05.2012 в 22:06 GuardCat вне форума
  3. Старый комментарий
    Аватар для snake32
    В очередной раз убеждаюсь что писать клинтские долгоиграющие программы лучше без использования браузеров. Лучше юзать С++/Object Pascal. JS не канает
    Спасибо!
    Запись от snake32 размещена 31.05.2012 в 11:47 snake32 вне форума
  4. Старый комментарий
    Аватар для Alex_pac
    клинтские долгоиграющие программы
    поскольку автор сам сделал вывод, что при последовательном назначении таймер не будет потреблять память, так как таймер будет каждый раз самоуничтожаться после того как отработал.

    Поэтому:

    JS можно использовать для "долгоиграющих программ"
    Запись от Alex_pac размещена 31.05.2012 в 12:13 Alex_pac вне форума
  5. Старый комментарий
    Про копейки вы не правы. Не у всех сильные машины сейчас,я пересел обратно с хрома на оперу именно из-за потребления памяти. Большое спасибо тем, кто не ложит хер и заботится о потребляемых ресурсах
    Запись от ai-zer размещена 31.05.2012 в 21:12 ai-zer вне форума
 
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru