<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Сергея Копылова: заметки с тегом архитектура фронтенда</title>
<link>https://www.blog.sergeykopylov.ru/tags/arhitektura-frontenda/</link>
<description>Блог Сергея Копылова</description>
<author>Сергей Копылов</author>
<language>ru</language>
<generator>E2 (v3559; Aegea)</generator>

<itunes:owner>
<itunes:name>Сергей Копылов</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Блог Сергея Копылова</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Сотни тысяч элементов на странице</title>
<guid isPermaLink="false">83</guid>
<link>https://www.blog.sergeykopylov.ru/all/sotni-tysyach-elementov-na-stranice/</link>
<pubDate>Wed, 01 Apr 2020 09:02:31 +0300</pubDate>
<author>Сергей Копылов</author>
<comments>https://www.blog.sergeykopylov.ru/all/sotni-tysyach-elementov-na-stranice/</comments>
<description>
&lt;p&gt;Меня, бывает, спрашивают о том, как что-то реализовать, когда элементов очень много.&lt;/p&gt;
&lt;p&gt;Например:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;На странице отображены 100 000 товаров и у каждого есть кнопки действий. Как указать обработчик событий для этих кнопок так, чтобы не множить функции? Постраничного листания нет, подгрузки при прокрутке тоже.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;или&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;На странице отображаются 5 000 товаров с партиями, остатками, необходимо изменять эти данные. Что бы вы стали делать, если бы страница стала тормозить? Как бы вы искали источник проблемы?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да никак бы я не искал источник проблемы. Потому, что источник уже найден — это вывод на экран тысяч экземпляров данных.&lt;/p&gt;
&lt;p&gt;В этом нет никакой необходимости. Никакой человек не может управлять данными, когда их тысячи. Нашему мозгу уже и 30 штук — довольно много. Правильное решение: сделать так, чтобы на фронтенде не отображались, не хранились, и не обрабатывались тысячи элементов. Тогда и не нужно будет решать эти надуманные задачи.&lt;/p&gt;
</description>
</item>

<item>
<title>Архитектура фронтенда: смена фреймворка</title>
<guid isPermaLink="false">48</guid>
<link>https://www.blog.sergeykopylov.ru/all/arhitektura-frontenda-smena-freymvorka/</link>
<pubDate>Tue, 25 Feb 2020 13:43:01 +0300</pubDate>
<author>Сергей Копылов</author>
<comments>https://www.blog.sergeykopylov.ru/all/arhitektura-frontenda-smena-freymvorka/</comments>
<description>
&lt;p&gt;В &lt;a href="http://blog.sergeykopylov.ru/all/arhitektura-frontenda-konfiguracii/"&gt;предыдущей части&lt;/a&gt; я рассказал, почему хорошо создавать конфигурации — JSON-описания поведения страниц без программирования.&lt;/p&gt;
&lt;p&gt;У этого подхода есть ещё один прекрасный плюс: смена фреймворка перестаёт быть невыполнимой задачей.&lt;/p&gt;
&lt;p&gt;Если вы используете конфигурации, то компоненты страницы внутри шаблона могут быть написаны на любом фреймворке: AngualrJS 1.x, Angular, Vue.js, React, Svelte и так далее. Вы даже можете их смешивать, и переписывать пошагово, когда часть компонентов использует один фреймворк, а часть — другой.&lt;/p&gt;
&lt;p&gt;Таким образом, продукт и компания перестают быть связаны устаревшими технологиями, и если фреймворк перестанет поддерживаться, работа не остановится. Конечно, переезд не станет лёгким делом и займёт несколько месяцев, но без конфигураций страниц переехать будет просто невозможно без переписывания каждой страницы вручную. Именно так и получаются ситуации, когда в одном проекте есть Бекбон, Джейквери, Реакт разных версий и только избранные разработчики могут без страха менять что-то в легаси-модулях.&lt;/p&gt;
</description>
</item>

<item>
<title>Архитектура фронтенда: конфигурации</title>
<guid isPermaLink="false">44</guid>
<link>https://www.blog.sergeykopylov.ru/all/arhitektura-frontenda-konfiguracii/</link>
<pubDate>Mon, 24 Feb 2020 20:24:20 +0300</pubDate>
<author>Сергей Копылов</author>
<comments>https://www.blog.sergeykopylov.ru/all/arhitektura-frontenda-konfiguracii/</comments>
<description>
&lt;p&gt;Я долго работал над большими проектами для администирования, когда в системе есть очень много данных, и много страниц, для управления ими. Много — это, например, 500 страниц. И я использовал довольно естественный подход, когда каждая страница конфигурируется, а не программируется. Что-то вроде такого:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;import ...
...

export default {
    url: &amp;quot;orders/:id&amp;quot;, // Адрес страницы с подстановкой данных
    template: &amp;quot;formPage&amp;quot;, // Какой шаблон страницы использовать
    data: { // Данные и обработчики данных
        value: (id) =&amp;gt; Data.get(Orders, {id: id}, // Набор значений полей заказа с сервера
        fields: fields, // Набор полей по порядку с их параметрами, подключаемый из другого файла,
        onSave: (id) =&amp;gt; Data.save(Orders,  {id: id})
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Это, конечно, псевдокод, но он показывает сам принцип:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Существует сервис &lt;b&gt;Data&lt;/b&gt;, который умеет получать данные с сервера и отправлять их обратно. Вообще говоря, неважно, хранит ли он их на сервере, или в локалсторадж, к примеру, странице-то это неважно;&lt;/li&gt;
&lt;li&gt;Существует &lt;b&gt;Orders&lt;/b&gt; — описание того, как именно сохранять или получать заказы, внутри — просто JSON с параметрами, которые переиспользуются на разных страницах;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;fields&lt;/b&gt; — это JSON-описание набора полей: в каком они порядке, как взаимосвязаны друг с другом, в каком из них какое поле из data отображается, какого они типа и так далее.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Получается, что новому разработчику вообще не нужно уметь программировать, а нужно только описать два JSON-файла:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Набор полей&lt;/li&gt;
&lt;li&gt;По какому адресу и с какими дополнительными параметрами можно получить и записать данные о заказе на сервере.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если к этому есть документация, или, хотя бы много примеров (а когда страниц 500, то и примеров в избытке) — это несложно, и, что важнее, очень быстро для исправления или переработки.&lt;/p&gt;
&lt;p&gt;Всё. Как именно сохранять данные и когда отправлять их на сервер и в каком виде знает сервис &lt;b&gt;Data&lt;/b&gt;; компоненты на странице знают, как именно отрисовывать поля ввода. Разработчику ненужно парится об отступах и расположении элементов, об отображении индикатора загрузки при сохранении и вообще о том, как устроен конкретный шаблон, достаточно просто его сконфигурировать.&lt;/p&gt;
&lt;p&gt;Но оказалось, что этот способ используется очень редко потому, что дизайнеры рисуют разные макеты, потому, что кажется, что существующим шаблоном не решить задачу и так далее. Все эти проблемы надуманы — нужно стараться решить задачу существующими средствами, точечно дорабатывая их, когда не получается. Но это тема другой статьи&lt;/p&gt;
</description>
</item>


</channel>
</rss>