/
index.md
22 lines (13 loc) · 4.54 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
title: asm.js
slug: Games/Tools/asm.js
---
{{GamesSidebar}}
[Asm.js](http://asmjs.org/) - это подмножество JavaScript, имеющее более высокую оптимизацию. В этой статье описаны возможности asm.js, улучшения которые оно даёт, где и как это можно применять, а также дополнительные ресурсы и примеры.
## Что такое asm.js?
Это небольшое, более строгое подмножество JavaScript которое ограничивает стандартный язык только конструкциями, типа `while`, `if` и данными в виде чисел, именованных функций, и другими простыми вещами. Оно не разрешает использование объектов, строк, и всего, что требует больших нагрузок. [Asm.js](http://asmjs.org/) напоминает C во многих вещах, но он является полностью валидным кодом на JavaScript и работает на всех имеющихся движках. Он позволяет JS движкам, поддерживающим [asm.js](http://asmjs.org/), оптимизировать такой код и даёт компиляторам, типа Emscripten, чёткое определение того, как нужно компилировать. Мы покажем, как asm.js код выглядит, чем он полезен и как с ним работать.
Это подмножество JavaScript уже автоматически используется во многих движках, использующих технологию компиляции [Just-In-Time (JIT)](https://ru.wikipedia.org/wiki/JIT-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F). Однако, указав явный стандарт, мы можем улучшить оптимизацию такого кода и получить максимальную производительность. Благодаря этому, упрощается совместная работа нескольких JS движков, потому что легче договориться о стандартах. Идея в том, что этот вид кода должен работать очень быстро в каждом движке, и если это не так, это ошибка, и есть чёткая спецификация, что именно движки должны оптимизировать.
Это также делает [asm.js](http://asmjs.org/) достаточно простым для людей, которые пишут компиляторы высокопроизводительного кода под web. Они могут обратиться к спецификации [asm.js](http://asmjs.org/), чтобы найти более быстрые паттерны для него. [Emscripten](https://github.com/kripken/emscripten), компилятор C/C++ в JavaScript, выдаёт код [asm.js](http://asmjs.org/), работающий в некоторых браузерах с производительностью, близкой к машинному коду.
Кроме того, если движок специально распознает код [asm.js](http://asmjs.org/), то можно сделать ещё больше оптимизаций. На данный момент Chrome ([статус](https://www.chromestatus.com/feature/5053365658583040)) и Firefox обладают поддержкой asm.js. Firefox имеет поддержку передовых фич asm.js
## В общем об asm.js
[asm.js](http://asmjs.org/) - это вспомогательное подмножество языка JavaScript. Он имеет предсказуемый уровень производительности, т.к. ограничен только лишь некоторыми строгими типами и конструкциями. Рабочие характеристики близки скорее к машинному коду, чем к стандартам JS. Использование этого подмножества уже поддерживается главными веб браузерами. Работа [asm.js](http://asmjs.org/) также зависит от браузера и от оборудования.