magento - Каранда Александр, Кирилл Морозов

58
Magentocommerce.com «Magento Health Check» (медосмотр) Каранда Александр, Кирилл Морозов

Upload: meetmagento

Post on 24-Jun-2015

1.352 views

Category:

Documents


0 download

DESCRIPTION

Magento. Медосмотр.

TRANSCRIPT

Page 1: Magento - Каранда Александр, Кирилл Морозов

Magentocommerce.com

«Magento Health Check»

(медосмотр)

Каранда Александр, Кирилл Морозов

Page 2: Magento - Каранда Александр, Кирилл Морозов

О нас

Каранда Александр, консультант

Кирилл Морозов, консультант

Page 3: Magento - Каранда Александр, Кирилл Морозов

А поговорить?

Пролог Теория заболеваний Диагностика Выписываем рецепт

Page 4: Magento - Каранда Александр, Кирилл Морозов

Пролог

Page 5: Magento - Каранда Александр, Кирилл Морозов

Пролог

Ребята, нужно поработать, а не как обычно!

Page 6: Magento - Каранда Александр, Кирилл Морозов

Во что превратилось

Health Check

Upgrade Analysis

Takeoff Check

Business Requirements Analysis

Page 7: Magento - Каранда Александр, Кирилл Морозов

Теория заболеваний Мадженто

Page 8: Magento - Каранда Александр, Кирилл Морозов

84%

16%

I

II

III

IV

V

Температура

Page 9: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

1. Загрузка моделей в цикле

Page 10: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

2. Загрузка одних и тех же сущностей больше одного раза

Page 11: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

3. Обрабатываем больше данных чем нужно

Page 12: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

4. Пересчет данных каждый раз при вызове метода

Page 13: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

5. Забываем о кешировании

Page 14: Magento - Каранда Александр, Кирилл Морозов

37%

21%

13%

8%

5%

16%

Температура

16%

I

II

III

IV

V

Все остальное

Page 15: Magento - Каранда Александр, Кирилл Морозов

Первые симптомы

• Спагетти код

• Копи-паста код

• Хардкорд

• Игнорирование код стилей (Zend)

• Отсутствие PHP-DOC-oв

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

• Закоментированые куски кода

• Методы по 200 строк

• Классы по 100500 строк REFACTORING

Page 16: Magento - Каранда Александр, Кирилл Морозов

Запах

Page 17: Magento - Каранда Александр, Кирилл Морозов

Запах

FIXME

TODO

HACK

Page 18: Magento - Каранда Александр, Кирилл Морозов

Запах

Axe Effect

Page 19: Magento - Каранда Александр, Кирилл Морозов

//@todo: fix this bull shit

//@todo: possible PCI compliance issue

//@todo: prepare header from revu format

//@todo: We need to log such exceptions to somewhere

//@todo: remove wish list observer processAddToCart

//@todo: add filter by current website

//@todo: add full name logic

//@todo: move to config

//@todo: implement setter for this value

//@FIXME: stupid fix of previous multi-roles logic.

//@todo: implement

//@todo: merge with reason

//@todo: fix possible issues with date format

Запах

Проблема

Решение

Page 20: Magento - Каранда Александр, Кирилл Морозов

Тренды

• Популярные проблемы • Проблемы по модулям• Классификация проблем

Page 21: Magento - Каранда Александр, Кирилл Морозов

Диагностика

Page 22: Magento - Каранда Александр, Кирилл Морозов

Реальный клиент Х

15+

Неймспесов

120+

Модулей

2000+

Моделей

100000+

Строчек Кода

1000+

Чашек кофе

Page 23: Magento - Каранда Александр, Кирилл Морозов

Реальный клиент Х

Page 24: Magento - Каранда Александр, Кирилл Морозов

Автоматизация

ПХП Шторм плагин:reVu by Sylvain Francois

Автоматизация: PHP CodeSnifferPHP Parser

Автогенерация отчетовphpdocx

Page 25: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система

Page 26: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация

(TokenReflection)Token Type Token Content

T_VARIABLE $a

T_EQUAL =

T_LNUMBER 5

T_SEMICOLON ;

T_VARIABLE $c

T_EQUAL =

T_VARIABLE $a

T_PLUS +

T_LNUMBER 6

$a = 5;$c = $a + 6;

Page 27: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация

(TokenReflection)

[code] => 320[type] => T_FOR[content] => for[line] => 3[parenthesis_opener] => 3[parenthesis_closer] => 16[parenthesis_owner] => 2[scope_condition] => 2[scope_opener] => 18[scope_closer] => 26[column] => 1

[23] => Array( [type] => T_VARIABLE [content] => $i [line] => 3 [nested_parenthesis] => Array (          [3] => 16     )

for($i=0; $i < 5; $i++) {   echo $i;}

Page 28: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация

(TokenReflection)Поиски Мифического GOTO в коде

Page 29: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация

(TokenReflection) Поиски конкатенации строк через +

Page 30: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация (TokenReflection)3. PHP Лексическое Дерево

(PHP_Parser)

$a = 1;$b = 2;$c = $a + $b;

Page 31: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация (TokenReflection)3. PHP Лексическое Дерево

(PHP_Parser)

xpath : > //node:Expr_MethodCall/subNode:name[ scalar:string="getFirstItem" and count( ./ancestor::node:Expr_MethodCall[1]/descendant::node:Expr_MethodCall/subNode:name[ scalar:string = "limit" or scalar:string = "setPageSize" or scalar:string = "setPage"]) = 0 ] Загрузка коллекций без ограничений

Page 32: Magento - Каранда Александр, Кирилл Морозов

Сравнение подходов

PHP Токенизация (TokenReflection)class Ecg_Sniffs_Performance_LoopModelLoadSniff implements PHP_CodeSniffer_Sniff{ public function register() { return array(T_WHILE, T_FOR, T_FOREACH, T_DO); }

public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr) { $tokens = $phpcsFile->getTokens(); $opener = $tokens[$stackPtr]['scope_opener']; $closer = $tokens[$stackPtr]['scope_closer']; for ($ptr = $opener + 1; $ptr < $closer; $ptr++) { $content = $tokens[$ptr]['content']; if ($tokens[$ptr]['code'] === T_STRING && $content == 'load') { $phpcsFile->addError('Model load in loop detected', $ptr, 'ModelLoad', array $content)); } } }}

>> execution time: 0.05sec

PHP Лексическое Дерево//*[ name()="node:Stmt_Foreach" or name()="node:Stmt_Do" or name()="node:Stmt_For" or name()="node:Stmt_While"]//node:Expr_MethodCall/subNode:name[ scalar:string = "load"]

>>execution time: 0.0001sec

Загрузка моделей в цикле

Page 33: Magento - Каранда Александр, Кирилл Морозов

что не нужно забывать

Xml files (configuration & layout updates)

DB Schema (indexes, non-optimal field types)

Javascript, CSS & HTML

Вне поля зрения

Автоматизация находит только подозрения20-25 % подозрений – это круто

Page 34: Magento - Каранда Александр, Кирилл Морозов

Программный граф

1. Файловая Система2. PHP Токенизация (TokenReflection)3. PHP Лексическое Дерево

(PHP_Parser)4. Семантические связи5. Циклические вызовы

Page 35: Magento - Каранда Александр, Кирилл Морозов

Мониторинг

Page 36: Magento - Каранда Александр, Кирилл Морозов

Мониторинг

Что за $%?

Релиз, $%#%!

Page 37: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Процессор

Page 38: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Сеть

Page 39: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Время ответа

Page 40: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Время ответа

Page 41: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Самые медленные

Page 42: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Самые медленные

Page 43: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Самые медленные

Page 44: Magento - Каранда Александр, Кирилл Морозов

Мониторинг: Самые медленные

Page 45: Magento - Каранда Александр, Кирилл Морозов

APDEX

Page 46: Magento - Каранда Александр, Кирилл Морозов

APDEX

Page 47: Magento - Каранда Александр, Кирилл Морозов

По следам

Page 48: Magento - Каранда Александр, Кирилл Морозов

По следам: Мы знаем как

Page 49: Magento - Каранда Александр, Кирилл Морозов

По следам: Видно почему

Page 50: Magento - Каранда Александр, Кирилл Морозов

По следам: Видно почему

Page 51: Magento - Каранда Александр, Кирилл Морозов

По следам: Кто виноват

Page 52: Magento - Каранда Александр, Кирилл Морозов

По следам: Кто виноват

Page 53: Magento - Каранда Александр, Кирилл Морозов

Выписываем рецепт

Page 54: Magento - Каранда Александр, Кирилл Морозов

Рецепт

• Проверка кода как часть методологии

ведения проектов

• Автоматические проверки кода с

билдами (CI)

• Расширяем базу для проверки(свои

сниферы)

• Пользуемся Системами Мониторинга

(Ньюрелик)

• Систематическая проверка

Page 55: Magento - Каранда Александр, Кирилл Морозов

Просто так

• Скучные вещи не всегда такие скучные• Не все можно автоматизировать• Не ждите пока проблемы начнут проявляться,

проверяйте приложение чаще

Page 56: Magento - Каранда Александр, Кирилл Морозов

Полезности

ECG page

http://magento.com/consulting

Magento coding standards and best practices

https://github.com/magento-ecg/coding-standard

http://www.magentocommerce.com/knowledge-base

https://wiki.magento.com/display/MAGE2DOC/PHP+Coding+Standards+and+Practices

Tools

https://github.com/nikic/PHP-Parser

http://phpmd.org

https://github.com/Andrewsville/PHP-Token-Reflection

Common Weakness Enumeration

http://cwe.mitre.org

reVu code review plugin

https://github.com/syllant/idea-plugin-revu

Page 57: Magento - Каранда Александр, Кирилл Морозов

Спрашивайте

Каранда Александр[email protected]

Кирилл Морозов[email protected]

Page 58: Magento - Каранда Александр, Кирилл Морозов

Спасибо за внимание

Вопросы?