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
Запах
Magento - Каранда Александр, Кирилл Морозов
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
Запах
Проблема
Решение
Тренды
• Популярные проблемы
• Проблемы по модулям
• Классификация проблем
Диагностика
Реальный клиент Х
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

ODP
Valgrind
PPTX
Оптимизация трассирования с использованием Expression templates
PPTX
Тестируемая RxJava
PPT
поиск узких мест в производительности My sql ботанический определитель. г. ру...
PPTX
«Introduction to malware reverse engineering» by Sergey Kharyuk aka ximerus
PDF
JavaScript Базовый. Занятие 02.
PDF
Rambler.iOS #6: Pagination Demystified
PPTX
Прикладная теория Application Security
Valgrind
Оптимизация трассирования с использованием Expression templates
Тестируемая RxJava
поиск узких мест в производительности My sql ботанический определитель. г. ру...
«Introduction to malware reverse engineering» by Sergey Kharyuk aka ximerus
JavaScript Базовый. Занятие 02.
Rambler.iOS #6: Pagination Demystified
Прикладная теория Application Security

Viewers also liked (20)

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

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

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

More from meet_magento (20)

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

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

Editor's Notes

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