2013-11-17 2 views
3

Я читал в документах emscripten, которые emscripten компилирует в asm.js-оптимизации по умолчанию, но если я открываю скомпилированный код, я не могу найти никакого «использования asm;» как его получить? Должен ли я добавить его вручную или я не компилирую ошибку?Emscripten, кажется, не использует asm.js

В настоящее время я использую «emcc main.c -o out.html» для компиляции, а также с флагом -02.

+0

Знаете ли вы, что «используйте asm;» не делает ничего, поэтому вы можете его опустить? –

+0

Я видел такую ​​библиотеку, как [this] (https://github.com/tonyg/js-scrypt/blob/master/browser/scrypt.js), которая при использовании печати в js-консоли asm.js скомпилирована и в факт, что они выглядят довольно быстро. Код, который я компилировал, не имеет никакого использования asm, и на самом деле они не скомпилированы. :/ –

+3

'emcc -O2' должен испускать код asm.js. Вы на последнем emscripten? Вы видите ошибки в командной строке? –

ответ

1

Не лучшее решение, но я заменил «почти asm» на «use asm», и он работал с Firefox (был правильно скомпилирован и измерим быстрее).

Я также долго искал решение, чтобы заставить Emscripten сделать это сам, но не нашел решения.

2

Это по дизайну. Иногда он генерирует (см. source code) "almost asm" вместо "use asm", что отключает все оптимизации asm.js. Это происходит, когда скомпилированный код использует некоторые функции (например, this v8 issue), которые не реализованы в браузерах. Для проекта, над которым я сейчас работаю, я заменил "almost asm" на "use asm" для Firefox и оставил его как для Chrome, потому что "use asm" вызвал сильное замедление при запуске.

Таким образом, не стоит просто заменять "almost asm" на "use asm", но иногда это работает нормально. Вы должны тщательно протестировать свое приложение во всех версиях браузера (но убедитесь, что вы тестируете с отключенным devtools), который вам нужно поддерживать - и если он работает, это означает, что у вас есть счастливый случай, который уже реализован: перейдите и замените.