RxJS Flashcards
RxJS
Бібліотека для роботи з асинхронними потоками даних, в центрі знаходиться обєкт Observable і набір операторів для роботи з цим обєктом.
Императивное и декларативное программирование
Императивное программирование — это описание того, как ты делаешь что-то, а декларативное — того, что ты делаешь.
Императивный - это такой стиль программирования, при котором вы описываете, как добиться желаемого результата.
Декларативный стиль - стиль, в котором вы описываете, какой именно результат вам нужен.
При этом декларативность всегда существует с примесью императивности.
Наверное, правильно называть один стиль «более декларативным», а другой — «более императивным».
Императивные: C, C++, Java.
Декларативные: SQL, HTML.
Смешанные (могут быть таковыми): JavaScript, C#, Python.
Вот типичные примеры на SQL и HTML:
SELECT * FROM Users WHERE Country=’Mexico’;
<h1>Declarative Programming</h1> <p>Sprinkle Declarative in your verbiage to sound smart</p>
Они декларативны, заявляя, что должно быть сделано, а не как. Вы описываете желаемый результат, не углубляясь в инструкции. Неважно, как будут выбраны пользователи из Мексики. Неважно, как браузер распарсит html код. В разных браузерах он может выглядеть по-разному, где-то будут другие стили, где-то отступы. Важно, что вы получите мексиканских пользователей и новый header и paragraph на сайте.
Императивное решение задачи: function double (arr) { let results = [] for (let i = 0; i < arr.length; i++){ results.push(arr[i] * 2) } return results }
- Пример описывает, как решить проблему: явно указываем все шаги.
- В примере происходит изменение состояния переменной results.
Декларативное решение задачи: function double (arr) { return arr.map((item) => item * 2) }
Декларативное решение оказалось абстракцией над императивными реализациями. Но нас не интересует, как реализованы эти методы. Мы не изменяем состояния, да и читается этот код лучше.
Парсинг
Парсинг HTML документа означает его трансляцию в синтаксическое дерево или DOM, которое состоит из DOM узлов.
Эта модель является интерфейсом, позволяющим получить доступ к HTML элементам извне таким средствам как JavaScript.
Document Object Model, сокращённо DOM – объектная модель документа, которая представляет все содержимое страницы в виде объектов, которые можно менять.
Источник: https://webknowledge.ru/kak-rabotaet-brauzer-chto-proishodit-za-kulisami-sovremennyh-brauzerov/#parsing-general
Браузер
Браузер — программное обеспечение, которое выполняет много задач, основные - отображение данных, хранение данных, защита данных.
предназначенная для просмотра, обработки и манипулирования содержимым веб-сайтов. Происходит это с помощью http запросов к серверу и получения от него данных, которые обрабатываются по специальным утвержденным стандартам и таким образом формируется веб-страница.
Веб-сайт, как система электронных документов (HTML, CSS, JS файлов, медиа файлов), которые доступны в компьютерной сети под общим доменным именем и IP-адресом или локально на одном компьютере. Доступ к ним происходит по протоколу HTTP.
Для просмотра веб-сайта, браузер запрашивает его необходимые файлы путем http запросов. Далее эти файлы будут парсированы и трансформированы в структуры, понятные для машины. Потом браузер вычисляет размеры, позиции и представления всего, что будет показано на странице, формируя разметку страницы, и отображает кажды элемент на экране (заполняет пиксели).
Request -> Parsing -> Layout -> Paint
Что делает веб-страницы интерактивными? Это могут быть возможности CSS, HTML, или JS.
С помощью JS можно изменять DOM, делать запросы, управлять данными (WebStorage, IndexedDB).
Некоторые задачи могут занимать много времени (получение данных из базы, геолокаций, сетевые запросы), и для того, чтобы не ожидать их окончания и чтобы выполнение кода продолжалось дальше (не замараживать страницу), используются возможности языка для написания асинхронного кода.
Learn what triggers new layout computation versus simple repaint. The later is faster than former.
Функции первого класса
Функции первого класса трактуются как объекты, то есть могут быть переданы другим функциям и их можно вернуть из функций.
Возможности JS
Прототипно-ориентированный, мультипарадигменный язык сценариев, который поддерживает динамический, объектно-ориентированный, императивный и функциональный стили программирования.
JavaScript запускается на стороне клиента Интернета, который может использоваться для создания/программирования того, как веб-страницы будут вести себя при наступлении каких-либо событий.
JavaScript может функционировать и как процедурный, и как объектно-ориентированный язык. Объекты можно создавать программно во время выполнения, путем присоединения методов и свойств или пустых объектов во время выполнения, в отличие от синтаксических определений классов в компилируемых языках, таких как С++ или Java. После того, как объект был создан, он может быть использован в качестве плана (или прототипа) для создания похожих объектов.
Динамические возможности JavaScript включают: создание объектов во время выполнения, переменное число параметров, динамическое создание скриптов (с помощью eval), перебор объектов (с помощью for … in)
Web address
Web address - URL (uniform resource locator)
После введения веб адреса и запуска поиска, браузер отправит запрос на сервер, который хранит данные, которые живут по этому адресу. Сервер обработает запрос и отправит назад html документ. Html документ в свою очередь содержит ссылки на другие ресурсы (стили, скрипты, изображения, шрифты…) и браузер снова отправляет запросы. Когда браузер получит все необходимые ресурсы, он сможет отобразить веб страницу.
Веб — система доступа к связанным между собой документам на различных компьютерах, подключённых к Интернету.
merge()
merge subscribes to each given input Observable, and simply forwards all the values from all the input Observables to the output Observable.
Creates an output Observable which concurrently emits all values from every given input Observable.
The output Observable only completes once all input Observables have completed. Any error delivered by an input Observable will be immediately emitted on the output Observable.
mergeAll()
converts a higher-order Observable into a first-order Observable which concurrently delivers all values that are emitted on the inner Observables.
concat()
creates an output Observable which sequentially emits all values from given Observable and then moves on to the next.
concat joins multiple Observables together, by subscribing to them one at a time and merging their results into the output Observable.