Comments 13
Насколько знаю v8 достаточно умен и в указанном примере не будет сохранять контекст замыкания для Task. Поправьте, если ошибаюсь
a(arg1, function() {
var x1;
b(arg2, function() {
var x2;
setInterval(function Task() {
console.log('tik');
}, interval);
});
})
+2
А как насчет eval?
Как V8 поймет, что там в eval, строка может динамически формироваться любая!
function a(x2) {
var x1 = 1;
setInterval(function Task() {
console.log(eval("x1 + x2"));
}, 1000);
}
a(2);
Как V8 поймет, что там в eval, строка может динамически формироваться любая!
0
Если в функции используется eval, то уровень её оптимизации снижается, чтобы избежать таких вот потерь замкнутых переменных. Иначе не используемые замкнутые переменные будут уничтожены.
Пруф: Дэвид Фленаган — Javascript. Подробное руководство (2013) п. 4.12.2
Пруф: Дэвид Фленаган — Javascript. Подробное руководство (2013) п. 4.12.2
+1
а если console.log = eval произойдет где-то?
p.s. проверил тот код — память не освобождается (видимо как раз по этой причине)
p.s. проверил тот код — память не освобождается (видимо как раз по этой причине)
0
в ECMAScript 3, если eval вызывается под любым другим именем (var a = eval; a("");) возбуждается исключение EvalError.
в ECMAScript 5, если eval вызывается под другим именем, в качестве окружения используется глобальный объект (window), а локальные переменные внутри компилируемой функции недоступны. Если же eval вызывать под своим именем, то локальные переменные доступны, а контекст выполнения тот же, что и у вызывающего кода.
Ну IE<=8, как всегда, отличился, у него eval под другим именем исполняется в локальном контексте.
в ECMAScript 5, если eval вызывается под другим именем, в качестве окружения используется глобальный объект (window), а локальные переменные внутри компилируемой функции недоступны. Если же eval вызывать под своим именем, то локальные переменные доступны, а контекст выполнения тот же, что и у вызывающего кода.
Ну IE<=8, как всегда, отличился, у него eval под другим именем исполняется в локальном контексте.
0
p.s. если удалить console.log из Task, то замкнутые переменные уничтожаются и память освобождается
0
Вот об этом и писал, а если есть прецедент, то и рассматриваемая ситуация имеет место быть.
0
Мне стиль изложения показался очень сложным. Все время себя заставлял читать дальше, и даже закончив пошел в гугл искать для себя более ясное изложение.
Читая, хотелось понять почему Q а не async? В чем преимущества и недостатки? Какова производительность?
Вот например habrahabr.ru/post/168929/ автор отзывается не очень хорошо о Q именно из за проблем с производительностью.
Читая, хотелось понять почему Q а не async? В чем преимущества и недостатки? Какова производительность?
Вот например habrahabr.ru/post/168929/ автор отзывается не очень хорошо о Q именно из за проблем с производительностью.
+4
Отвечаю самому себе.
Вот тут howtonode.org/promises очень хорошая статья. Просто и понятно.
О ссылке что выше, где человек рассказывает о проблемах с производительностью в Q. Резюме он его просто не умел готовить. В последствии исправил свой код и вышел на приемлемую производительность.
Вот тут howtonode.org/promises очень хорошая статья. Просто и понятно.
О ссылке что выше, где человек рассказывает о проблемах с производительностью в Q. Резюме он его просто не умел готовить. В последствии исправил свой код и вышел на приемлемую производительность.
0
Я использую эту библиотеку
Судя по тестам, она в 10 раз быстрее Q
Там же есть сравнения с async.
github.com/petkaantonov/bluebird/blob/master/benchmark/stats/latest.md
Судя по тестам, она в 10 раз быстрее Q
Там же есть сравнения с async.
github.com/petkaantonov/bluebird/blob/master/benchmark/stats/latest.md
0
Вы извините, но со всеми вашими метафорами и аналогиями сохранить нить повествования крайне сложно. По-моему лучше прочитать readme у них на гитхабе, там все как-то проще и информативнее описано: github.com/kriskowal/q
0
А почему никто не поднимает здесь тему нативных обещаний в ECMAScript 6? Уже давно есть полифил для ноды и старых браузеров.
0
Sign up to leave a comment.
Давать обещания – это ювелирное искусство