21
Techniques of building layered interfaces ON THE EXAMPLE OF A WEB-BASED CODE EDITOR

Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Techniques of building

layered interfacesON THE EXAMPLE OF A WEB-BASED CODE EDITOR

Page 2: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

О спикере

• Мне 33 года, из которых 16 лет работаю в IT

• Двукратный победитель UA Web Challenge

• Впоследствии - судья чемпионата UA Web Challenge

• Работал с десятками заказчиков, среди которых - Microsoft Skype

• В настоящем – Team Lead в компании Lohika (Киев)

Page 3: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Ace editor Google Maps

Page 4: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

LAYER #3

LAYER #2

LAYER #1

Page 5: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Коротко об истории проекта…3 работающих

прототипа

Использование

design mode

Релиз Ace Editor

в 2012…

Page 6: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Постановка задачи

Создать редактор кода,

поддерживающий W3C + IE

Учесть все проблемы,

выявленные в прототипах

Использовать только базовые

технологии: HTML, CSS, JS

Максимально оптимизировать

скорость и память (DOM)

Реализовать поддержку

multiple cursors / selections

Реализовать smart indent

(select + tab, shift + tab)

Page 7: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

• Поддерживается всего 1 курсор (сразу не подходит)

• Selection API различается в браузерах (W3C vs IE)

• Невозможно управлять видом курсора и миганием

• Сложно получать события мыши за пределами IFRAME

Page 8: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Придется написать и отладить

много кода…

Page 9: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №1: Рендеринг выделения

+ оптимизация работы с DOM-элементами

Page 10: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №2: Рендеринг текста

Page 11: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №3: Полосы прокрутки

Page 12: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №4: Выделение мышью

Page 13: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №5: Целостность иллюзии

Page 14: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №6: Объединение курсоров

Page 15: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №7: Авто-прокрутка View Frame

Page 16: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задача №8: Обработка кликов

Page 17: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Демонстрация проекта

в текущем состоянии:

http://morkovkin.info/edit

o Нет других зависимостей кроме HTML5, CSS3, JavaScript

o Чистый, объектно-ориентированный код, продуманный API

o Весь код редактора помещается в 5.6 Kb (min + gzip)

o Работает в последних версиях браузеров (tested FF, Chrome)

o Оптимизирован по скорости и использованию памяти

o Содержит в себе фреймворк выделения, написанный «с нуля»

o Потенциально может загружать очень больше файлы (not tested)

o Поддерживает множественные курсоры и smart indent

Page 18: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память
Page 19: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

https://github.com/sergeymorkovkin/firecode

• Интегрировать browserify + livereload

• Переписать проект на EcmaScript 6

• Сделать cut / copy / paste

• Сделать undo / redo

• Подсветка синтаксиса

• Сворачивание кода

• Подсветка парных скобок

• Автозаполнение

Page 20: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Задавайте

вопросы

Page 21: Techniques of building layered interfaces · 2019-04-26 · технологии: HTML, CSS, JS Максимально оптимизировать скорость и память

Мои контакты

Facebook: https://www.facebook.com/sergey.morkovkin.5

LinkedIn: https://ua.linkedin.com/in/sergeymorkovkin

Email: [email protected]

Portfolio: http://morkovkin.info

Skype: sergeymorkovkin

Viber: +38 (050) 445-01-45

Сергей Морковкин