thedeemon: (office)
[personal profile] thedeemon
Ну что ж, друзья мои, по крайней мере в Firefox'e для числодробилок в браузере нет языка лучше, чем С++. Но только там, правда.

Задействовал сегодня Emscripten :: С++ -{clang/LLVM}-> ASM.js.
Чтобы его поставить уж было расчехлил свой линукс, но оказалось, что проще всего его поставить как раз в винде: установка в один клик, и все сразу работает из коробки. Использовать С++ код из JS оказалось весьма просто, когда разберешься что к чему. Ключевой момент: ASM.js работает в пределах одного единственного массива фиксированной длины. Просто так передать ему пару других массивов из JS не выйдет, нужно выделять для них память в этой вот куче ASM.js, копировать туда, потом оттудова читать результат. В Firefox'e компиляцией ASM.js кода занимается отдельный специализированный ahead of time конпелятор, в то время как остальные браузеры относятся к нему как к обычному JS.

В итоге на тесте с декодированием картинки на моем ноуте текущая ситуация такая (время декодирования в миллисекундах и размер кода):
             Chrome 38:     Firefox 33:    IE 11:       Size:

Flash           57              58           58          6 KB
Dart to JS      60              70           95        135 KB
C++  to ASM.js  54              43          149        212 KB
Haxe to JS      52              49          fail        12 KB


Погонять ASM.js. Все тесты.

Успел даже на малюсеньком тесте столкнуться с разницей браузеров в исполнении/неисполнении JS: что работало в Хроме, падало в Firefox'e: он видите ли не дает responseType у XHR устанавливать до вызова open(). А сгенеренный Haxe'ом код не взлетел в IE: не могу, говорит, скастить HTMLInputElement в HTMLInputElement (хвала динамической типизации, где сравнение типов может делать что угодно кроме того, что надо!).

Итого, если ориентироваться на Firefox, то рулит С++ и ASM.js, в Хроме рулит чистый JS (который фактически и получается из Haxe), а если нужно, чтобы был компактный код, который стабильно и шустро работает везде, то по-прежнему рулит Flash. Ну а если еще про айфоны всякие вспомнить, то... проще плюнуть и никогда больше к этому проклятому болоту, фронтэнду, не приближаться.

Date: 2014-11-14 05:54 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
Там, где падает в IE, бага в хаксёвом instanceof.
Т.к. o instanceof t == true.
Но по спеке ES5, typeof host-object может быть либо object, либо function, а хакся считает, что только function, и ложит болт на результат instanceof.

Если запатчить эту строку, выходит такая картина:

(Win 8.1 x64, Core i7-4770, в фоне запущено штук 5 виртуалок, впрочем, особой погоды однопоточному JS они не делают)

dart2js CR 64, FF 49, IE 64
asm2js: CR 60, FF 28, IE 95
haxe2js: CR 34, FF 32, IE 37
Edited Date: 2014-11-14 05:59 pm (UTC)

Date: 2014-11-14 06:12 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Если убрать каст, у меня в IE вышло 62 ms. Т.е. заметно быстрее других JS вариантов в IE, но медленнее других браузеров.

Date: 2014-11-14 06:26 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
Так оно и у меня медленнее - 37 мс супротив 34 и 32.

Сейчас погасил виртуалки, перебенчал, вышло 33 (хром), 29 (фф) и те же 37 (ие).

При этом asmjs быстрее не стал, что любопытно. Грешу на всякие эффекты от кэшей.
Edited Date: 2014-11-14 06:26 pm (UTC)

Profile

thedeemon: (Default)
Dmitry Popov

April 2026

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
2627282930  

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 24th, 2026 08:57 pm
Powered by Dreamwidth Studios