Javascript.RU

Прячем асинхронность в Narrative JavaScript

Narrative JavaScript - расширение Javascript (прекомпилируемое в обычный Javascript), которое делает асинхронные вызовы блокирующимися. При помощи Narrative JavaScript можно реализовать функцию sleep() и описывать сложные асинхронные последовательности запросов обычным, линейным кодом без каллбэков.

Narrative JavaScript реализован через компилятор, который переводит специфичные "фишки" расширения в обычный, понимаемый браузерами JS-код.

В JavaScript - код не может блокироваться и ждать наступления события. Событие должно обрабатываться отдельным, асинхронным обработчиком. Иногда это удобно, но часто заставляет разбивать с виду простую последовательность действий на множество по сути ненужных функций.

Narrative JavaScript добавляет "yielding operator" для функций, который блокирует выполнение до наступления события. Функция приостанавливается, пока не наступит событие, а затем продолжает выполнение в точке, где произошла остановка.

Это позволяет вместо сложной последовательности асинхронных обработчиков - писать простой, линейный, читабельный код.

Библиотека появилась как результат долгой работы по написанию и отладке сложных AJAX-приложений.

Narrative JavaScript состоит из компилятора и runtime библиотеки. Вы пишете код как линейный Narrative JavaScript, используя yielding operator, и компилятор распарсивает и переводит этот код в обычный (асинхронный) JavaScript. Затем Вы размещаете откомпилированный код на сервере вместе с runtime-библиотекой.

Эта функция sleep приостанавливает выполнение на millis секунд БЕЗ поедания CPU и блокирования остальных процессов.

function sleep(millis) {
	var notifier = new EventNotifier();
	setTimeout(notifier, millis);
	notifier.wait->();
}

С ее помощью можно реализовать анимацию с паузами между кадрами:

function animate(element, property, endValue, duration, frequency) {    
	// calculate animation variables
	var frameCount = Math.ceil(duration/frequency);
	var startValue = parseInt(element.style[property], 10);
	var distance = endValue - startValue;
	var jumpSize = Math.ceil(distance/frameCount);
	
	// do the animation
	for (var i = 0; i < frameCount - 1; i++) {
		var nextValue = startValue + (jumpSize * i);
		element.style[property] = nextValue + "px";
		// note the yielding operation
		sleep->(frequency);
	}
	
	element.style[property] = endValue + "px";
}

Если Вас заинтересовало это краткое описание - сайт библиотеки находится на http://www.neilmix.com/narrativejs/doc/

Там ее можно скачать, а также почитать более подробные примеры и документацию.


Автор: Гость (не зарегистрирован), дата: 13 декабря, 2008 - 17:49
#permalink

нитуя не понял, надо было бы хоть рабочий код простой паузы привести


Автор: Гость (не зарегистрирован), дата: 3 февраля, 2009 - 13:55
#permalink

Че-то не совсем понял о чем речь в статье


Автор: Ntropy, дата: 8 октября, 2009 - 13:05
#permalink

Это перевод статьи подробности вы можете почитать по приведённой ссылке.


Автор: Александр Михалицын, дата: 28 октября, 2009 - 16:24
#permalink

Кто-нибудь пробовал разобраться как эта штука работает?
Мне лениво, хотя надо бы разобраться...


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 14 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Статьи и мероприятия

Будьте в курсе наших последних новостей!

Ответьте, пожалуйста..
О чем бы вы хотели услышать на конференции по javascript?

На какие темы послушать доклады? Конференция состоится в середине мая.


Последние обсуждения на форуме
Forum
Последние комментарии