<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Обзор основных концепций JavaScript - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85-%D0%BA%D0%BE%D0%BD%D1%86%D0%B5%D0%BF%D1%86%D0%B8%D0%B9-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/обзор-основных-концепций-javascript/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Tue, 15 Oct 2019 20:31:04 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>Обзор основных концепций JavaScript - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/обзор-основных-концепций-javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Работа с визуализацией JS. Обзор основных концепций JavaScript</title>
		<link>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/</link>
					<comments>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Sun, 13 Oct 2019 22:51:46 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[javascript qlik sense]]></category>
		<category><![CDATA[Обзор основных концепций JavaScript]]></category>
		<category><![CDATA[Работа с визуализацией JS]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1802</guid>

					<description><![CDATA[<p>Что такое Virtual DOM? Что такое виртуальный DOM? Виртуальный DOM (VDOM) — это концепция программирования, в которой идеальное или «виртуальное» представление пользовательского интерфейса хранится в памяти и синхронизируется с «настоящим» DOM при помощи библиотеки, такой как ReactDOM. Этот процесс называется согласованием. Такой подход и делает API React декларативным: вы указываете,<a class="moretag" href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/">Работа с визуализацией JS. Обзор основных концепций JavaScript</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="question__title" itemprop="name ">Что такое Virtual DOM? Что такое виртуальный DOM?</h1>
<p><strong>Виртуальный DOM (VDOM)</strong> — это концепция программирования, в которой идеальное или «виртуальное» представление пользовательского интерфейса хранится в памяти и синхронизируется с «настоящим» DOM при помощи библиотеки, такой как ReactDOM. Этот процесс называется согласованием.</p>
<p>Такой подход и делает API React декларативным: вы указываете, в каком состоянии должен находиться пользовательский интерфейс, а React добивается, чтобы DOM соответствовал этому состоянию. Это абстрагирует манипуляции с атрибутами, обработку событий и ручное обновление DOM, которые в противном случае пришлось бы использовать при разработке приложения.</p>
<p><strong>Поскольку «виртуальный DOM»</strong> — это скорее паттерн, чем конкретная технология, этим термином иногда обозначают разные понятия. В мире React «виртуальный DOM» обычно ассоциируется с React-элементами , поскольку они являются объектами, представляющими пользовательский интерфейс. Тем не менее, React также использует внутренние объекты, называемые «волокнами» (fibers), чтобы хранить дополнительную информацию о дереве компонентов. Их также можно считать частью реализации «виртуального DOM» в React.</p>
<h2>Теневой DOM похож на виртуальный DOM?</h2>
<p>Нет, они совсем разные. Теневой DOM (Shadow DOM) — это браузерная технология, предназначенная в основном для определения переменных и CSS в веб-компонентах. Виртуальный DOM — это концепция, реализованная библиотеками в JavaScript поверх API браузера.</p>
<h2>Что такое «React Fiber»?</h2>
<p>Fiber — новый механизм согласования в React 16, основная цель которого сделать рендеринг виртуального DOM инкрементным.</p>
<h2>Пояснение с Toster.RU</h2>
<p><span>Ну вот есть DOM. Он медленный, и дергать его просто так не стоит. А есть виртуальный DOM, что-то типа прослойки между вашим кодом и реальным DOM. Вы можете дергать виртуальный DOM сколько вам душе угодно, а прослойка эта соберет всю инфу о том как вы чего делали, и попробует оптимизировать взаимодействие с реальным DOM что бы вышло как можно меньше действий.</span><br /><br /><span>Пример &#8211; задача простая, у вас есть таблица и нужно постоянно обновлять ячейки новым значением. Значение приходят из апишки раз в пару десятков милисекунд (какая-то реалтайм статистика к примеру). Значения эти &#8211; просто массив данных.</span><br /><br /><span>Решение в лоб &#8211; каждый раз когда приходят данные, дропать старую таблицу, проходить циклом по массиву и формировать новую. Это куча операций с DOM. У вас каждые n милисекунд будет полностью перестраиваться вся эта штука, дропаться и создаваться новые элементы и все это будет ужасно долго пересчитываться и перерисовываться.</span><br /><br /><span>А теперь добавим между всем этим виртуальную апишку, которая запоминает что она там в прошлый раз создала и что надо в этот раз создать. Вы все так же влоб проходите циклом по массиву и просите виртуальный дом построить новую апишку, а виртуальный дом будет стараться переиспользовать то что у него уже есть, ну и все в таком духе. За счет этого получается нефиговый прирост производительности (но есть потери на работу самого виртуального DOM, зато можно фигачить как хочешь).</span><br /><br /><span>Если же прослойку эту сделать со своим интерфейсом, можно получить слой абстракции для работы с UI. Именно это предлагает тот же React. Слой абстракции над UI. Вы можете работать с реактом, но UI будет отрисовываться не через DOM а скажем&#8230; это может быть нативный интерфейс мобильной платформы (гуглить native-react). Ну и т.д.</span></p>
<h1>Рендеринг – отображение конечного результата</h1>
<p><strong>Javascript фреймворки</strong> в первую очередь стоит сравнить по рендерингу страницы. Современная архитектура допускает два вида:</p>
<ul>
<li><strong>на стороне клиента</strong> (страница отрисовывается за счет мощностей ПК пользователя)</li>
<li>или <strong>на стороне сервера</strong>.</li>
</ul>
<p><strong>DOM – Document Object Model</strong> – объектная модель документа, позволяющая считывать и менять содержимое, оформление и даже структуру html-документов. Каждый из фреймворков подходит по-своему к обработке DOM что и оказывает влияние на рендеринг конечной страницы, отображаемой на экране пользователя.</p>
<p>Vue.js и React создают копию DOM, обрабатывают ее, а затем результат сравнивается с исходной версией. В конечном документе (то есть на экране пользователя) заменяются только те части страницы, которые отличаются от результатов обработки.</p>
<p>Это значительно ускоряет загрузку и рендеринг страницы. Соответственно сокращается объем трафика, что особенно важно для пользователей мобильных устройств.</p>
<p>В корне отличается подход к обработке DOM фреймворком Angular версии 1.x и выше. Здесь происходит разделение на два потока, причем за рендеринг DOM «отвечает» браузер (клиентская часть), а за создание директив, загрузку кода и сервисов – общий поток (серверная часть).</p>
<p>Но это совсем не значит, что рендеринг происходит на стороне клиента – визуализация по-прежнему производится серверами. Следовательно, SEO оптимизация не вызовет затруднений. Поисковым роботам будет предоставлена корректная страница при индексации.</p>
<h1>Model-View-Controller (MVC) &#8211; шаблон проектирования Модель-Представление-Контроллер</h1>
<p><strong>Что такое шаблон проектирования Model-View-Controller?</strong> MVC включает в себя три главных его части:</p>
<ul>
<li><strong>Model (Модель)</strong> &#8211; хранит данные приложения (предоставляет данные и реагирует на команды контроллера, изменяя своё состояние);</li>
<li><strong>View (Представление)</strong> &#8211; представляет модель клиенту (отвечает за отображение данных модели пользователю, реагируя на изменения модели);</li>
<li><strong>Controller (Контроллер)</strong> &#8211; модифицирует модель, реагируя на события от клиента (интерпретирует действия пользователя, оповещая модель о необходимости изменений).</li>
</ul>
<p><img fetchpriority="high" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review.jpg" alt="" width="329" height="323" class="aligncenter size-full wp-image-1813" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review.jpg 329w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review-300x295.jpg 300w" sizes="(max-width: 329px) 100vw, 329px" /></p>
<h1>HTML Canvas</h1>
<p><strong>HTML Canvas</strong> — это удивительная технология для рисования, встроенная во все современные браузеры. С помощью Canvas вы можете рисовать фигуры, управлять фотографиями, создавать игры и анимировать фактически что угодно — всё это с правильными веб-стандартами. Вы даже можете делать мобильные приложения.</p>
<p><strong>Тег &lt;canvas&gt;</strong> &#8211; это элемент HTML 5, который предназначен для создания растрового изображения при помощи JavaScript.</p>
<h1>Node.JS</h1>
<p>Node.js разработал Райан Даль (англ. Ryan Dahl) в 2009 году.</p>
<p>Node.js — это среда выполнения JavaScript. Это JavaScript фреймворк, основанный на движке V8 от Google, созданный для решения проблемы одновременной обработки большого количества запросов.</p>
<p>Движок принимает код JavaScript и компилирует его в C++, который выполняется с молниеносной скоростью. Движок V8 ( он транслирует JavaScript в машинный код) делает это «на лету».</p>
<h1>Frontend и Backend &#8211; что это такое и как они взаимодействуют?</h1>
<ul>
<li><strong>Фронтенд</strong> &#8211; все, что браузер может читать, выводить на экран и / или запускать. То есть это HTML, CSS и JavaScript. <strong>Frontend</strong> &#8211; это разработка пользовательского интерфейса и функциональности, которые работают на клиентской стороне веб-сайта или приложения.<br />
<ul style="list-style-type: circle;">
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">HTML (HyperText Markup Language)</strong> — язык разметки документов, при помощи которого формируется структура страницы: заголовки, абзацы, списки и так далее;</li>
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">CSS (Cascading Style Sheets)</strong> — язык для описания и стилизации внешнего вида документа. Благодаря CSS-коду ваш браузер понимает, как именно отображать элементы. CSS задает цвета и параметры шрифтов, определяет, как будут располагаться разные блоки сайта, и так далее. Еще он позволяет выводить один и тот же документ в разных стилях, например, для печати (обычной или шрифтом Брайля), вывода передачи на экран или чтения голосом;</li>
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">JavaScript</strong> — это язык, который создавался для того, чтобы оживить веб-страницы. Его задача — реагировать на действия пользователя, обрабатывать клики мышкой, перемещения курсора, нажатия клавиш. Еще он посылает запросы на сервер и загружает данные без перезагрузки страницы, позволяет вводить сообщения и многое другое.</li>
</ul>
</li>
<li><strong>Бэкенд</strong> &#8211; все, что работает на сервере, то есть «не в браузере» или «на компьютере/клиенте».<br /><strong>Backend</strong> &#8211; это серверная логика веб-приложения. Здесь реализуется работа с хранилищем данных, поэтому человек, занимающийся разработкой серверной логики, должен иметь навыки работы с базами данных.
<ul style="list-style-type: circle;">
<li><strong>Backend-разработчик</strong> может применять любые инструменты, доступные на его сервере: Ruby, PHP, Python, Java, Node.JS, C# и т.д.</li>
<li>Для backend-разработки используются разные системы управления базами данных: MySQL, PostgreSQL, SQLite, MongoDB и т.п.</li>
</ul>
</li>
<li><span><strong>Взаимодействие frontend и backend</strong> происходит по кругу: frontend отправляет пользовательскую информацию в backend, там она обрабатывается и возвращается обратно, приняв понятную форму.</span></li>
</ul>
<h1>Что такое FizzBizz тест</h1>
<p><strong>FizzBizz</strong> &#8211; как правило, небольшой тест, направленный на отсеивание неопытных разработчиков. Я думаю, вы будете удивленны как много javascript разработчиков не умеют писать такие тесты.</p>
<p>Как правило, такие тесты не несут в себе большой смысловой нагрузки. Он направлен исключительно на проверку способностей потенциальных кандидатов.</p>
<h1>Тестирование JavaScript</h1>
<p><strong>Автоматизированное тестирование</strong> – это когда тесты написаны отдельно от кода, и можно в любой момент запустить их и проверить все важные случаи использования.</p>
<h2>BDD (Behaviour Driven Development) – поведенческие тесты кода</h2>
<p>BDD предполагает описание тестировщиком или аналитиком пользовательских сценариев на естественном языке — если можно так выразиться, на языке бизнеса.</p>
<p>туду</p>
<h2>TDD (Test Driven Development) &#8211; Разработка через тестирование</h2>
<p>TDD — это больше о программировании и тестировании на уровне технической реализации продукта, когда тесты создают сами разработчики.</p>
<p>туду</p>
<h2>Karma</h2>
<p><strong>Karma</strong> &#8211; это консольный инструмент для запуска тестов, который умеет следить за изменениями исходного кода и отображать процент покрытия кода тестами.</p>
<h2>Jasmine</h2>
<p><strong>Jasmine</strong><span> &#8211; фреймворк для написания js-тестов.</span></p>



<h1>Источники для обзора</h1>
<ol>
<li>https://ru.reactjs.org/docs/faq-internals.html</li>
<li>https://toster.ru/q/211004</li>
<li>https://mkdev.me/posts/sravnenie-javascript-freymvorkov-vue-js-react-i-angular-2019</li>
<li>https://skillbox.ru/media/code/frontend_i_backend_razrabotka</li>
<li>https://devacademy.ru/article/javascript/</li>
<li>https://jazzteam.org/ru/technical-articles/karma-and-jasmine-test-running-manual/</li>
<li>https://habr.com/ru/company/jugru/blog/329468/</li>
</ol>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/">Работа с визуализацией JS. Обзор основных концепций JavaScript</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
