Pull to refresh
30
0
Антон Лаврёнов @lavrton

Web apps developer, Javascript ninja

Send message

Как работать с async/await в циклах JavaScript

Reading time3 min
Views149K

Как запустить асинхронные циклы по порядку или параллельно в JavaScript?


Перед тем, как делать асинхронную магию, я хочу напомнить как выглядят классические синхронные циклы.

Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments33

Оптимизируем redux хранилище для более производительных изменений

Reading time2 min
Views11K
Этот пост является продолжением поста про оптимизацию производительности списка в React приложении.

Внимание. В данном посте примеры подготовлены специально для Redux приложений. Но сам подход возможно применить и с другими библиотеками. Так же нижеприведенный совет работает в react-redux версии 5. Я не смог достичь желаемого результата в версии 4. Глубоко разбираться в причинах я не стал.

И так, стандартный способ хранить некоторое множество элементов в приложении — это хранить их в массиве:

const state = {
  targets: [{id: 'target1', radius: 10}, {id: 'target2', radius: 2}]
};
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments5

Прогрессивная загрузка web-приложения с помощью разделения кода

Reading time6 min
Views28K
В этой статье мы рассмотрим как можно ускорить первоночальную загрузку web-приложения c помощью разделения кода (code splitting). Для реализации задуманного я буду использовать webpack v1, а для демонстрации — React (не обязателен).

В большинстве своих проектов я собираю все javascript файлы (а иногда css и картинки тоже) в ОДИН ОЧЕНЬ БОЛЬШОЙ bundle.js. Возможно ты, дорогой читатель, делаешь точно так же. Это достаточно стандартная практика для современных веб-приложений.

Но этот подход имеет один (и иногда достаточно важный) недостаток: первоночальная загрузка приложения может занимать очень долгое время, так как web-браузер должен (1) загрузить огромный файл и (2) распарсить тонну js-кода. Загрузка файла может занять долгое время, если у пользователя медленный интернет. Так же этот огромный файл может содержать код компонентов, которые пользователь НИКОГДА не увидит (например, пользователь просто не откроет некоторые части вашего приложения).

Что делать?
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments17

Оптимизируем React приложение для отображения списка элементов

Reading time5 min
Views18K
Отображение списка (множества) элементов на странице — это стандартная задача для практически любого web-приложения. В этом посте я хотел бы поделиться некоторыми советами по повышению производительности.

Для тестового примера я создам небольшое приложение, которое рисует множество «целей» (кругов) на элементе canvas. Я буду использовать redux как хранилище данных, но эти советы подойдут и для многих других способов хранения состояния.
Так же эти оптимизации можно применять с react-redux, но для простоты описания я не буду использовать эту библиотеку.

Данные советы могут повысить производительность приложения в 20 раз.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments18

Про использование React с элементом canvas

Reading time4 min
Views58K
Есть такой замечательный фреймворк React, который позволяет работать с огромным и мутабельным DOM в красивом иммутабельном функциональном стиле. Это действительно круто.

Но я бы хотел рассказать про опыт использования React, который позволяет работать с мутабельной абстракцией над "иммутабельным" canvas элементом. Звучит странно, но работает отлично.

Мотивация


Я использую элемент <canvas> очень часто. Я сделал несколько достаточно сложных веб-приложений, в которых canvas — это основной элемент представления данных. Использовать canvas без всяких фреймворков и библиотек может быть действительно сложно в крупных приложениях. Поэтому я начал часто использовать фреймворки. Сейчас я поддерживаю фреймворк Konva (есть обзорная статья https://habrahabr.ru/post/250897/).

Konva помогает очень сильно, но хочется большего. Так же я начал использовать React в своих приложениях, и он мне действительно нравится. И я подумал, как же я могу использовать React для рисования графики на canvas?

React + canvas

Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments11

Konva.js — HTML5 2d canvas framework

Reading time5 min
Views55K
image

Приветствую. Представляю сообществу проект Konva.js.

Konva.js — это фреймворк, который позволяет работать c canvas 2d в объектном стиле с поддержкой событий.

Кратко список особенностей выглядит так:
  1. Объектное API
  2. Вложенные объекты и «всплытие» событий
  3. Поддержка нескольких слоёв (нескольких canvas элементов)
  4. Кэширование объектов
  5. Поддержка анимаций
  6. Настраиваемый drag&drop
  7. Фильтры
  8. Готовые к использованию объекты, включая прямоугольник, круг, изображение, текст, линия, SVG путь, ..
  9. Простое создание собственных фигур
  10. Событийная архитектура, которая позволяет разработчикам подписываться на события изменений аттрибутов, отрисовки, и так далее
  11. Сериализация и десериализация
  12. Продвинутый поиск с помощью селекторов stage.get('#foo') и layer.get('.bar')
  13. Десктоп и мобильные события
  14. Встроенная подержка HDPI устройств
  15. и еще много разного


Далее подробней рассмотрим возможности фреймворка с примерами кода.
Читать дальше →
Total votes 36: ↑33 and ↓3+30
Comments37

Система Личной Эффективности «Важное событие дня»

Reading time3 min
Views11K
Приветствую сообщество. Я хотел бы рассказать про систему личной эффективности «важное событие дня».
Про эту систему я узнал на одном из бизнес тренингов. Оригинала техники не знаю (не смог найти), поэтому описываю так, как услышал и использую сам.

Сразу перейду к сути.

Описание


Каждый день необходимо записывать самое важное событие, которое произошло с тобой в течение дня. Событие может быть из любой сферы жизни. Например: прибрался в комнате, закрыл проект Х, секс, посмотрел фильм, и т.д.

Далее, когда подходит к концу неделя, необходимо выбрать «самое важное событие недели» из дней, которые были в течение недели. Лучше не обобщать неделю, а именно выбрать из уже записанных дней.

За месяц необходимо выбрать лучшее из недель. И так далее для квартала и года.



Первое время было не просто пользоваться техникой: забывал фиксировать данные, приходилось вспоминать события аж за всю неделю. Но со временем привычка дошла до автоматизма и стало намного проще.
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments10

Использование Backbone.js при работе c html5 canvas

Reading time2 min
Views6.4K

1. Описание задачи


Разрабатывая крупное mind map приложение, мы выбрали Backbone в качестве основной библиотеки построения приложения. При этом карта ума рисуется через canvas элемент с помощью различных примитивов. Мы выбрали библиотеку KineticJS для работы с canvas, так как она отлично поддерживает работу с событиями для объектов на холсте.

Чтобы соответствовать архитектуре Backbone все работа с canvas (точнее с экземплярами объектов KineticJS) происходила в экземплярах Backbone.View:

var Node = Backbone.View.extend({
   initialize : function(params) {
        this.layer = params.layer;
        this.node = this.el();
        this.bindEvents();
    },
    el : function(){
        var rect = new Kinetic.Rect({
          x : 100,
          y : 100,
          width : 50,
          height : 50,
          fill : 'green',
          id : 'rect'
        });
        return rect;
  },
  bindEvents: function() {
         this.node.on('click', function(){
             console.log("on rectangle clicked");
          }
          // etc ...
   }
});


2. Проблема


Но Backbone View спроектирован для работы с DOM элементами, и при таком подходе генерировал не нужные нам div объекты и объявлять события в декларативном стиле (http://backbonejs.org/#View-delegateEvents) тоже не получалось.
Читать дальше →
Total votes 11: ↑7 and ↓4+3
Comments5

Information

Rating
Does not participate
Registered
Activity