SlideShare a Scribd company logo
KNOCKOUT.JS
Патрушев Антон
Про меня
• CTO Noda (Naumen subsidiary)
• Разработчик с XX-летним стажем
• Сервер-сайд
• С++ и Python
• Python-активист, программный директор PyCon.RU
Про доклад
• Немного истории (как начиналось)
• Много боли (во что превратилось)
• Немного теории
• Reactive programming
• knockout.js (внезапно)
Про то, чего НЕ будет
• Глубоких сравнений с аналогами и альтернативами
• Религиозных войн (ну разве совсем чуток)
• Чудес и откровений (всё давно известно)
• Золотых молотков
Про проект
Про «приложение на странице»
• Одна страница
• Много JavaScript
• Много AJAX
• Динамическое обновление контента
• Интерактивные элементы
• Tooltip/Completion/Validation
• Throttling/Debouncing
Про коллбэки
• Отображение координат мыши при движении
Про коллбэки
• Отображение координат мыши при движении
• Добавляем галочку – обновлять/не обновлять
• Правим обработчик мыши
Про коллбэки
• Отображение координат мыши при движении
• Добавляем галочку – обновлять/не обновлять
• (Oops!) Вспоминаем, что надо обновить при смене
галочки в позицию обновлять
Про коллбэки
Про коллбэки
Про проблемы событий
• Событие это действие, а не результат
• Нас не волнует само событие
• Нас волнует результат его обработки
• То есть состояние системы
• Состояние системы очень хрупкое
• Много неявного состояния везде
• Тяжело противостоять ошибкам
• Ошибки надо тащить «из глубины» наверх
Про «смерть от внезапной сложности»
• 1000 строк кода на JS/JQuery
• Состояние «во View» и в переменных
• Изменения вносить УЖЕ практически невозможно
Про «смерть от внезапной сложности»
• 1000 строк кода на JS/JQuery
• Состояние «во View» и в переменных
• Изменения вносить практически невозможно
Про «реактивное программирование»
Про «реактивное программирование»
Про «реактивное программирование»
Про «реактивное программирование»
• Переменные - как ячейки в excel
• Модель - формулы и зависимости
• Граф зависимостей
• Явное состояние
• Можно отобразить/залогать
• Все преобразования прозрачны
• Просто тестируется
Про MVVM
• Presentation Model by Martin Fowler (2004)
• Microsoft (WPF/Silverlight) by John Gossman (2005)
• Компоненты
• Model
• View
• ViewModel
Про ViewModel
• Составная часть Presentation
• Отделяет логику View от View
• Предоставляет API для доступа к модели
• Примеры
• Показ/скрытие элементов интерфейса по условию
• Показ/скрытие Popup/Tooltip
• Client-side validation
• Обновление данных при смене фильтра
Про knockout.js
• Реактивный ViewModel
• Observables
• Dependency tracking
• Declarative bindings
• Templating
Про knockout.js: ViewModel
Про knockout.js: Declarative Bindings
• <span data-bind="text: mouseX"></span>
• Контроль отображения
• visible
• text/html, value/checked, options/selectedOptions
• css/style
• attr
• enable/disable, hasFocus
• Control flow
• foreach, if/ifnot, with
• Подписка на события
• click/submit/event
• Возможность использовать выражений (спорная)
Про «ячейки»: Observables
• JS объекты
• Простые/массивы/вычисляемые
• Уведомление при изменении значения
• Трассировка зависимостей
• Автоматическая
• Динамическая
Про «реактивный ViewModel»
Про переезд
• 2000 строк на JS/Jquery
• Долгое раскуривание реактивности
• Выбор библиотеки
• Bacon.js
• RxJS
• Knockout
• 1 неделя на переезд
Про knockout.js
• Free (MIT)
• Чистый JS
• 46kb minified, 16kb compressed (on wire)
• Хорошая поддержка браузеров
• Отличная документация
• Interactive tutorial
• Live examples
Про то, о чём не сказано
• Writable computed observables
• Например, для обработки/валидации входных данных
• Тонкости observable
• Observable.peek()
• rateLimiting (throttle)
• Templating
• Component bindings
• AJAX
Про ссылки
• knockoutjs.com
• wikipedia.org
• Reactive programming
• Model-View-ViewModel
• Мартин Фаулер
• http://martinfowler.com/eaaDev/PresentationModel.html
Про Соловьёва
• http://www.youtube.com/watch?v=R4sTvHXkToQ
• В нём не упоминается knockout.js (где-то в вопросах
только вскользь)
• Подтолкнул к размышлениям "на тему" и направил к
решениям
THE END

More Related Content

PDF
Лучший frontend-фреймворк, и почему вы его не хотите
CodeFest
 
PDF
презентация вводного доклада Angular на fronttalks.ru
Ivan Gromov
 
PPTX
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
SQALab
 
PDF
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
PPT
AngularJS basics & theory
DevOWL Meetup
 
PDF
AntonSaburov (Gemini-Systems) @ CodeCamp2011
CodeCamp
 
PDF
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
it-people
 
PPTX
Full Stack разработка на JavaScript
Олег Шерыхалин
 
Лучший frontend-фреймворк, и почему вы его не хотите
CodeFest
 
презентация вводного доклада Angular на fronttalks.ru
Ivan Gromov
 
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
SQALab
 
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
AngularJS basics & theory
DevOWL Meetup
 
AntonSaburov (Gemini-Systems) @ CodeCamp2011
CodeCamp
 
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
it-people
 
Full Stack разработка на JavaScript
Олег Шерыхалин
 

What's hot (20)

PDF
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
PPTX
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
SQALab
 
PDF
Coding monday
Oleg Nechiporenko
 
PPTX
Protrarctor and Angular
SQALab
 
PPTX
Построение собственного JS SDK — зачем и как?
buranLcme
 
PDF
Как и зачем мы тестируем UI
Vyacheslav Lyalkin
 
PDF
Rambler.iOS #5: TDD и VIPER
RAMBLER&Co
 
PPTX
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QAFest
 
PDF
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Yandex
 
PDF
Использовании TypeScript для Node.js
FullStackJS
 
PPT
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Ontico
 
PDF
М. Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
PPTX
XSLT -5
Alexander Babich
 
PDF
Сделай дизайнеру приятно: Красивые веб-формы
Kyrylo Melnychuk
 
ODP
Selenium на практике и подводные камни
SQALab
 
PPTX
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
PPTX
Swagger 2.0
Roman Krivtsov
 
PPTX
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
Mail.ru Group
 
PPTX
Qa Automation - отбрасываем лишнее и тестируем суть
Igor Khrol
 
PDF
Евгений Ртищев "Мобильная платформа на ReactNative"
IT Event
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
SQALab
 
Coding monday
Oleg Nechiporenko
 
Protrarctor and Angular
SQALab
 
Построение собственного JS SDK — зачем и как?
buranLcme
 
Как и зачем мы тестируем UI
Vyacheslav Lyalkin
 
Rambler.iOS #5: TDD и VIPER
RAMBLER&Co
 
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QAFest
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Yandex
 
Использовании TypeScript для Node.js
FullStackJS
 
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Ontico
 
М. Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Сделай дизайнеру приятно: Красивые веб-формы
Kyrylo Melnychuk
 
Selenium на практике и подводные камни
SQALab
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Swagger 2.0
Roman Krivtsov
 
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
Mail.ru Group
 
Qa Automation - отбрасываем лишнее и тестируем суть
Igor Khrol
 
Евгений Ртищев "Мобильная платформа на ReactNative"
IT Event
 
Ad

Viewers also liked (18)

PDF
Knockout js (Dennis Haney)
JavaScript Meetup HCMC
 
PPTX
Knockout js
LearningTech
 
PPTX
Knockout (support slides for presentation)
Aymeric Gaurat-Apelli
 
PPTX
Introduction to Knockoutjs
jhoguet
 
PPTX
Knockout.js explained
Paxcel Technologies
 
PPTX
Fundaments of Knockout js
Flavius-Radu Demian
 
PPT
KnockoutJS and MVVM
Manvendra Singh
 
PPT
Knockout.js
Mindfire Solutions
 
PPTX
Knockout js
hhassann
 
PDF
Knockout js session
Ravinder Mahajan
 
PDF
An introduction to knockout.js
Emanuele DelBono
 
KEY
Knockout.js presentation
Scott Messinger
 
PPTX
Knockout.js
Vivek Rajan
 
PPTX
Knockout JS Development - a Quick Understanding
Udaya Kumar
 
PPTX
Knockout js
shobokshi
 
PPTX
#2 Hanoi Magento Meetup - Part 2: Knockout JS
Hanoi MagentoMeetup
 
PPT
Download presentation
webhostingguy
 
PPT
Slideshare Powerpoint presentation
elliehood
 
Knockout js (Dennis Haney)
JavaScript Meetup HCMC
 
Knockout js
LearningTech
 
Knockout (support slides for presentation)
Aymeric Gaurat-Apelli
 
Introduction to Knockoutjs
jhoguet
 
Knockout.js explained
Paxcel Technologies
 
Fundaments of Knockout js
Flavius-Radu Demian
 
KnockoutJS and MVVM
Manvendra Singh
 
Knockout.js
Mindfire Solutions
 
Knockout js
hhassann
 
Knockout js session
Ravinder Mahajan
 
An introduction to knockout.js
Emanuele DelBono
 
Knockout.js presentation
Scott Messinger
 
Knockout.js
Vivek Rajan
 
Knockout JS Development - a Quick Understanding
Udaya Kumar
 
Knockout js
shobokshi
 
#2 Hanoi Magento Meetup - Part 2: Knockout JS
Hanoi MagentoMeetup
 
Download presentation
webhostingguy
 
Slideshare Powerpoint presentation
elliehood
 
Ad

Similar to knockout.js (20)

PPTX
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
PPTX
Введение в Knockout
Pavel Tsukanov
 
PPTX
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
solit
 
PDF
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
MoscowJS
 
PDF
Михаил Давыдов — JavaScript: События
Yandex
 
PDF
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
PDF
JavaScript. Event Model (in russian)
Mikhail Davydov
 
PDF
Алексей Бережной — «jQuery»
Yandex
 
PPT
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
PDF
C# Web. Занятие 12.
Igor Shkulipa
 
PDF
C# Web. Занятие 02.
Igor Shkulipa
 
PDF
basis.js - почему я не бросил разрабатывать свой фреймворк
Roman Dvornov
 
PDF
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
PDF
C# Web. Занятие 16.
Igor Shkulipa
 
PPTX
ASP.NET, MVC, ASP.NET MVC
GetDev.NET
 
PDF
Backbone js
Eugene Solovyov
 
PDF
Опыт разработки эффективного SPA
Eugene Abrosimov
 
PPTX
Backbone lesson 1
Mihail Skida
 
PPTX
I tmozg js_school
ITmozg
 
PDF
Как приручить реактивное программирование
DotNetConf
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
Введение в Knockout
Pavel Tsukanov
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
solit
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
MoscowJS
 
Михаил Давыдов — JavaScript: События
Yandex
 
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
JavaScript. Event Model (in russian)
Mikhail Davydov
 
Алексей Бережной — «jQuery»
Yandex
 
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Arseny Zarechnev
 
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 02.
Igor Shkulipa
 
basis.js - почему я не бросил разрабатывать свой фреймворк
Roman Dvornov
 
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
C# Web. Занятие 16.
Igor Shkulipa
 
ASP.NET, MVC, ASP.NET MVC
GetDev.NET
 
Backbone js
Eugene Solovyov
 
Опыт разработки эффективного SPA
Eugene Abrosimov
 
Backbone lesson 1
Mihail Skida
 
I tmozg js_school
ITmozg
 
Как приручить реактивное программирование
DotNetConf
 

knockout.js

  • 2. Про меня • CTO Noda (Naumen subsidiary) • Разработчик с XX-летним стажем • Сервер-сайд • С++ и Python • Python-активист, программный директор PyCon.RU
  • 3. Про доклад • Немного истории (как начиналось) • Много боли (во что превратилось) • Немного теории • Reactive programming • knockout.js (внезапно)
  • 4. Про то, чего НЕ будет • Глубоких сравнений с аналогами и альтернативами • Религиозных войн (ну разве совсем чуток) • Чудес и откровений (всё давно известно) • Золотых молотков
  • 6. Про «приложение на странице» • Одна страница • Много JavaScript • Много AJAX • Динамическое обновление контента • Интерактивные элементы • Tooltip/Completion/Validation • Throttling/Debouncing
  • 7. Про коллбэки • Отображение координат мыши при движении
  • 8. Про коллбэки • Отображение координат мыши при движении • Добавляем галочку – обновлять/не обновлять • Правим обработчик мыши
  • 9. Про коллбэки • Отображение координат мыши при движении • Добавляем галочку – обновлять/не обновлять • (Oops!) Вспоминаем, что надо обновить при смене галочки в позицию обновлять
  • 12. Про проблемы событий • Событие это действие, а не результат • Нас не волнует само событие • Нас волнует результат его обработки • То есть состояние системы • Состояние системы очень хрупкое • Много неявного состояния везде • Тяжело противостоять ошибкам • Ошибки надо тащить «из глубины» наверх
  • 13. Про «смерть от внезапной сложности» • 1000 строк кода на JS/JQuery • Состояние «во View» и в переменных • Изменения вносить УЖЕ практически невозможно
  • 14. Про «смерть от внезапной сложности» • 1000 строк кода на JS/JQuery • Состояние «во View» и в переменных • Изменения вносить практически невозможно
  • 18. Про «реактивное программирование» • Переменные - как ячейки в excel • Модель - формулы и зависимости • Граф зависимостей • Явное состояние • Можно отобразить/залогать • Все преобразования прозрачны • Просто тестируется
  • 19. Про MVVM • Presentation Model by Martin Fowler (2004) • Microsoft (WPF/Silverlight) by John Gossman (2005) • Компоненты • Model • View • ViewModel
  • 20. Про ViewModel • Составная часть Presentation • Отделяет логику View от View • Предоставляет API для доступа к модели • Примеры • Показ/скрытие элементов интерфейса по условию • Показ/скрытие Popup/Tooltip • Client-side validation • Обновление данных при смене фильтра
  • 21. Про knockout.js • Реактивный ViewModel • Observables • Dependency tracking • Declarative bindings • Templating
  • 23. Про knockout.js: Declarative Bindings • <span data-bind="text: mouseX"></span> • Контроль отображения • visible • text/html, value/checked, options/selectedOptions • css/style • attr • enable/disable, hasFocus • Control flow • foreach, if/ifnot, with • Подписка на события • click/submit/event • Возможность использовать выражений (спорная)
  • 24. Про «ячейки»: Observables • JS объекты • Простые/массивы/вычисляемые • Уведомление при изменении значения • Трассировка зависимостей • Автоматическая • Динамическая
  • 26. Про переезд • 2000 строк на JS/Jquery • Долгое раскуривание реактивности • Выбор библиотеки • Bacon.js • RxJS • Knockout • 1 неделя на переезд
  • 27. Про knockout.js • Free (MIT) • Чистый JS • 46kb minified, 16kb compressed (on wire) • Хорошая поддержка браузеров • Отличная документация • Interactive tutorial • Live examples
  • 28. Про то, о чём не сказано • Writable computed observables • Например, для обработки/валидации входных данных • Тонкости observable • Observable.peek() • rateLimiting (throttle) • Templating • Component bindings • AJAX
  • 29. Про ссылки • knockoutjs.com • wikipedia.org • Reactive programming • Model-View-ViewModel • Мартин Фаулер • http://martinfowler.com/eaaDev/PresentationModel.html
  • 30. Про Соловьёва • http://www.youtube.com/watch?v=R4sTvHXkToQ • В нём не упоминается knockout.js (где-то в вопросах только вскользь) • Подтолкнул к размышлениям "на тему" и направил к решениям