SlideShare a Scribd company logo
Magentocommerce.com
«Magento Health
Check»
(медосмотр)
Каранда Александр, Кирилл Морозов
О нас
Каранда
Александр, консультант
Кирилл Морозов, консультант
А поговорить?
 Пролог
 Теория заболеваний
 Диагностика
 Выписываем рецепт
Пролог
Пролог
Ребята, нужно поработать, а не как обычно!
Во что превратилось
Health Check
Upgrade Analysis
Takeoff Check
Business Requirements Analysis
Теория заболеваний Мадженто
84%
16%
I
II
III
IV
V
Температура
37%
21%
13%
8%
5%
16%
Температура
1. Загрузка моделей в цикле
37%
21%
13%
8%
5%
16%
Температура
2. Загрузка одних и тех же сущностей больше одного раза
37%
21%
13%
8%
5%
16%
Температура
3. Обрабатываем больше данных чем нужно
37%
21%
13%
8%
5%
16%
Температура
4. Пересчет данных каждый раз при вызове метода
37%
21%
13%
8%
5%
16%
Температура
5. Забываем о кешировании
37%
21%
13%
8%
5%
16%
Температура
16%
I
II
III
IV
V
Все остальное
Первые симптомы
• Спагетти код
• Копи-паста код
• Хардкорд
• Игнорирование код стилей (Zend)
• Отсутствие PHP-DOC-oв
• Использование голобалсов
• Закоментированые куски кода
• Методы по 200 строк
• Классы по 100500 строк
REFACTO
RING
Запах
//@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
Запах
Проблема
Решение
Тренды
• Популярные проблемы
• Проблемы по модулям
• Классификация проблем
Диагностика
Реальный клиент Х
15+
Неймспесов
120+
Модулей
2000+
Моделей
100000+
Строчек
Кода
1000+
Чашек кофе
Реальный клиент Х
Автоматизация
ПХП Шторм плагин:
reVu by Sylvain Francois
Автоматизация:
PHP CodeSniffer
PHP Parser
Автогенерация отчетов
phpdocx
Программный граф
1. Файловая Система
Программный граф
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;
Программный граф
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;
}
Программный граф
1. Файловая Система
2. PHP Токенизация
(TokenReflection)
Поиски Мифического GOTO в коде
Программный граф
1. Файловая Система
2. PHP Токенизация
(TokenReflection) Поиски конкатенации строк через +
Программный граф
1. Файловая Система
2. PHP Токенизация (TokenReflection)
3. PHP Лексическое Дерево (PHP_Parser)
$a = 1;
$b = 2;
$c = $a + $b;
Программный граф
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
] Загрузка коллекций без ограниче
Сравнение подходов
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
Загрузка моделей в цикле
что не нужно забывать
Xml files (configuration & layout updates)
DB Schema (indexes, non-optimal field types)
Javascript, CSS & HTML
Вне поля зрения
Автоматизация находит только подозрения
20-25 % подозрений – это круто
Программный граф
1. Файловая Система
2. PHP Токенизация (TokenReflection)
3. PHP Лексическое Дерево (PHP_Parser)
4. Семантические связи
5. Циклические вызовы
Мониторинг
Мониторинг
Что за
$%?
Релиз, $%
#%!
Мониторинг: Процессор
Мониторинг: Сеть
Мониторинг: Время ответа
Мониторинг: Время ответа
Мониторинг: Самые медленные
Мониторинг: Самые медленные
Мониторинг: Самые медленные
Мониторинг: Самые медленные
APDEX
APDEX
По следам
По следам: Мы знаем как
По следам: Видно почему
По следам: Видно почему
По следам: Кто виноват
По следам: Кто виноват
Выписываем рецепт
Рецепт
• Проверка кода как часть методологии ведения
проектов
• Автоматические проверки кода с билдами (CI)
• Расширяем базу для проверки(свои сниферы)
• Пользуемся Системами Мониторинга (Ньюрелик)
• Систематическая проверка
Просто так
• Скучные вещи не всегда такие скучные
• Не все можно автоматизировать
• Не ждите пока проблемы начнут проявляться, проверяйте
приложение чаще
Полезности
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
Спрашивайте
Каранда Александр
alex.karanda@ebay.com
Кирилл Морозов
kirill.morozov@ebay.com
Спасибо за внимание
Вопросы?

More Related Content

Viewers also liked

TagesJump - Дмитрий Голубовский
TagesJump - Дмитрий ГолубовскийTagesJump - Дмитрий Голубовский
TagesJump - Дмитрий Голубовский
meet_magento
 
aheadWorks - Петр Самойлов
aheadWorks - Петр СамойловaheadWorks - Петр Самойлов
aheadWorks - Петр Самойлов
meet_magento
 
aheadWorks - Кирилл Голуб
aheadWorks - Кирилл ГолубaheadWorks - Кирилл Голуб
aheadWorks - Кирилл Голуб
meet_magento
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
meet_magento
 
Amasty - Александр Стельмах
Amasty - Александр СтельмахAmasty - Александр Стельмах
Amasty - Александр Стельмах
meet_magento
 
NetReseach - Thomas Fleck
NetReseach - Thomas FleckNetReseach - Thomas Fleck
NetReseach - Thomas Fleck
meet_magento
 
CyberHULL - Вадим Сытников
CyberHULL - Вадим СытниковCyberHULL - Вадим Сытников
CyberHULL - Вадим Сытников
meet_magento
 
Atwix - Ярослав Рогоза
Atwix - Ярослав РогозаAtwix - Ярослав Рогоза
Atwix - Ярослав Рогоза
meet_magento
 
Atalan - Илья Зинченко
Atalan - Илья ЗинченкоAtalan - Илья Зинченко
Atalan - Илья Зинченко
meet_magento
 
Turnkey Ecommerce - Magento разработчики
Turnkey Ecommerce - Magento разработчикиTurnkey Ecommerce - Magento разработчики
Turnkey Ecommerce - Magento разработчики
turnkeye
 
Turnkey Ecommerce - Олег Чеховский
Turnkey Ecommerce - Олег ЧеховскийTurnkey Ecommerce - Олег Чеховский
Turnkey Ecommerce - Олег Чеховский
meet_magento
 
практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кода
Yuri Afanasiev
 
Applying multi-processing techniques in Magento for upgrade optimization
Applying multi-processing techniques in Magento for upgrade optimizationApplying multi-processing techniques in Magento for upgrade optimization
Applying multi-processing techniques in Magento for upgrade optimization
Kirill Morozov
 
Start Your Search Engines: Optimizing Solr to Improve Results
Start Your Search Engines: Optimizing Solr to Improve ResultsStart Your Search Engines: Optimizing Solr to Improve Results
Start Your Search Engines: Optimizing Solr to Improve Results
Ryan Street
 
Manufacturing noida-electrostarelectronics
Manufacturing noida-electrostarelectronicsManufacturing noida-electrostarelectronics
Manufacturing noida-electrostarelectronics
Electrostar Noida
 
Characterization dp
Characterization dpCharacterization dp
Characterization dp
StevenPlummer15
 
5 themes of geography 3 (7)
5 themes of geography  3 (7)5 themes of geography  3 (7)
5 themes of geography 3 (7)
apples1299
 
The motherland-of-manufacturing
The motherland-of-manufacturingThe motherland-of-manufacturing
The motherland-of-manufacturing
Electrostar Noida
 
Electrostar electronicsnoida
Electrostar electronicsnoidaElectrostar electronicsnoida
Electrostar electronicsnoida
Electrostar Noida
 
Mobile chargers
Mobile chargersMobile chargers
Mobile chargers
Electrostar Noida
 

Viewers also liked (20)

TagesJump - Дмитрий Голубовский
TagesJump - Дмитрий ГолубовскийTagesJump - Дмитрий Голубовский
TagesJump - Дмитрий Голубовский
 
aheadWorks - Петр Самойлов
aheadWorks - Петр СамойловaheadWorks - Петр Самойлов
aheadWorks - Петр Самойлов
 
aheadWorks - Кирилл Голуб
aheadWorks - Кирилл ГолубaheadWorks - Кирилл Голуб
aheadWorks - Кирилл Голуб
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
 
Amasty - Александр Стельмах
Amasty - Александр СтельмахAmasty - Александр Стельмах
Amasty - Александр Стельмах
 
NetReseach - Thomas Fleck
NetReseach - Thomas FleckNetReseach - Thomas Fleck
NetReseach - Thomas Fleck
 
CyberHULL - Вадим Сытников
CyberHULL - Вадим СытниковCyberHULL - Вадим Сытников
CyberHULL - Вадим Сытников
 
Atwix - Ярослав Рогоза
Atwix - Ярослав РогозаAtwix - Ярослав Рогоза
Atwix - Ярослав Рогоза
 
Atalan - Илья Зинченко
Atalan - Илья ЗинченкоAtalan - Илья Зинченко
Atalan - Илья Зинченко
 
Turnkey Ecommerce - Magento разработчики
Turnkey Ecommerce - Magento разработчикиTurnkey Ecommerce - Magento разработчики
Turnkey Ecommerce - Magento разработчики
 
Turnkey Ecommerce - Олег Чеховский
Turnkey Ecommerce - Олег ЧеховскийTurnkey Ecommerce - Олег Чеховский
Turnkey Ecommerce - Олег Чеховский
 
практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кода
 
Applying multi-processing techniques in Magento for upgrade optimization
Applying multi-processing techniques in Magento for upgrade optimizationApplying multi-processing techniques in Magento for upgrade optimization
Applying multi-processing techniques in Magento for upgrade optimization
 
Start Your Search Engines: Optimizing Solr to Improve Results
Start Your Search Engines: Optimizing Solr to Improve ResultsStart Your Search Engines: Optimizing Solr to Improve Results
Start Your Search Engines: Optimizing Solr to Improve Results
 
Manufacturing noida-electrostarelectronics
Manufacturing noida-electrostarelectronicsManufacturing noida-electrostarelectronics
Manufacturing noida-electrostarelectronics
 
Characterization dp
Characterization dpCharacterization dp
Characterization dp
 
5 themes of geography 3 (7)
5 themes of geography  3 (7)5 themes of geography  3 (7)
5 themes of geography 3 (7)
 
The motherland-of-manufacturing
The motherland-of-manufacturingThe motherland-of-manufacturing
The motherland-of-manufacturing
 
Electrostar electronicsnoida
Electrostar electronicsnoidaElectrostar electronicsnoida
Electrostar electronicsnoida
 
Mobile chargers
Mobile chargersMobile chargers
Mobile chargers
 

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

Andrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
Andrei Grigoriev | Version Control in Data Science | Kazan ODSC MeetupAndrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
Andrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
Provectus
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Technopark
 
"Создание системы логирования" Литуненко Андрей, 2ГИС
"Создание системы логирования" Литуненко Андрей, 2ГИС"Создание системы логирования" Литуненко Андрей, 2ГИС
"Создание системы логирования" Литуненко Андрей, 2ГИС
it-people
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
Ruslan Shevchenko
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Andrey Karpov
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Ivan Tsyganov
 
Преимущества PHP 7: от D7 до новой виртуальной машины
Преимущества PHP 7:  от D7 до новой виртуальной машиныПреимущества PHP 7:  от D7 до новой виртуальной машины
Преимущества PHP 7: от D7 до новой виртуальной машины
1С-Битрикс
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
SQALab
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QAFest
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
Denis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Development User Group
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
Positive Development User Group
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
Mail.ru Group
 
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOMYuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
OdessaJS Conf
 
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)
Alexey Lesovsky
 
Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Technopark
 
Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Technopark
 

Similar to Magento - Каранда Александр, Кирилл Морозов (20)

Andrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
Andrei Grigoriev | Version Control in Data Science | Kazan ODSC MeetupAndrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
Andrei Grigoriev | Version Control in Data Science | Kazan ODSC Meetup
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2
 
"Создание системы логирования" Литуненко Андрей, 2ГИС
"Создание системы логирования" Литуненко Андрей, 2ГИС"Создание системы логирования" Литуненко Андрей, 2ГИС
"Создание системы логирования" Литуненко Андрей, 2ГИС
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
 
Преимущества PHP 7: от D7 до новой виртуальной машины
Преимущества PHP 7:  от D7 до новой виртуальной машиныПреимущества PHP 7:  от D7 до новой виртуальной машины
Преимущества PHP 7: от D7 до новой виртуальной машины
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOMYuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
 
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)
 
Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2
 
Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014Тестирование лекция 2 весна 2014
Тестирование лекция 2 весна 2014
 

More from meet_magento

Федор Вирин (Data Insight) - Ecommerce 2015
Федор Вирин (Data Insight) - Ecommerce 2015Федор Вирин (Data Insight) - Ecommerce 2015
Федор Вирин (Data Insight) - Ecommerce 2015
meet_magento
 
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
meet_magento
 
Илья Коган (Яндекс.Маркет) - Новые возможности сервиса
Илья Коган (Яндекс.Маркет) - Новые возможности сервисаИлья Коган (Яндекс.Маркет) - Новые возможности сервиса
Илья Коган (Яндекс.Маркет) - Новые возможности сервиса
meet_magento
 
Андрей Татаранович (Amasty) - Секретные материалы техподдержки
Андрей Татаранович (Amasty) - Секретные материалы техподдержкиАндрей Татаранович (Amasty) - Секретные материалы техподдержки
Андрей Татаранович (Amasty) - Секретные материалы техподдержки
meet_magento
 
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для MagentoИгорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
meet_magento
 
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
meet_magento
 
Александр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWSАлександр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWS
meet_magento
 
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
meet_magento
 
Ben Marks - Magento Inc.
Ben Marks - Magento Inc.Ben Marks - Magento Inc.
Ben Marks - Magento Inc.
meet_magento
 
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
meet_magento
 
Олег Чеховский (Turnkey Ecommerce) - Magento в России
Олег Чеховский (Turnkey Ecommerce) - Magento в РоссииОлег Чеховский (Turnkey Ecommerce) - Magento в России
Олег Чеховский (Turnkey Ecommerce) - Magento в России
meet_magento
 
Мария Шульга (Яндекс) - Покупка на Маркете
Мария Шульга (Яндекс) - Покупка на МаркетеМария Шульга (Яндекс) - Покупка на Маркете
Мария Шульга (Яндекс) - Покупка на Маркете
meet_magento
 
Федор Вирин (Data Insight) - Исследование изменений потребительского поведения
Федор Вирин (Data Insight) - Исследование изменений потребительского поведенияФедор Вирин (Data Insight) - Исследование изменений потребительского поведения
Федор Вирин (Data Insight) - Исследование изменений потребительского поведения
meet_magento
 
Данила Тарасов (MyGento) - Интеграция розницы в Magento
Данила Тарасов (MyGento) - Интеграция розницы в MagentoДанила Тарасов (MyGento) - Интеграция розницы в Magento
Данила Тарасов (MyGento) - Интеграция розницы в Magento
meet_magento
 
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазинаАртем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
meet_magento
 
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
meet_magento
 
Елена Ткачева (Magento) - Особенности Magento2
Елена Ткачева (Magento) - Особенности Magento2Елена Ткачева (Magento) - Особенности Magento2
Елена Ткачева (Magento) - Особенности Magento2
meet_magento
 
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
meet_magento
 
Magento Live Germany
Magento Live GermanyMagento Live Germany
Magento Live Germany
meet_magento
 
Turnkey Ecommerce - Сергей Двоскин
Turnkey Ecommerce - Сергей ДвоскинTurnkey Ecommerce - Сергей Двоскин
Turnkey Ecommerce - Сергей Двоскин
meet_magento
 

More from meet_magento (20)

Федор Вирин (Data Insight) - Ecommerce 2015
Федор Вирин (Data Insight) - Ecommerce 2015Федор Вирин (Data Insight) - Ecommerce 2015
Федор Вирин (Data Insight) - Ecommerce 2015
 
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
Сергей Двоскин (ASTRIO) - Стратегия создания и развития успешного проекта на ...
 
Илья Коган (Яндекс.Маркет) - Новые возможности сервиса
Илья Коган (Яндекс.Маркет) - Новые возможности сервисаИлья Коган (Яндекс.Маркет) - Новые возможности сервиса
Илья Коган (Яндекс.Маркет) - Новые возможности сервиса
 
Андрей Татаранович (Amasty) - Секретные материалы техподдержки
Андрей Татаранович (Amasty) - Секретные материалы техподдержкиАндрей Татаранович (Amasty) - Секретные материалы техподдержки
Андрей Татаранович (Amasty) - Секретные материалы техподдержки
 
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для MagentoИгорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magento
 
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...
 
Александр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWSАлександр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWS
 
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
Дмитрий Голубовский (TagesJump) - Как заказчику и разработчику не потерять св...
 
Ben Marks - Magento Inc.
Ben Marks - Magento Inc.Ben Marks - Magento Inc.
Ben Marks - Magento Inc.
 
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
Дмитрий Голубовский (TagesJump) - Финансовые и технологические преимущества M...
 
Олег Чеховский (Turnkey Ecommerce) - Magento в России
Олег Чеховский (Turnkey Ecommerce) - Magento в РоссииОлег Чеховский (Turnkey Ecommerce) - Magento в России
Олег Чеховский (Turnkey Ecommerce) - Magento в России
 
Мария Шульга (Яндекс) - Покупка на Маркете
Мария Шульга (Яндекс) - Покупка на МаркетеМария Шульга (Яндекс) - Покупка на Маркете
Мария Шульга (Яндекс) - Покупка на Маркете
 
Федор Вирин (Data Insight) - Исследование изменений потребительского поведения
Федор Вирин (Data Insight) - Исследование изменений потребительского поведенияФедор Вирин (Data Insight) - Исследование изменений потребительского поведения
Федор Вирин (Data Insight) - Исследование изменений потребительского поведения
 
Данила Тарасов (MyGento) - Интеграция розницы в Magento
Данила Тарасов (MyGento) - Интеграция розницы в MagentoДанила Тарасов (MyGento) - Интеграция розницы в Magento
Данила Тарасов (MyGento) - Интеграция розницы в Magento
 
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазинаАртем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
Артем Игнатьев (Atalan) - Проектируем каталог интернет-магазина
 
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015
 
Елена Ткачева (Magento) - Особенности Magento2
Елена Ткачева (Magento) - Особенности Magento2Елена Ткачева (Magento) - Особенности Magento2
Елена Ткачева (Magento) - Особенности Magento2
 
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
Thomas Fleck (Netresearch) - Meet magento ru 2014 - standardisation
 
Magento Live Germany
Magento Live GermanyMagento Live Germany
Magento Live Germany
 
Turnkey Ecommerce - Сергей Двоскин
Turnkey Ecommerce - Сергей ДвоскинTurnkey Ecommerce - Сергей Двоскин
Turnkey Ecommerce - Сергей Двоскин
 

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

Editor's Notes

  1. Я являюсь тимлидом в отделе Мадженто: експерт консалтинг груп. Мы предоставляем клиентам разные виды услуг, архитектурные ришения, мониторинг систем, продженктмепеджмент и т.д. Занимаемся тем же чем и партнеры, помагаем нашим клиентам быть успешными на базе Мадженто.Нереальные вещи – делаем реальными 
  2. Проверкасостояния систем перед запуском. Каккода так и инфраструктуры, запусклоадтестов и автоматическихрегрешин.Проверкаготовностикода с точки зрениябизнесанализа, когдаклиент не совсемуверн, что код реализуетбизнеслогику. Такой себе аудит решения, особеннополезнокогдадаешь в разработкумаленькойаутсорскоманде в 300 чел, и оничто-токолбасят на протяжениигода и в когцегоданужноещетщательнообработатьнапильником, что б с паравозаполучилсясамолет.Анализкода на совместимость с новымивресиями. Все мыработаем с пхп, языксосплошнойдинамикой в разработке и гибкостью и можно так надевелопить, чтоиз 50 кастомныхмодулей, 48 не будутсовместимы с новойверсиейпродукта, нонужно все таки обновить и узнатьсколькобудетстоитьобновлени. Тогдапроводиманализ.Ну и самоеинтерестное, визитмадженто к доктору, береманализы, проверяминфраструктуру, проверям код на потенциальныепроблеммы.- код, приложение, система.Все вышеперечисленноевыможете вводить как практику на проекте или же предоставлять вашим клиентамкакдополнительныйсервис. Бизнес идея.
  3. На нашейпрактикемывыявили 5 основныхзаболеваний, которыенаиболеевсегораспространены в Мадженте и создаютосновную погоду 84% от общего числа проблем.Можеткто-тодогадался о типичных проблемах?
  4. Может кому знакомо, загрузка моделей в цикле.37 процентов проблем в Мадженте связаны именно с этим кодом. Прям магия, 37 процентов и 37 температура воспалительного процесса.В чем же суть проблемы:Каждый лоад модели это 100% запрос в базу данныхТ.к. продукт у нас ЕАВ, то запросов у нас будет несколько.Так на лоад продукта будет 5-10 запросов. Зависит от многих факторов, катсомизаций. Если в коллекции у нас 20 продуктов, то как результат 200 лишних запросов. А вдруг у нас в коде еще пару таких блоков кода?К сати, из практики, рекордсмен был один клиент, у которого было 3000 запросов на загрузку страницы. При том, что без кеша в мадженте 45 запросов на загрузку страницы, что тоже много.Правильным решением будет подготовить данные, подготовить коллекцию и дальше уже просто использовать подготовленную информацию.Вместо повторной загрузки модели.
  5. Загрузка одной и той же сущности больше одного раза. 21% проблем Мадженты связаны именно с этим Каждый раз мы создаем отдельный экземпляр класса в памяти, каждый раз мы посылаем запрос в БД, только для того, что б получить значение одного атрибута сущности. Да Маджента не идеальна, но не будем усугублять не идеальность.Решением будет загрузка модели и далее уже используем загруженную модель.Кстати, про м2, в м2 есть будет реализован новый дата лаер, который сделает процесс инстанционирования более интеллектуальным. Дата лаер будет буферизировать загруженные модели в себе.И случае повторного запроса то й же сущности в рамках одной пхпсесии будет отдаваться уже загруженный инстанс. В принципе все логично, пхп все равно не освобождает память до конца сессии, и мы уже его раз загрузили так давайте будем держать ссылку на него.
  6. Неоптимальное использование возможностей коллекции, загрузка и обработка больше данных чем нам требуется.Может кто-то сталкивался. Примером являетсяфичеред блок.Подобные проблемы занимают 13% от всех проблем связанных с кодом.Нужно 5 элементовПо физике процессов у нас тут несколько проблем: БД обрабатывает кучу данныхБД готовит результат на аутпутМы гоняем по сети кучу пакетов данных, забивая каналывыгружаем всю коллекцию в память, все полтора миллиона продуктовдальше берем только первые два.Правильное решение, используем возможности Мадженто коллекции, добавляем лимит.
  7. Неоптимальная логика. Пересчет данных каждый раз как мы обращаемся к методу.8% от всех проблем связанных с кодом.Проблема не всегдаявная с первоговзгляда. Реализовав один раз метод, мыегоиспользуемнеоднократно и каждый раз данныевнутри метода пересчитываются.Решением, лечением, будетиспользование так званого, логическогокеширования. На времявыполненияпхпсессиисохраняем результат в протектедпеременнуюИспользуем уже загруженыеданныеилиподсчитануюинформацию.
  8. 5% от всех проблем связанных с кодом.Сложно придумать пример неправильно кода. Скажу просто. Мы полностью забываем про возможности кеширования в мадженте, особенно данных которые не будут меняться часто
  9. Ну и все остальные… Куча болезней, симптомов, признаков.ВозможностьSQL инекцийНеоптимальная обработка данныхЗагрузка огромнейших файлов в память…
  10. Предвесникамизаболеванийявляетсясыпь.Сыпь – еще не болезнь, но уже явный симптом чего-топриближающегося.Сыпьможноопределить по определенным признакам:Спагетти кодКопи-паста кодХардкодИгнорирование код стайлов (Zend)ОтсутствиеPHP-DOC-oвИспользованиеголобалсовЗакоментированые куски кодаМетодыпо 200 строкКлассы по 100500 строкРешение – Рефакторим!
  11. Все проблемыначинаются с запаха. Открываешь код на проверкуилианализ и уже с первоговзглядаможноопределитьопределенных запахи кода. Как правилоэтоподозрительный код. Вродебынетукориминала, еслибы не соответствующиекоментарри к коду. Особенноонивидныкогдаразработчикипытаютсяихскрыть.
  12. Скрываюткак правило дезодорантами.Самыепопулярныедезодоратны:ФиксМеТу ДуХакИногдаможно переборщить с дезодорантами и тогдаполучается:…
  13. Ахе ефект.Тудушки и коменты, не всегдаплохо, главноечто б онибыли в нужномместе и в нужноевремя.
  14. Какова же истинная проблема с запахами?!Если код находиться в разработке, то вообщеникаких.Проблема только с продакшиновым кодом.Все просто, имея в арсенале код дополненыйтудушками и фиксами мы:Создаем ощущение незавершённостиМожно забыть про то, что оставалось в коде.РешениеСоздаемтикеты в джиреЗаписываем задачи в роадмапДобавляем хистори в спринт беклог
  15. Прежде чем приступить к диагностике, хотелось бы сказать про тренды и каталог болезней.Типичные проблемы и болезни, формирут тренды. Это все тенденции Мадженто бизнеса. Но они нам так же дают возможность понять что нужно в мадженте улучшать, что б разработчики больше не делали таких же ошибок или система не позволяла делать такие ошибки.Вся информация предоставляется в Мадженто УниверситетИ в маджентокор.Хорошим примером является дата лаер, который не позволит делать некоторые типичные ошибки, которые могут повлиять на производительность.
  16. Начнем снебольшогопримера. К нам пришолнебольшойклиент с большимиамбициями. Попросилпосмотретькоданемного.А когдапосмотрелисколько там немножко оказалось:15 неймспейсов120 модулей2000 моделей100000, корочемного.
  17. Ну, горажданеалкоголики, хулиганы, туниядцы.Ктохочетсегодняпоработать?На ликеро-водочныйсегоднянарядовнету и врятли в ближайшиймесяцпридвидиться.ТолькоанализкодаИзвращалиськактолько могли: груповоеревью, одиночное код ревью, сверхувниз-снизу вверх. Послеревьюразборполетов, по старойдобройрусскойтрадициибудемискатьвиноватого.Еще один такой код ревью и вся команда уже готоваувольняться.
  18. Начали думать, что бы такое сделать что бы процесс проверки системы не был таким скучным и утомительным нужно его немного разнообразить.Все мы тут творческие люди и любим всякие новшества.Что можно сделать:Автоматизхировать процесс анализа, посмотреть в сторону написания сниферов на базеПхп код сниферПхппарсерИспользовать код ревью плагин для ИДЕшки, ревуАвтогенерациядокументоphpdocxА теперь остановимся на процессе автоматизации более детально, так как вручную, кто-угодно сможет
  19. В интернете куча статей о том какавтоматизироватьпроцесспроверки. Ноочень мало, о том, каксистематезироватьпроверку.Случайно нашли статью о представлении програмного продукта в виде набораграфов.Корневойсистемойданноййидеиявляетсяфайловая система.Которая сама по себе уже графТак мы уже можемоперировать папками, файлами, подпапкамиИ еслипойтиглубже то мыоперируем проектом, неймспейсом, модулями, моделями-файлами.Уже идетсбор метрик.
  20. Второйуровень, втораясоставляющая, Токенизацияпиейчпикода.На данномэтапеиспользуярефлексиюмытокенезируем код.Код превращается в плоскую структуру. Литерал в данном случае минимальная составляющая языка програмирования.При этомкаждомулитералуприсваивается ряд свойств.Вот пример кода.Ну и что, скажитевы, гляда на простенький пример, в Мадженте такого нету, там все сложней.
  21. Да, сложней.Поэтому покажу второй пример, где мы разбираем цикл.Пример токенизации цикла. Как я уже говорил, литерал собирает в себе ряд свойств.Не смотря на линейную структура, у нас есть опенер и клозер, по которым мы можем линковать внутренние элементы.
  22. Давайте посмотрикак же имеятокенизацию, можноорганизоватьпоискмефического готу в нашемкоде.Каксамый просто пример. Через реджестерзадаемтокены с кторымибудемработать и значениекоторыхбудемпроверять. Задаемотправную точку.Встретился готу – ругаемся матом.
  23. Поиск «Ява»конкатенации в пхпкоде, когда строку через + конкатенируют, чтоможет привести к неправильному выводуинформации для клиента.Отправная точка токент т_плюс.А дальше используяфайндПревиус, файндНекспрогуливаемся по коду и ищемпредыдущий и следующийтокен, сравниваем с типом токена, являетсяли он строкой.
  24. Следующимуровнемявляетсяпостроениелексического дерева.На данномуровнемы уже управляемлексическимиконструкциямиязыка, в отличии от последовательныхтокенов/литералов.1. Имея на входе простенький пхп код,2. Пропускаем код через пхппарсер и получаемлексическое дерево. Самоепростоепредставление дерева - естественнохмл.По сравнению с токенами у нас етсьоченькрасивоепредставлениеметодов в виде дерева.Начиная от класов и в глубь до простыхлитералов.Мыможемоперировать и анализировать на разномуровне: У нас естьконструкцииязыка, выражения, лексемы, литералыУ выраженияестьПеременная в которуюзаписываем результатподвыражениеУ выраженияестьсвоисостоявляющие… тип: плюсИ т.д. Этопростой пример, но на данноппростомпримере видно, что у нас простор для работы над проверкойкоданамногошире. Используяxpathмы можем прогуливаться по лексическому дереву и проверять код по определенным правилам.
  25. Вот пример кода, поиска загрузки коллекций без ограничения размера коллекции.Как видим, одной строкой находим потенциальную проблему в коде.
  26. Для сравнения, токен против лексического дерева, как можно найти потенциальную проблему загрузки моделей в цыкле.Время выполнения.Вам уже решатьчтоиспользовать
  27. Вне поля зрения у нас будетоставиться, то что не автоматезировалосьХмлфайлыДб схемаДжаваскрипт и цссАвтоматизация находит только подозрения!20-25 % подозрений – это круто
  28. В дополнение к Програмномуграфу хотел добавить, что вне нашего внимания остались такие интерестные моменты эволюции как:Семантические связиЦиклические вызовыЧестно говоря у нас не хватило ни сил ни времени с этим разбираться, хотя и накопали интересную тулзуLoco.Поэтомуоставшуюсячастьмыдоверилипроффесионалам в этомделеNew Relic. О опытеработы с которымповедаетмойколлегаКиррил Морозов.
  29. Когда что-то случалось все ведут себя как всегда, воют, как слепые котята.А еще все любят котят, потому хватит нянчиться с котятами, и перейдем к делу.
  30. Вот как-то так выглядит мониторинг важной системы,Особенно если простой системы недоприносит несколько сотен тысяч рублей или пары тысяч долларов или евро.Всем, хочется всем увидеть как оно на самом деле.Сразу оговорюсь, брал данные у реального клиента, клиент крупный, может и в суд подать.
  31. За частую есть несколько факторов, которые сигнализируют о потенцчиальной проблеме.CPU – первыйТраффик – второйПамят – третийВремя ответа – сам надежный -
  32. По какой-то причине
  33. Вот, время ответа – самая надежная метрика для потенциальной проблемы.Сдесь очевидный всплеск до 2х секундЗагрузка процессора близка к
  34. Можно заглянуть чуть глубже, и узнать больше о том, что случилось.
  35. Какая прелесть, вот и долгожданная фича клиента
  36. Вот как-то так выглядит мониторинг важной системы,Особенно если простой системы недоприносит несколько сотен тысяч рублей или пары тысяч долларов или евро.
  37. Будем анализировать происходящее, Видим что контроллер долго отрабатывает.Все ясно, кому-то пора бить по рукам.
  38. Вот он, кошмар для владельца магазина, это сказочный контроллер выполняет очень много интересных задач.В частности полторы тысячи запросов в к базе данных. Теперь можно вспомнить все, о чем говорил Александр.После того, как клиент получил информацию о состоянии своего магазина, он пошел к команде чудо-разработчиков, С тех по мы его не видели.
  39. Апдекс Индекс поизводительности.
  40. Апдекс Индекс поизводительности.
  41. Мы будем выбирать с наименьшим апдексом.
  42. Мы будем выбирать с наименьшим апдексом.
  43. Мы будем выбирать с наименьшим апдексом.
  44. Мы будем выбирать с наименьшим апдексом.
  45. О, Вот он, пойман на гарячем!Видать вмешались в этап сборки страницы и много времени потратили на какую-то мелкую операцию.Кому такое знакомо?
  46. Идем дальше, и видим, очередной косяк, в цикле идем по продуктам, и вызываем что-то свое. На этом стоило бы зако
  47. Ну вот как бы все, осталось только выписать рецепт на будущее, как можно применить все выше сказанное на нашей Мадженте.Что бы наше приложение было всегда в тонусе, закалялось и никогда не требовало обращения к специалистам, для выявления проблем.
  48. Проверка кода как часть методологии ведения проектовАвтоматические проверки кода сбилдами(CI)Пишем свои сниферыПользуемся Системами Мониторигна (Ньюрелик)Делаем диагностику Мадженты самостоятельно и не ждем пока она сама себя вылечит
  49. Скучные вещи не всегда такие скучныеНе все можно автоматизироватьНе ждите пока проблемы начнут проявляться, проверяйте приложение чаще