Асинхронные операции с синхронным интерфейсом для Javascript

Так что в последнее время я много слышал о node.js. Сторонники, кажется, рекламируют это как второе пришествие Христа. Меня это заинтересовало, и я решил прочитать об этом.

Я наткнулся на несколько источников с эталонными показателями, и он отлично справляется с обработкой большого количества одновременных запросов. Но способ написания кода с «обратным вызовом» кажется мне очень «неестественным». Небольшое исследование привело меня к Eventlet, который позволяет мне выполнять асинхронные операции при написании кода, очень похожего на синхронный (следовательно, делая меня более продуктивным).

Но Node.js кажется намного более мощным, чем Eventlet (http://codescience.wordpress.com/2011/09/05/non-blocking-io-node-js-and-pythons-eventlet). Я предполагаю, что это из-за двигателя V8 JS. Есть ли предложение Java/Javascript, которое позволяет мне выполнять асинхронные операции при написании синхронного кода, что дает мне лучшее из обоих миров — производительность разработчика наряду с производительностью JVM/V8?


person tldr    schedule 07.06.2012    source источник


Ответы (3)


Поддержка Node.js может поддерживать синтаксис async-await, позволяющий запускать асинхронные операции с синхронно выглядящим кодом.

Проверь это:

https://github.com/koush/node/wiki/%22async%22-support-in-node.js

person Benjamin Gruenbaum    schedule 07.06.2012
comment
Возможно, стоит отметить, что официальная версия Node.js не поддерживает это; это ответвление проекта, реализующее предлагаемые изменения, и оно устарело на несколько месяцев. - person Michelle Tilley; 08.06.2012
comment
Спасибо, приятно знать! Любые другие предложения? Не обязательно быть плагином/расширением node.js. Все, что работает на JVM/V8. - person tldr; 08.06.2012

Есть несколько проектов, направленных на внедрение такого стиля в Node.js. IcedCoffeeScript, ответвление CoffeeScript — один из примеров (но требует, чтобы вы написали CoffeeScript). Другой — node-fibers.

Лично я экспериментировал с IcedCoffeeScript (поскольку я уже использую CoffeeScript), и, похоже, он работает довольно хорошо (см. -и-после), но отладка CoffeeScript немного утомительна, хотя в следующей версии CoffeeScript должна быть поддержка сопоставления источников, которая, как мы надеемся, упростит эту задачу.

person Michelle Tilley    schedule 07.06.2012

Вы должны проверить один из моих проектов, он называется Sharpnr.js. Здесь также используется синтаксис await-async, но это простая библиотека JavaScript, которая работает в любом браузере.

Библиотека в настоящее время находится в стадии бета-тестирования, но она стабильна и поддерживает почти все операторы (например, циклы, переключение, если) и хорошо работает с существующими библиотеками (например, jQuery).

Синтаксис почти идентичен версии C#:

var getAsync = async(function(url) {
  var result = await; $.get(url);
  $("#test").html(result);
});
getAsync("http://www.sharpnrjs.com");

Рабочий пример на jsfiddle.

Вы можете загрузить библиотеку с github.

person ajuhos    schedule 03.07.2012