Your SlideShare is downloading. ×
Компонентный подход: скучно, неинтересно, бесперспективно
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Компонентный подход: скучно, неинтересно, бесперспективно

1,877
views

Published on

Использование компонентного подхода это тяжеловесно, медленно, не гибко. Так ли это? …

Использование компонентного подхода это тяжеловесно, медленно, не гибко. Так ли это?

Доклад с фестиваля 404, Самара, 13 октября 2013
Видео: https://www.youtube.com/watch?v=QpZy0WW0Ig4

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,877
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Компонентный подход: cкучно, неинтересно, бесперспективно Роман Дворнов Ostrovok.ru Самара, 2013
  • 2. 2
  • 3. Немного о себе • Работаю в Ostrovok.ru • Ранее руководил веб-разработкой в ПС Единый кошелек • Автор и мейтейнер фреймворка basis.js 3
  • 4. Веб-приложения 4
  • 5. Это практично, удобно и воcтребовано 5
  • 6. Все больше сайтов становятся SPA* * Single page application 6
  • 7. Как делать? 7
  • 8. jQuery style Zepto, KnockoutJS, etc. 8
  • 9. Предназначены для декорация сайтов, а не для разработки приложений 9
  • 10. Да, можно использовать для приложений 10
  • 11. Но лучше не стоит ;) 11
  • 12. Работа «мечты» 12
  • 13. MVC 13
  • 14. Определены роли и разделена ответственность 14
  • 15. Примерно так (из википедии) 15
  • 16. Каждый понимает по-своему 16
  • 17. Не определен подход к декомпозиции 17
  • 18. Много вопросов • Как поступать со сложносоставными моделями? • Как разбивать большие view на части? • Часто не понятно, кто должен отвечать за функциональность 18
  • 19. Пример 19
  • 20. Это все одно view 20
  • 21. В цифрах • 1 JavaScript файл на 4500+ строк • 150+ методов • 150+ свойств 21
  • 22. 22
  • 23. «Это может случиться даже с лучшими из нас» 23
  • 24. Понять и простить... 24
  • 25. Компонентный подход 25
  • 26. «Component-based software engineering (CBSE) ... is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems...» http://en.wikipedia.org/wiki/Software_component 26
  • 27. Слабые связи и декомпозиция 27
  • 28. Обычный подход list item item item item item 28
  • 29. Компонентный подход list item item item item item 29
  • 30. Обычный подход window form field field button panel button button 30
  • 31. Компонентный подход window form field field button panel button button 31
  • 32. Фреймворки 32
  • 33. Компонентные фреймворки • Dojo Toolkit • qooxdoo • YUI • Ext.js (Sencha) • Google Closure 33
  • 34. Преимущество 34
  • 35. Недостатки • Сложные – необъятное API, много классов, свойств и пр. • Большой объем (ext-all.js min ~1.5 MB) • Медленные • Сложно кастомизировать, переопределять поведение и стили • Слишком большие для простых приложений 35
  • 36. Эти факторы сформировали негативное отношение к компонентному походу 36
  • 37. Фреймворки меняются к лучшему, но недостаточно сильно, чтобы изменить устоявшееся мнение 37
  • 38. Почему так получилось? 38
  • 39. Время появления фреймворков • Dojo Toolkit – 2004 • qooxdoo – 2005 • YUI – 2006 • Ext.js – 2007 39
  • 40. Не было понимания как делать веб-приложения, но был опыт разработки desktop-приложений 40
  • 41. Desktop IDE Borland Delphi 6 41
  • 42. Особенности • Для отрисовки нужно работать с GDI и другими системными API • Управление памятью • Компилируемые языки и статическая типизация • Для упрощения множество классов были объеденены в единое целое и представлялись одним компонентом 42
  • 43. Настройка компонент 43
  • 44. Сложность отрисовки Много свойств, отвечающих за внешний вид 44
  • 45. Разработчики фреймворков не стали изобретать новых подходов 45
  • 46. Сложности перевода • Отсутсвие в javascript приватных свойств (private, protected etc), getters/setters* → большое количество свойств и сложное API • В javascript используется прототипное наследование → эмуляция классической модели в ущерб производительности * стандартизированы только в ES5 46
  • 47. Наследство • Подходы к построению API, именованию • Структура компонент • Большие компоненты • Стилизация в коде 47
  • 48. Эти факторы определили первоначальный вид компонентных фреймворков 48
  • 49. А сейчас большинству мешает тяжелое наследие 49
  • 50. Все ли так плохо? 50
  • 51. 1. Сложность 51
  • 52. Основа компонент Фреймворк Класс Кол-во свойств qooxdoo qx.ui.core.Widget 538 ext.js Ext.Component 391 YUI Y.Widget 180 Google Closure goog.ui.Container goog.ui.Control 164 172 basis.js basis.ui.Node 126 Dojo dijit._Widget 87 52
  • 53. Строим дерево 53
  • 54. Ext.js • Больше часа, чтобы разобраться • Примеры не помогают • Вручную дерево не построить, только через store или «хитрым» методом, найденым методом научного тыка 54
  • 55. Google Сlosure • ~20 минут чтобы разобраться • Помог пример • +15 мин чтобы оптимизировать и уменьшить время вдвое (можно манипулировать узлами) 55
  • 56. qooxdoo • Не взлетел Потребовалась "помощь из зала" • Чтобы сделать приложение надо использовать инструменты на python (!) • Примеры в скомпилированом виде • Примеров мало 56
  • 57. Dojo • Очень сложно • Запутанная документация и примеры • Кое как получилось построить дерево, но не получилось разобраться как его менять 57
  • 58. basis.js • Ну вы понимаете ;) • Есть примеры • Документация пишется (готово ~30%) • Сам интерфейс – большое дерево • Можно быстро собрать собственное дерево используя basis.ui.Node 58
  • 59. basis.ui.Node • listener, состояние, синхронизация, подписка • хранение данных, привязка данных • управление дочерними узлами • сортировка, группировка • selection, disabled/enabled • взаимодействие с шаблоном 59
  • 60. 2. Размер сборки 60
  • 61. Практически все фреймворки используют модульность и систему зависимостей 61
  • 62. В сборку попадает только то, что используется в проекте 62
  • 63. Сравниваем 63
  • 64. TodoMVC • Ext.js – 1.2 MB фреймворк + уже неважно ;) • YUI – 300 KB • Dojo – 298 KB • basis.js – 152 KB • Google Closure – 55 KB 64
  • 65. TodoMVC • Ember.js – 403 KB • Knockback – 197 KB • jQuery (+handlebars) – 133 KB • backbone.js – 132 KB • AngularJS – 83 KB • KnockoutJS – 52 KB 65
  • 66. 3. Производительность 66
  • 67. Построение дерева Фреймворк 100 листьев 2000 листьев qooxdoo 131* ms 3024* ms Ext.js 52 ms 859 ms Google Closure 13 ms 216 ms basis.js 3 ms 68 ms * не включает рендеринг 67
  • 68. TodoMVC 100 todo 1000 todo AngularJS 125 ms 1491 ms Backbone.js 53 ms 523 ms Knockout 39 ms 489 ms vanilla 23 ms 1882 ms jQuery 20 ms 184 ms basis.js 8 ms 95 ms 68
  • 69. Заключение 69
  • 70. Все еще нет четкого понимания как должны быть устроенны веб-приложения 70
  • 71. Веб-приложения – это не просто сайт, но и desktop практики неэффективны 71
  • 72. jQuery, knockout, Backbone.js, AngularJS, Ember.js и др. Становятся все больше и сложнее, приводят к неэффективным решениям 72
  • 73. Ext.js, Dojo,YUI, Google Closure, qooxdoo и др. Становятся лучше, меньше размер сборки, быстрее, но по прежнему сложные, высокий порог входа 73
  • 74. Изучайте компонентный подход! 74
  • 75. Используйте 75
  • 76. Творите 76
  • 77. Это круто! ;) 77
  • 78. Вопросы? Роман Дворнов @rdvornov rdvornov@gmail.com basis.js basisjs.com github.com/basisjs 78