recursal/MDN huggingface dataset:
Асинхронные скрипты для asm.js
==============================

Каждая средняя или большая игра должна компилировать код asm.js как часть асинхронного скрипта, чтобы дать браузеру максимальную гибкость для оптимизации процесса компиляции. В Gecko асинхронная компиляция позволяет движку JavaScript компилировать asm.js из основного потока когда игра загружается, и кешировать сгенерированный машинный код, так что игру не нужно компилировать при последующих загрузках (начиная с Firefox 28). Чтобы увидеть разницу, переключите `javascript.options.parallel_parsing` в `about:config`.

Написание асинхронного скрипта
------------------------------

Получить асинхронную компиляцию легко: при написании JavaScript просто используйте `async` атрибут следующим образом:
```

<script async src="file.js"></script>
```


или, чтобы сделать то же самое через скрипт:
```

var script = document.createElement('script');
script.src = "file.js";
document.body.appendChild(script);
```


(скрипты создаются из скрипта по умолчанию `async`.) Стандартная оболочка HTML, которую генерирует Emscripten, создаёт последнее.

Когда асинхронный не асинхронный?
---------------------------------

Две распространённые ситуации, в которых сценарий не асинхронен (как определено спецификацией HTML ):


```html
<script async src="file.js"></script>
```


а также


```js
const script = document.createElement("script");
script.src = "file.js";
document.body.appendChild(script);
```


Оба считаются «встроенными» скриптами, компилируются и запускаются сразу

Что если ваш код находится в строке JS? Вместо использования `eval` или `innerHTML`, оба из которых запускают синхронную компиляцию, вы должны использовать BLOB-объект с URL объекта:
```

var blob = new Blob([codeString]);
var script = document.createElement('script');
var url = URL.createObjectURL(blob);
script.onload = script.onerror = function() { URL.revokeObjectURL(url); };
script.src = url;
document.body.appendChild(script);
```


Настройка `src` вместо настройки `innerHTML` делает этот скрипт асинхронным.
Head (Заголовок)
================

**Head** (**Заголовок**) это часть HTML документа, которая содержит метаданные о документе, такие как автор, описание, ссылки на CSS или JavaScript файлы, которые должны быть применены в HTML.

Смотрите также
--------------

* Документация элемента `<head>` на MDN
* Тег <head> в учебнике по HTML от MDN
Агент пользователя
==================

**Пользовательский агент** (*user agent*, UA), или **агент пользователя**, это компьютерная программа, представляющая пользователя и выполняющая действия от его лица, например, браузер в контексте Всемирной паутины.

Агентом пользователя может быть не только браузер, но и бот, удаляющий веб-страницы, менеджер закачек или другое приложение, использующее Веб. Выполняя запросы к серверу, браузеры, чтобы была возможность их идентифицировать, снабжают каждый запрос так называемой строкой пользовательского агента (UA-строкой), завёрнутой в HTTP-заголовок `User-Agent`. Это строка идентифицирует браузер, сообщает номер его версии и информацию об операционной системе.

Спам-боты, менеджеры закачек и некоторые браузеры нередко шлют подложные UA-строки, чтобы выдать себя за другие клиенты. Эта ситуация известна под названием *подмена или подделка пользовательского агента* (*user agent spoofing*).

Строчку пользовательского агента можно прочитать на стороне клиента с помощью JavaScript, обратившись к свойству `navigator.userAgent.`

Типичная UA-строка выглядит так: `"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0"`.

Смотрите также
--------------

### Общие сведения

* User agent на Википедии
### Техническая справка

* User agent заголовок запроса в спецификации RFC 2616
Прогрессивные веб приложения
============================

Прогрессивные веб-приложения — это термин, используемый для описания современного состояния разработки веб-приложений. Включает в себя использование стандартов веб-сайтов/приложений, которые используют все лучшие части Интернета, такие как возможность обнаружения поисковыми системами, возможность ссылки через URL работу с различными форм-факторами, и их усиление с современными API-интерфейсами (такими как Service Workers и Push) и функциями, которые предоставляют другие преимущества, обычно присущие нативным приложениям.

Эти функции включают в себя возможность установки, работу в автономном режиме, а также простоту синхронизации и повторного подключения пользователя с сервера.

Узнать больше
-------------

* App Center MDN
* Progressive web apps на Google Developers
WHATWG
======

WHATWG (*Рабочая группа по вебу, гипертексту, приложениям и технологиям*) (*англ. Web Hypertext Application Technology Working Group*) сообщество, которое поддерживает и разрабатывает веб стандарты, включая DOM, Fetch и HTML. Сотрудники Apple, Mozilla и Opera основали WHATWG в 2004.

Узнать больше
-------------

### Общие знания

* Сайт WHATWG
Global object
=============

Глобальный объект - это объект, который всегда существует в глобальной области видимости (en-US).

В JavaScript всегда определён глобальный объект. В веб-браузере, когда скрипты создают глобальные переменные, они создаются как свойства глобального объекта. (В Node.js это не так.) Interface глобального объекта зависит от контекста, в котором выполняется скрипт.К примеру:

* В веб-браузере любой код, который не запускается скриптом явно как фоновую задачу, имеет `Window` в качестве своего глобального объекта. Это покрывает большую часть JavaScript-кода в сети.
* Код, работающий в `Worker` имеет `WorkerGlobalScope` (en-US) объект в качестве своего глобального объекта.
* Скрипты, работающие в Node.js имеют объект, который называется `global` в качестве своего глобального объекта.
Объект `window` в Браузере
--------------------------

Объект `window` - Глобальный Объект в браузере. Доступ к любым Глобальным Переменным или функциям может быть получен как к *свойствам* объекта `window`.

### Получение доступа к Глобальным Переменным


```js
var foo = "foobar";
foo === window.foo; // Возвращает: true
```


После определения Глобальной Переменной `foo`, мы можем получить доступ к его значению прямо с объекта `window`, использую имя переменной `foo` в качестве имени свойства Глобального Объекта `window.foo`.

#### Объяснение

Глобальная Переменная `foo` была сохранена в объекте `window`, подобно следующему примеру:


```js
foo: "foobar";
```

### Получение доступа к Глобальным Функциям


```js
function greeting() {
  console.log("Hi!");
}

window.greeting(); // Тоже самое что и обычный вызов: greeting();
```


Пример выше показывает как Глобальные Функции хранятся в качестве свойств объекта `window`. Мы создали Глобальную Функцию `greeting` и вызвали её с помощью объекта `window`.

#### Объяснение

Глобальная функция `greeting` была сохранена в объекте `window`, подобно следующему примеру:


```js
greeting: function greeting() {
  console.log("Hi!");
}
```


* MDN Web Docs Glossary
    + global scope (en-US)
    + object
* `Window`
* `WorkerGlobalScope` (en-US)
* `global`
MathML
======

**MathML** (XML приложение) - это открытый стандарт для представления математических выражений на веб-страницах. В 1998 году W3C впервые рекомендовал MathML для представления математических выражений в browser. MathML имеет и другие применения, включающие научный контент и синтез голоса.
Кривая Безье
============

**Кривая Безье** — это математически описанная кривая, используемая в компьютерной графике и анимации. В vector images они используются для создания плавных кривых, которые можно бесконечно сильно масштабировать.

Кривая описывается массивом контрольных точек, которых должно быть, как минимум, две. В веб-графике и анимациях используются кривые Безье с 4 контрольными точками P0, P1, P2 и P3.

Для того чтобы нарисовать кривую, необходимо нарисовать две воображаемые линии, одна из которых будет иметь координаты P0 и P1, а другая — P1 и P2. Затем крайние точки этих линий начинают непрерывно двигаться к следующим точкам. Третья воображаемая линия рисуется с начальной точкой, непрерывно двигающейся по первой линии, и конечной точкой, двигающейся по второй линии. На этой воображаемой линии рисуется точка, постепенно движущаяся от начала линии до самого конца. Кривая, которую эта точка будет описывать называется кривая Безье. Ниже приведена анимация, демонстрирующая процесс создания кривой:

![Drawing a Bézier curve](https://upload.wikimedia.org/wikipedia/commons/d/db/B%C3%A9zier_3_big.gif)

Подробнее
---------

### Общая информация

* Кривая Безье на Wikipedia
### Подробнее по теме

* Кубические временные функции Безье в CSS (en-US)
* `keySplines (en-US)` SVG attribute
* Генератор кубических кривых Безье
Запрещённое имя заголовка ответа
================================

Запрещённое имя заголовка ответа это имя HTTP заголовка (`Set-Cookie` или `Set-Cookie2`), который не может быть изменён программно.

See also
--------

* Fetch specification: forbidden response-header name
* Forbidden header name (Glossary)
XHR (XMLHttpRequest)
====================

`XMLHttpRequest` (XHR) это JavaScript API для создания AJAX запросов. Методы этого объекта предоставляют возможность отправки сетевых запросов между browser и server (en-US).

Узнать больше
-------------

### Общие знания

* Полезная информация о XMLHttpRequest
* Разница между синхронной и асинхронной передачи сообщений
### Техническая информация

* Объект `XMLHttpRequest`
* документация MDN о том, как использовать XMLHttpRequest
Регулярные выражения
====================

**Регулярные выражения** (*regex*) - это правила, определяющие, какие последовательности символов появляются в поиске.

Регулярные выражения реализованы в разных языках, но наиболее известной является реализация в Perl, которая породила собственную экосистему реализаций, называемых PCRE (*Perl Compatible Regular Expression*). В Интернете JavaScript предоставляет ещё одну реализацию регулярных выражений через объект `RegExp`.

Материалы для изучения
----------------------

### Общие

* Интерактивный учебник
* Визуализированное Регулярное Выражение
### Технические

* Написание регулярных выражений в JavaScript
Метаданные
==========

**Метаданные** - это, в самом простом определении, данные, что описывают данные. Например, HTML-документ - это данные, но HTML также может содержать метаданные в элементе `<head>`, который описывает документ, например кто его написал и его резюме.

Смотрите также
--------------

### Метаданные в HTML

* Элемент `<meta>` в MDN
Time to interactive
===================

**Время до интерактивности** (англ. Time to Interactive, TTI) - это нестандартизированная метрика веб-производительности, которая определяется как момент времени, когда завершилась последняя долгая задача (en-US), после которой следовало 5 секунд бездействия сети и основного потока.

TTI, предложенный WICG в 2018 году, был предназначен для предоставления показателя, описывающей состояние, когда страница или приложение содержит полезный контент, а основной поток простаивает и может свободно реагировать на взаимодействия с пользователем, включая регистрацию обработчиков событий.

#### Предостережение

TTI получается путём использования информации из `Long Tasks API` (en-US). Несмотря на то, что TTI доступен в некоторых инструментах мониторинга производительности, на момент написания этой статьи он не является частью какой-либо официальной веб-спецификации.

Смотрите также
--------------

* Definition of TTI from Web Incubator Community Group
* Time to Interactive — focusing on human-centric metrics by Radimir Bitsov
* Tracking TTI
WebKit
======

*WebKit* это фреймворк который показывает правильно отформатированные веб-страницы на основе их разметки. Apple Safari и большинство мобильных браузеров зависят от Webkit (Webkit это очень портативный и легко настраиваемый фреймворк).

WebKit начал жизнь как разветвление библиотек **KDE's KHTML** и **KJS**, и с тех пор много частных лиц и компаний внесли свой вклад в его развитие (включая: KDE, Apple, Google, и Nokia).

WebKit это торговая марка Apple, а сам фреймворк раздаётся под BSD-образной лицензией. Однако, 2 важных компонента попадают под лицензию LGPL (en-US): это **WebCore** - визуальная библиотека и движок **JavaScriptCore**.

Читайте также
-------------

### Технический справочник

* WebKit CSS extensions (en-US)
JPEG
====

**JPEG** (произносится «*джейпег*», англ.. Joint Photographic Experts Group, по названию организации-разработчика) — является широко используемым методом сжатия с потерями данных для цифровых изображений.
Apple Safari
============

Safari (Сафари) - это веб-браузер разработанный компанией Apple, входит в состав операционных систем macOS и iOS. Safari работает на движке WebKit.

Узнайте больше
--------------

### Общая информация

* Safari на сайте apple.com
### Техническая информация

* Проект WebKit
* WebKit ночная сборка
* Сообщить об ошибке в Safari
Объект
======

Объект относится к структуре данных, содержит в себе данные и инструкции по работе с ними. Объекты могут обозначать реальные вещи, например: машину, яблоко, человека или даже карту к сокровищам с её координатами и инструкциями о том, как добраться до этих сокровищ.

JavaScript, Java, C++, Python, и Ruby это языки программирования которые относятся к объектно ориентированным языкам (ООП)

Подробнее
---------

### Общие сведения

* `Object` в справочнике JavaScript
* Object data structures in JavaScript
Главная ось
===========

Главная ось в flexbox определяется направлением, установленным в свойстве `flex-direction`. Это свойство может принимать одно из четырёх значений:

* `row`
* `row-reverse`
* `column`
* `column-reverse`

Если вы выберите `row` или `row-reverse`, то главная ось будет проходить вдоль направления строк.

![In this image the flex-direction is row which forms the main axis](/ru/docs/Glossary/Main_Axis/basics1.png)

Выберите `column` или `column-reverse`, и главная ось будет проходить сверху вниз в направлении блоков.

![](/ru/docs/Glossary/Main_Axis/basics2.png)

На главной оси вы можете контролировать размеры flex элементов, добавляя к ним свободное пространство с помощью свойства `flex` на самих элементах. Также, вы можете контролировать пространство между и вокруг элементов свойством `justify-content`.

Узнать больше
-------------

### Связанные свойства

* `flex-basis`
* `flex-direction`
* `flex-grow`
* `flex-shrink`
* `justify-content`
* `flex`
### Дальнейшее чтение

* CSS Flexbox Guide: *Basic Concepts of Flexbox*
* CSS Flexbox Guide: *Aligning items in a flex container*
* CSS Flexbox Guide: *Controlling Ratios of flex items along the main axis (en-US)*
Высокоуровневый язык программирования
=====================================

Высокоуровневый язык программирования имеет **существенную абстракцию** от деталей работы компьютера. Он предназначен для простого понимания людьми и поэтому должен быть переведён другим программным обеспечением. В отличие от низкоуровневых языков программирования, он может использовать элементы естественного языка или может автоматизировать (или даже полностью скрыть) важные области вычислительных систем, делая процесс разработки более простым и более понятным по сравнению с языком более низкого уровня. Количество предоставляемой абстракции определяет, насколько "высокоуровневым является" язык программирования.

Идея языка, автоматически переводимого в машинный код, но ближе к человеческой логике, была внедрена в компьютерные науки в 1950-х годах, особенно благодаря работе Джона Бэкуса (IBM), который руководил командой разработавшей первый высокоуровневый язык программирования: Фортран. За это нововведение Бэкус был удостоен премии Тьюринга.
Функции первого класса
======================

Говорят, что в языке программирования есть **функции первого класса**, если с функциями в этом языке обращаются как с любой другой переменной. Например, передают в качестве аргумента другим функциям, возвращают из другой функции или присваивают переменной в качестве значения.

Примеры
-------

### Присвоение функции в качестве значения переменной


```js
const foo = () => {
  console.log("foobar");
};

// Вызов функции с использованием переменной
foo(); // Выведет в консоль строку "foobar"
```


Мы присвоили *анонимную функцию* переменной, а затем использовали эту переменную для вызова функции, добавив круглые скобки `()` в конце.

**Примечание:** Даже если у вашей функции было имя, вы можете использовать имя переменной для её вызова. Именование функции будет полезно при отладке кода, *но это не повлияет на то, как мы её вызываем*.

### Передача функции в качестве аргумента


```js
function sayHello() {
  return "Привет, ";
}

function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}

// Передача функции `sayHello` в качестве аргумента функции `greeting`
greeting(sayHello, "JavaScript!"); // Выведет в консоль строку "Привет, JavaScript!"
```


Мы передали нашу функцию `sayHello()` в качестве аргумента функции `greeting()`, это показывает, что функцию можно рассматривать в качестве значения.

**Примечание:** Функция, которую передают в качестве значения другой функции (в данном примере `sayHello()`), называется *колбэк-функцией*.

### Возвращение функции


```js
function sayHello() {
  return () => {
    console.log("Привет!");
  };
}

// Вызов анонимной функции, которую возвращает функция `sayHello`. Обратите внимание на повторяющиеся два раза круглые скобки
sayHello()(); // Выведет в консоль строку "Привет!"
```


В этом примере мы возвращаем функцию из другой функции, это возможно, потому что *функции в JavaScript могут быть значениями.*

**Примечание:** Функция, которая возвращает функцию или принимает другие функции в качестве аргументов, называется *функцией высшего порядка*.

Смотрите также
--------------

* Функции первого класса на Википедии
* Глоссарий
    + Переменная
    + Функция
    + Колбэк-функция
ARPANET
=======

Компьютерная сеть **ARPANET** (Advanced Research Projects Agency NETwork) является одной из первых компьютерных сетей, была создана в 1969 как надёжная среда для передачи конфиденциальных военных данных и для подключения ведущих исследовательских групп по всей территории Соединённых Штатов. Изначально ARPANET использовала NCP (Network Control Protocol - протокол сетевого управления), а затем первую версию интернет-протокола или пакета TCP / IP, что делает ARPANET выдающейся частью зарождающегося Интернета. ARPANET была закрыта в начале 1990 года.
First paint
===========

**Первое отображение** - время между переходом на страницу и моментом, когда браузер отображает первые пиксели на экране. Является частью Paint Timing API.

Смотрите также
--------------

* First meaningful paint
* First contentful paint
* Paint Timing API
Контекст приложения
===================

Контекст приложения - это контекст просмотра верхнего уровня, к которому применяется манифест.

Если контекст приложения создаётся в результате запроса агента пользователя на переход к глубинному связыванию, агент пользователя должен немедленно перейти к глубинному связыванию с включённой заменой. Иначе говоря, при создании контекста приложения, агент пользователя должен немедленно перейти к начальному URL-адресу с включённой заменой.

Обратите внимание, что начальный URL-адрес не обязательно является значением элемента start\_url: пользователь или агент пользователя мог изменить его при добавлении приложения на главный экран или в закладки.
XHTML
=====

**XHTML** по отношению к XML - это так же, как HTML по отношению к SGML. Таким образом, XHTML - язык разметки который подобен HTML, но с более строгим синтаксисом. Две версии XHTML были закончены (окончательно сформулированы) W3C:

* XHTML 1.0 - это HTML4 повторно сформулированный как XML-приложение , и с обратной совместимостью с HTML в ограниченных случаях.
* XHTML 1.1 - это модульная версия XHTML, которая не является обратно совместимой с HTML.

Третья версия, XHTML 2 - содержит существенные изменения словаря элементов (has significant changes to the element vocabulary).

Для получения дополнительной информации о XHTML, см.:

* Wikipedia's XHTML article
* Sending XHTML as text/html considered harmful
### Инструменты

* Markup validation service (W3C)
* Standards-Compliant Authoring Tools
### Смотрите также

* HTML
* Namespaces
Git
===

**Git** — это свободная с открытым исходным кодом распределённая *система управления версиями* (от англ. Source Code Management (SCM (en-US)). Она облегчает написание кода с использованием распределённых команд разработчиков. Её отличие от предшествующих систем управления версиями — способность выполнять общие операции (ветвление, фиксация изменений, и т.д.) на вашем локальном компьютере, без необходимости изменять главный репозиторий или даже не имея прав на запись в него.

Узнать больше
-------------

### Общие знания

* Официальный веб-сайт документации
* GitHub, графический хостинг для гит проектов
Compile
=======

Компиляция - это процесс преобразования компьютерной программы, написанной на данном языке, в эквивалентную программу на другом языке. Компилятор - это программа для выполнения этой задачи. Иногда эту задачу называют также "assembling" или "build", что, как правило, свидетельствует о том, что выполняется не только компиляция, например, упаковка в двоичном формате.

Обычно компилятор преобразует язык более высокого уровня, такой как C или Java который понимает человек, в машинный язык, такой как ассемблер, который понимает процессор. Некоторые компиляторы, которые переводят между языками схожего уровня, называются транспайлерами или кросс-компиляторами, например, для компиляции с TypeScript на JavaScript. Они считаются инструментами производительности.

 Большинство компиляторов работают либо перед исполнением (AOT), либо во время исполнения (JIT). Как программист, вы обычно вызываете AOT-компиляторы из командной строки или из IDE (en-US). Самый известный "gcc" - это один из примеров.
 JIT компиляторы обычно прозрачны для вас и используются для повышения производительности. Например, в браузере: Firefox' SpiderMonkey JavaScript Engine имеет встроенный JIT, который скомпилирует JavaScript на сайте в машинный код, пока вы его просматриваете, чтобы он работал быстрее. Такие проекты, как WebAssembly, работают над тем, чтобы сделать это ещё лучше.

Смотрите также
--------------

### Общие сведения

* Компилятор - Wikipedia
* The GNU Compiler Collection (GCC)
### Обучающие ресурсы

* Введение в компиляторы
* Большой список учебных материалов на StackOverflow
CSP
===

CSP (Политика безопасности контента) используется для обнаружения и смягчения определённых типов атак, связанных с веб-сайтами, таких как XSS (en-US) и инъекции данных.

Реализация основана на заголовке HTTP с именем `Content-Security-Policy` (en-US).

Узнать больше
-------------

### Техническая информация

* Content Security Policy на MDN
Browsing context
================

**Browsing context** (контекст просмотра) - это окружение, в котором браузер отображает `Document` (на сегодняшний день обычно это вкладки, однако, возможно окно или frame внутри страницы).

Каждый контекст просмотра имеет определённый источник, источник текущего активного документа и историю, которая содержит все отображённые документы в соответствующем порядке.

Взаимодействие между контекстами просмотра очень ограничено. Между контекстами просмотра из одного источника может быть открыт и использован `BroadcastChannel`.

Learn more
----------

### Техническая документация

* Browsing context на WHATWG
* Browsing context на W3C
Порт
====

Для подключённого к сети компьютера с IP address, **порт** – это конечная точка входа для коммуникаций. Порты обозначаются числами, и до 1024 каждому порту по умолчанию назначен некоторый протокол.

Например, порт по умолчанию для протокола HTTP – 80, а порт для протокола HTTPS – 443, таким образом HTTP-сервер ожидает входящие запросы на данных портах. Каждый интернет протокол имеет порт по умолчанию: SMTP (en-US) (25), POP3 (en-US) (110), IMAP (en-US) (143), IRC (en-US) (194) и так далее.
Структура данных
================

**Структура данных** (data structure) — способ представления множества данных как связного целого, имеющего определённый программный интерфейс (методы доступа и манипулирования над элементами этих данных).