Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Клиентские сценарии. Язык JavaScript. Таймеры




http://www.rusdoc.ru/articles/17239/

На самом фундаментальном уровне чрезвычайно важно представлять, как работают таймеры в javascript. Очень часто работа таймеров кажется противоречащей интуиции в силу того, что все они запущены внутри одного потока. Но давайте начнем с характеристики трех основных функций, которые мы используем, чтобы создавать и управлять нашими таймерами.

· var id = settimeout(fn, delay); — создает единичный таймер, срабатывание которого выливается в вызов определенной функции после указанной задержки. Данный метод возвращает уникальный id, с помощью которого можно в дальнейшем отменить таймер.

· var id = setinterval(fn, delay); — похож на предыдущий метод settimeout, но совершает вызовы заданной функции постоянно (каждый раз с заданной задержкой), пока не будет отменен.

· clearinterval(id);, cleartimeout(id); — принимают в качестве параметр id таймера (возвращаемый двумя предыдущими методами) и предотвращают дальнейшие вызовы таймера.

Для того чтобы уяснить внутренние аспекты работы таймеров, стоит учесть одну важную деталь, которую стоит осветить: задержка при выполнении таймера не гарантируется. Так как весь javascript исполняется в браузере в один поток, то асинхронные события (например, клики мышкой или таймеры) запускаются только по возникновению «окна» в этом основном потоке (обработчики событий и вызываемые функции, фактически, «встраиваются» в основной поток выполнения).

  • У javascript-движка операции выполняются в один поток, что заставляет асинхронные события ждать своей очереди на исполнение.
  • settimeout и setinterval имеют фундаментальные различия в исполнении асинхронного кода.
  • Если таймер не может выполниться в запланированное время, то он будет отложен до следующей возможной точки запуска (которая может быть достаточно далека от первоначального ожидаемого момента).
  • В случае выставления интервалов, функции могут запускаться друг за другом, безо всякой задержки, если их выполнение (или другие асинхронные события) «растянут» их на достаточное время (равное или большее, чем обозначенная задержка).

На данный момент важными мне кажутся два вывода. Первое, если вы планируете регулярно совершать какое-то действие (например, опрашивать сервер), лучше всего это будет производить через setinterval: этот метод будет выполнен, в общем случае, быстрее, чем settimeout, и не будет накапливаться в стек. Однако, во-вторых, если речь идет о нагруженных вычислениях, когда вы экономите процессорное время (может быть, в ущерб своевременности обновления интерфейса), то ваш выбор — это settimeout. Он гарантирует, что между запусками заявленной функции пройдет времени не меньше, чем требуется.

 





Поделиться с друзьями:


Дата добавления: 2015-01-03; Просмотров: 534; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.