Комментарии 33
Как работать с DOM/BOM?
0
НЛО прилетело и опубликовало эту надпись здесь
Сначала они доделают Минимально Жизнеспособный Продукт, а после этого займутся менее приоритетными фичами, к которым отнесли DOM — http://webassembly.org/docs/future-features/
Пример игры http://webassembly.org/demo/
Пока подразумевается что wasm объект подключается к js и работа с ним ничем не отличается от обычного js
Пример игры http://webassembly.org/demo/
Пока подразумевается что wasm объект подключается к js и работа с ним ничем не отличается от обычного js
+1
ReferenceError: WebAssembly is not defined
0
Нужно активировать в браузере поддержку
В хроме открыть chrome://flags/#enable-webassembly
В файрфоксе about:config и там найти javascript.options.wasm
0
WebAssembly доступен только в ночных сборках.
0
Уже давно в основной ветке и хрома и файрфокса под флагом, нужно только включить
+1
Включил, но все равно WebAssembly undefined.
0
В основной ветке Хрома я получил
WebAssembly.compile(): Wasm decoding failedResult = expected version 0c 00 00 00, found 0d 00 00 00 @+4Нужна именно канарейка похоже.
0
Все верно, для этого wasm (версия из статьи) нужна канарейка, а сам wasm в основной ветке работает нормально, потому что запускается эта демка
http://webassembly.org/demo/
http://webassembly.org/demo/
0
Сразу бросились в глаза 2 ошибки производительности в fiboJsMemo
- нельзя переопределять аргументы
- нельзя динамически добавлять свойства к объекту
Почему автор не написал этот вариант также как и си. Не умышленно ли часом?
const memo = new Array(10000);
function fiboJsMemoOpt (num) {
if (num <= 1) return 1;
const x = memo[num];
if (x !== void 0) {
return x;
}
return memo[num] = fiboJsMemoOpt(num - 1) + fiboJsMemoOpt(num - 2);
}
Js x 11,501,607 ops/sec ±2.53% (70 runs sampled)
Js memoization x 465,102 ops/sec ±0.82% (86 runs sampled)
Js memoization opt x 59,388,502 ops/sec ±2.89% (82 runs sampled)
Главное, проценты у авторa получились красивые.
+5
НЛО прилетело и опубликовало эту надпись здесь
Согласен с вашим комментарием, только разве что оптимизация с void 0 уже не требуется, разницы между
и
никакой нет
const x = memo[num];
if (x !== void 0) {
return x;
}
и
if (memo[num])
return memo[num];
}
никакой нет
fiboJsMemoOptVar1: 8.424ms
fiboJsMemoOptVar2: 7.873ms
0
Перепроверил, показалось странным, так как обе функции на текущем v8 движке должны работать одинаково, обе они успешно оптимизируются и странно, что такая большая разница между вашей функций и из топика.
В итоге нужна 1 единственная маленькая корректировка в оригинальную функцию и разница практически не будет
В оригинале вместо
надо написать (что в данном случае намного правильнее чем {})
И производительность вырастает
В итоге нужна 1 единственная маленькая корректировка в оригинальную функцию и разница практически не будет
fiboJsMemoOpt: 77.259ms
fiboJsMemoMyMods: 88.285ms
В оригинале вместо
memo = memo || {};
надо написать (что в данном случае намного правильнее чем {})
memo = memo || [];
И производительность вырастает
0
Самое интересное то, что смотреть на результаты эти не имеет смысла. Во-первых си-код не валиден, ибо всегда будет возвращать ноль. Во-вторых что измеряет memoization? Ничего. Чтение значения из памяти.
Ну вы нашли типичную причину проблем жаваскрипта — непредсказуемость. Почему не написал? Спорный вопрос, но факт есть факт — никаких причин к замдлению в 100раз нет.
Результаты васма вы не показали. Да и это ничего не меняет, только то, что васм не особо отличается от ЖС и его нативность лишь миф. Результаты в 60кк вызовов(в секунду) функций с одним обращением к «памяти» просто смешны.
А так же важно то, что ни цикл с одной операцией, ни обращение к памяти — ни есть то, что имеет смысл сравнивать. Наиболее близкая к реальности реализация — это рекурсия. Ведь большинство кода на том же жс есть не более чем вызов примитивных функций в гигантских кол-вах.
Почему автор не написал этот вариант также как и си. Не умышленно ли часом?
Ну вы нашли типичную причину проблем жаваскрипта — непредсказуемость. Почему не написал? Спорный вопрос, но факт есть факт — никаких причин к замдлению в 100раз нет.
Главное, проценты у авторa получились красивые.
Результаты васма вы не показали. Да и это ничего не меняет, только то, что васм не особо отличается от ЖС и его нативность лишь миф. Результаты в 60кк вызовов(в секунду) функций с одним обращением к «памяти» просто смешны.
А так же важно то, что ни цикл с одной операцией, ни обращение к памяти — ни есть то, что имеет смысл сравнивать. Наиболее близкая к реальности реализация — это рекурсия. Ведь большинство кода на том же жс есть не более чем вызов примитивных функций в гигантских кол-вах.
+2
А если надо получить число фибонначи при n = 10001?
0
Я конечно не специалист, но почему C, C++, Rust, Swift — низкоуровневые языки?
0
return memo[n] = fibonacciMemo(n - 1) + fibonacciMemo(n - 2);
что бы мемоизация работала, разве не надо так
fibonacciMemo(n - 2) + fibonacciMemo(n - 1);
разве сначала не левый, а затем правый операнд вызывается? 0
На этой странице, кстати, вы можете попробовать всё сами.Я получаю ошибку в консоли:
bundle.js:66 Uncaught (in promise) ReferenceError: WebAssembly is not defined
at fetch.then.then.buffer (bundle.js:66)
0
НЛО прилетело и опубликовало эту надпись здесь
Как часто вы считаете числа Фибоначчи в JS'e?
Тест очень синтетический и не показывает абсолютно ничего.
Тест очень синтетический и не показывает абсолютно ничего.
0
Интересно еще сравнить с pnacl.
0
Как убить интерес к теме? Начните с чисел Фибоначчи.
+3
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
WebAssembly – путь к новым горизонтам производительности