codefest 2013. Давыдов М. — Проект на бою. Работает?...

45
Работает? Стабильно? Эффективно? Михаил Давыдов, Яндекс

Upload: codefest

Post on 14-Nov-2014

578 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Работает? Стабильно? Эффективно? Михаил Давыдов,Яндекс

Page 2: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Error on line 1 column 57841. Ololo is not defined…

Page 3: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Воспроизводится! В норм. браузере!

Page 4: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

4

Эта проблема легко решается

•Это уже воспроизвелось!•Reformat Code•SourceMap

Page 5: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

5

Reformat Code

Page 6: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

6

SourceMap

•Сопоставляет код коду•UglifyJS•Chromium browser•CoffeeScript, TypeScript, JS

Статья - http://clck.ru/8bjOIВизуализатор - http://clck.ru/8bjOQ

Page 7: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

7

Воспроизводится! Только в IE < 8

Page 8: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

8

Дебаг IE – это весело!

•Любимые ошибки–Unexpected call to method or property access–Error: 'z' is null or not an object

Page 9: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

9

И эта проблема легко решается

•Это уже воспроизвелось!•console.log – не поможет…•F12 – не поможет…•Visual Studio Express – FTW!

Page 10: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

10

Visual Studio Express for Web

Как дебажить - http://clck.ru/8bjPG

Page 11: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Ошибка нигде не воспроизводится…

Page 12: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

12

И проблема решается

•Связаться с пользователем•Попросить описать шаги•Скриншоты•Информация о браузере

Page 13: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Отслеживание ошибок

Page 14: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

14

Отслеживаем ошибки

•Собираем все данные•Хорошая форма репорта•Отлов ошибок в фоне

Page 15: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

15

Собираем все данные

•User Agent•OS•Список все плагинов

Page 16: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

16

Хорошая форма репорта

•Все данные браузера•Скриншот•Пошаговое воспроизведение

Page 17: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

17

Распространённые формы репорта

•User Voice•Get Satisfaction•UserEchо

Page 18: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

18

Отлов ошибок в фоне

•Ловим– window.onerror + jQuery.error

•Интерпретируем– библиотека stacktracejs

•Отправляем– Google Analytics– Яндекс.Метрика

http://stacktracejs.com/

Page 19: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

19

Отлов ошибок в фоне

•Raven.js– Клиент для Sentry– window.onerror = Raven.process;– Open-Source

https://github.com/getsentry/raven-js

Page 20: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

20

Сервисы для отлова ошибок

•Qbaka•Proxino•Errorception

Page 21: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Предотвращение ошибок, как?

Page 22: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

22

Как предотвратить

•Хороший IDE– Ловит 95% проблем

•Статический анализ– Автоматический!– JSLint– JSHint

•Тестированиеhttp://www.jshint.com/

Хороший IDE – http://clck.ru/8bosY

Page 23: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Код долго загружается

Page 24: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

24

Как оптимизировать

•Вынести максимум в CDN•Найти холодный код•Найти мертвый код•Сделать ленивую загрузку

Page 25: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

25

Вынести максимум в CDN

•http://yandex.st/•http://cdnjs.com/•Google – http://clck.ru/8bjZK•Держать запасную библиотеку!

Page 26: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

26

Найти холодный и мертвый код

•Аналитически– Своим умом– С помощью IDE

•Счетчики для "фичей"– Google Analytics– Яндекс.Метрика

•Code Coverage

Page 27: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

27

Счетчики для "фичей"

•Это дешево– Сервисы аналитики есть везде

•Нужно вешать счетчики•Отчет слишком общий

Page 28: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

28

Статистический Code Coverage

•СС – не только для тестов•Пользователь – лучший тестер

•Дешево и надежно•Можно управлять покрытием•Мониторится все

Page 29: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

29

Статистический Code Coverage

https://github.com/azproduction/lmd

Page 30: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

30

Косвенная прибыль Code Coverage

•Знаем что не интересно•Знаем горячие фичи

Page 31: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Загружаем лениво

Page 32: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

32

Как использовать

•Выделяем холодный код•Делим код на модули•Загружаем по требованию

Page 33: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

33

Библиотеки для ленивой загрузки

•RequireJS + r.js•LABjs, YepNope, Headjs•LMD

Page 34: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Деградация проекта. Как не допустить?

Page 35: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

35

Деградация происходит из-за

•Не соблюдается Code Style•Децентрализация•Отсутствие документации

Page 36: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

36

Способы предотвращения деградации

•Единый Code Style•Коммит через Code Review•Проверка кода c JSHint•Автотесты•Плановые рефакторинги

Page 37: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Что нужно пользователю?

Page 38: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

38

Что нужно пользователю

•Стабильная работа•Быстрая загрузка•"Прикольные фичи!!11"

Page 39: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

39

Как узнать какие фичи нужны/не нужны?

Page 40: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

40

Что нужно пользователю

•Опросники•Счетчики•Code Coverage•Анализ конкурентов

Page 41: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

41

Холодная фича – не нужная фича?

Page 42: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

42

Проблемы Холодной фичи

•Не знают о ней•Не могут найти•Не удобная/не привыкли•Не нужна

Page 43: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Оптимизируем затраты

Page 44: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

44

На что нужно обратить внимание

•Максимум автоматизации– Отлов ошибок– Хороший IDE– Статический анализ кода с JSHint

•Не пишем лишнее– Формы с обсуждением фичей– Взвешиваем каждую фичу– Code Coverage для анализа кода

Page 45: CodeFest 2013. Давыдов М. — Проект на бою. Работает? Стабильно? Эффективно? Мониторим, анализируем, делаем

Михаил ДавыдовЯндекс

[email protected]

Спасибо