Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
Виктория Сулейманова поделится опытом тестирования RxJava. За последний год реактивное программирование прочно обосновалось в мире Android-разработки, однако у всех, кто начинает его использовать, рано или поздно возникает вопрос: как покрыть тестами этот код? И у нас есть на него ответ.
Ссылка на видеозапись: https://youtu.be/7W5NwpE5WpQ
Егор Толстой рассказывает о том, как он справился с проблемами постраничной загрузки данных в мобильном клиенте для одного абстрактного известного блог-сервиса.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Слайды вебинара http://www.ptsecurity.ru/lab/webinars/#42235 :
"Каковы формальные признаки уязвимого и защищенного кода? Что такое уязвимость? Как разглядеть в коде уязвимость для атак, принадлежащих неизвестному классу? Чем уязвимости бизнес-логики отличаются от «традиционных» уязвимостей? Мы ответим на эти вопросы на вебинаре, посвященном теоретическому минимуму предметной области Application Security и практическому применению этих знаний в задачах анализа защищенности и при разработке защищенного кода"
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
Виктория Сулейманова поделится опытом тестирования RxJava. За последний год реактивное программирование прочно обосновалось в мире Android-разработки, однако у всех, кто начинает его использовать, рано или поздно возникает вопрос: как покрыть тестами этот код? И у нас есть на него ответ.
Ссылка на видеозапись: https://youtu.be/7W5NwpE5WpQ
Егор Толстой рассказывает о том, как он справился с проблемами постраничной загрузки данных в мобильном клиенте для одного абстрактного известного блог-сервиса.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Слайды вебинара http://www.ptsecurity.ru/lab/webinars/#42235 :
"Каковы формальные признаки уязвимого и защищенного кода? Что такое уязвимость? Как разглядеть в коде уязвимость для атак, принадлежащих неизвестному классу? Чем уязвимости бизнес-логики отличаются от «традиционных» уязвимостей? Мы ответим на эти вопросы на вебинаре, посвященном теоретическому минимуму предметной области Application Security и практическому применению этих знаний в задачах анализа защищенности и при разработке защищенного кода"
The document discusses strategies for Magento developers to transition from project-based work to product-based work. It suggests starting with a single product strategy to gain experience before expanding to multiple products. The strategies aim to help newcomers to the Magento ecosystem compete with veterans and succeed in 2013 and beyond. Contact information is provided for the author's company.
This document discusses the progressive JPEG method for developing software projects. It breaks projects down into a series of sprints, beginning with designing the GUI and frontend before integrating it with the backend. Each sprint includes adding features, validators, tests, and bug fixes to gradually build out the full project functionality over multiple iterations. The progressive JPEG method aims to deliver working software quickly while maintaining high quality and organization through its structured process.
Applying multi-processing techniques in Magento for upgrade optimizationKirill Morozov
This document discusses optimizing the Magento upgrade process by applying multi-processing techniques. The standard Magento upgrade from 1.10 to 1.11 can take a disproportionate amount of time, causing system downtime. The author developed a prototype that breaks the upgrade into parallel parts that are executed by multiple child processes simultaneously. Testing on a production store reduced the upgrade time from 34 hours to 4 hours for a database with 2.5 million orders.
Start Your Search Engines: Optimizing Solr to Improve ResultsRyan Street
The document discusses SOLR and how it can optimize search for organizations. It states that 65% of IT organizations were able to reduce the costs of developing and deploying search applications by 50% or more by using SOLR. It also notes that 43% of organizations index or update over 1,000,001 documents per week with SOLR. One company was able to decrease risk by allowing over 6 million items and 50 million user profiles to be searched beyond what was possible with MySQL.
Electrostar Electronics is a leading electronics manufacturing company located in Noida, India. The company produces a variety of electronics products including CFL lights, mobile chargers, inverters, adapters, ceiling fans, and UPS systems. Electrostar aims to provide high quality yet affordable products and superior customer service. It prides itself on being the top manufacturer in the Noida region and producing reliable electronics using talented engineers.
Danny Phantom is a ghost boy with grey hair and green eyes who lives in Amity Park in the U.S. He catches ghosts and fights villains while keeping his identity as a high school student secret, saying "Going Ghost" when transforming. As a student, others think he is a loser and he believes he cannot defeat his evil self.
This document provides an overview of key concepts in geography, including the five themes of geography: location, place, human-environment interaction, movement, and regions. It discusses geography as the study of the Earth's surface and the relationship between people and their environment. As an example, it summarizes the settlement of Kenosha, Wisconsin, explaining that pioneers found rich farmland and a port/harbor for fishing and trading along the Pike River and Lake Michigan.
Electrostar Electronics is a leading electronics manufacturing company located in Noida, India. It manufactures a wide range of electronic products including CFLs, inverters, UPS systems, mobile chargers, adapters, and more. The company prides itself on producing high quality electronics at affordable prices using talented engineers. It also offers 24/7 customer support services to its customers.
Electrostar Electronics is a leading manufacturing company located in Noida, India that produces a variety of electrical devices and electronic products including CFL lights, CFL PCBs, inverters, mobile chargers, UPS systems, adapters, and ceiling fans. The company prides itself on producing high quality, dependable, and affordable products while also providing 24/7 customer service. Electrostar Electronics has emerged as one of the top manufacturing organizations in the Noida region and is well known for its stable and superb quality electronic devices.
Electrostar Electronics manufactures dependable mobile chargers in Noida, Delhi to meet the high demand for charging phones constantly. Reliable chargers provide many benefits like allowing users to charge their phones anywhere and at any time, staying connected through apps. Electrostar focuses on producing quality chargers and travel chargers using advanced technology to ensure a complete charging cycle. Their contact information is provided for any queries.
The document discusses strategies for Magento developers to transition from project-based work to product-based work. It suggests starting with a single product strategy to gain experience before expanding to multiple products. The strategies aim to help newcomers to the Magento ecosystem compete with veterans and succeed in 2013 and beyond. Contact information is provided for the author's company.
This document discusses the progressive JPEG method for developing software projects. It breaks projects down into a series of sprints, beginning with designing the GUI and frontend before integrating it with the backend. Each sprint includes adding features, validators, tests, and bug fixes to gradually build out the full project functionality over multiple iterations. The progressive JPEG method aims to deliver working software quickly while maintaining high quality and organization through its structured process.
Applying multi-processing techniques in Magento for upgrade optimizationKirill Morozov
This document discusses optimizing the Magento upgrade process by applying multi-processing techniques. The standard Magento upgrade from 1.10 to 1.11 can take a disproportionate amount of time, causing system downtime. The author developed a prototype that breaks the upgrade into parallel parts that are executed by multiple child processes simultaneously. Testing on a production store reduced the upgrade time from 34 hours to 4 hours for a database with 2.5 million orders.
Start Your Search Engines: Optimizing Solr to Improve ResultsRyan Street
The document discusses SOLR and how it can optimize search for organizations. It states that 65% of IT organizations were able to reduce the costs of developing and deploying search applications by 50% or more by using SOLR. It also notes that 43% of organizations index or update over 1,000,001 documents per week with SOLR. One company was able to decrease risk by allowing over 6 million items and 50 million user profiles to be searched beyond what was possible with MySQL.
Electrostar Electronics is a leading electronics manufacturing company located in Noida, India. The company produces a variety of electronics products including CFL lights, mobile chargers, inverters, adapters, ceiling fans, and UPS systems. Electrostar aims to provide high quality yet affordable products and superior customer service. It prides itself on being the top manufacturer in the Noida region and producing reliable electronics using talented engineers.
Danny Phantom is a ghost boy with grey hair and green eyes who lives in Amity Park in the U.S. He catches ghosts and fights villains while keeping his identity as a high school student secret, saying "Going Ghost" when transforming. As a student, others think he is a loser and he believes he cannot defeat his evil self.
This document provides an overview of key concepts in geography, including the five themes of geography: location, place, human-environment interaction, movement, and regions. It discusses geography as the study of the Earth's surface and the relationship between people and their environment. As an example, it summarizes the settlement of Kenosha, Wisconsin, explaining that pioneers found rich farmland and a port/harbor for fishing and trading along the Pike River and Lake Michigan.
Electrostar Electronics is a leading electronics manufacturing company located in Noida, India. It manufactures a wide range of electronic products including CFLs, inverters, UPS systems, mobile chargers, adapters, and more. The company prides itself on producing high quality electronics at affordable prices using talented engineers. It also offers 24/7 customer support services to its customers.
Electrostar Electronics is a leading manufacturing company located in Noida, India that produces a variety of electrical devices and electronic products including CFL lights, CFL PCBs, inverters, mobile chargers, UPS systems, adapters, and ceiling fans. The company prides itself on producing high quality, dependable, and affordable products while also providing 24/7 customer service. Electrostar Electronics has emerged as one of the top manufacturing organizations in the Noida region and is well known for its stable and superb quality electronic devices.
Electrostar Electronics manufactures dependable mobile chargers in Noida, Delhi to meet the high demand for charging phones constantly. Reliable chargers provide many benefits like allowing users to charge their phones anywhere and at any time, staying connected through apps. Electrostar focuses on producing quality chargers and travel chargers using advanced technology to ensure a complete charging cycle. Their contact information is provided for any queries.
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
Рассказ о истории и использовании в реальной жизни инструментов анализа кода на основе JavaChecker и TermWare
Сопустствующий текст: http://datacenter.gradsoft.ua/files/articles/OSDN2011/
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
Есть ошибки, которые легко прячутся от программистов на обзорах кода. Чаще всего они связаны с опечатками или недостаточным знанием тонких нюансах языка/библиотеки. Давайте посмотрим интересные примеры таких ошибок и как их можно выявить с помощью статического анализа. При этом анализаторы не конкурируют с обзорами кода или, например, юнит-тестами. Они отлично дополняют другие методологии борьбы с ошибками.
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Ivan Tsyganov
Я работаю над продуктом Max Patrol компании Positive Technologies. Кодовая база нашего проекта насчитывает более 50 тысяч строк кода. Без хороших тестов работа с таким объемом кода превратилась бы в кошмар. Многие программисты стремятся к 100% покрытию кода тестами и считают, что это избавит их от множества проблем. Я расскажу о том, с какими трудностями мы столкнулись и почему заветные 100% ничего не говорят о покрытии тестируемого кода. Я приведу примеры кода и тестов, которые показывают 100% покрытие и покажу почему это не так. Я рассмотрю как работает библиотека coverage.py и объясню почему не стоит слепо верить результатам ее работы. Так же я поделюсь идеей получения честной метрики покрытия кода тестами и представлю прототип библиотеки, в которую воплотилась эта идея.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...QAFest
Ни для кого не секрет, что при разработке проекта мало кто уделяет достаточное внимание проверке безопасности приложения. Даже когда и задумываются об этом, то очень часто упускают из внимания уязвимости железа и ОС, которое коммуницирует с вашим приложением. В своем докладе я расскажу и покажу на что следует обращать внимание при тестировании безопасности вашего продукта. А так же насколько важно применять тестирование безопасности. Ну, и как обычно, свои доклады я сопровождаю не только теорией, но и практическими примерами. На этот раз специальными гостями будут:
- Nmap
- Metasploit
- Ettercap
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
Анализ кода — один из эффективных подходов к выявлению дефектов на этапе разработки программного обеспечения. Это позволяет избежать тривиальных и не очень ошибок, которые могут приводить к появлению уязвимостей. Существует ряд подходов, применяемых в анализаторах, на основании которых производится анализ, позволяющий снижать риски. Однако возникает ряд предубеждений, ведь не всегда предупреждение анализатора является реальным дефектом, тем более, что не всякий дефект является уязвимостью.
Игорь Бондаренко (Neklo) - Организация процесса разработки модулей для Magentomeet_magento
Igor Bondarenko discusses best practices for organizing the development process of Magento modules. He recommends choosing ideas based on business analysis, using specialized development tools, and forming teams of narrowly skilled professionals. Bondarenko also stresses the importance of testing, including testing compatibility with other extensions and automation using tools like Selenium IDE. The key to success is performing thorough business analysis, using high-quality tools, skilled teams, and comprehensive testing.
Александр Гальцов (aheadWorks) - Повышение эффективности сотрудничества в рам...meet_magento
The document discusses the idea of creating a non-profit, inclusive, and transparent Association of Magento extension developers. It notes issues with some extensions copying others or including malicious code, which hurts merchants, system integrators, and the Magento platform. The proposed association could promote best practices, fair competition, compatibility between extensions, innovation, and make life easier for merchants. By increasing the value of Magento, it could help individual businesses grow.
Magento 2 is an e-commerce platform released by Magento as an improved version of Magento 1. The document outlines the timeline for Magento 2 releases, including developer betas in late 2014, releases in 2015, and general merchant availability in late 2015. It also lists six main ways Magento 2 aims to improve upon Magento 1: improved administration, performance, integration, customization, upgrades, and resources for developers.
Кирилл Голуб (aheadWorks) - Бизнес на Magento в 2015meet_magento
This document discusses trends in the Magento ecommerce platform market in 2015 and threats facing Magento businesses. It notes that Magento's popularity has grown significantly since 2003, appearing in the top 10,000, 100,000 and 1,000,000 websites for ecommerce and enterprise sites. It also discusses consolidation in the Magento extension market and the rise of single product vendors. New threats mentioned include the growth of less specialized competitors and changes to European VAT policy for digital services.
Елена Ткачева (Magento) - Особенности Magento2meet_magento
The document discusses the goals and key changes in Magento 2. Magento 2 aims to have a modern tech stack for improved performance and scalability. It also focuses on streamlining customizations, simplifying integrations, and making installations and upgrades easier. On the frontend, Magento 2 introduces a responsive theme, UI library, and multilevel theme inheritance for a better customer experience across devices. It also improves performance which can increase conversions and satisfaction.
Meet Magento is an ecommerce conference that started in 2008 and has had over 10,000 attendees from 26 countries. Ecommerce is growing rapidly around the world but the industry is still in its early days and everyone is reinventing solutions. There is a need for localized Magento editions and an ecommerce standard for small and medium businesses that is reliable, focused on the most important functions, and has no gimmicks or fancy features.
This document discusses the growth of mobile commerce and opportunities in the ecommerce industry. Some key points:
- Mobile has greatly impacted shopping behaviors, with over half of shoppers using phones while shopping and tablets driving twice the average purchase size as PCs on eBay.
- The rise of mobile is bridging online and offline commerce, growing the total "commerce" opportunity to an estimated $10 trillion, up from $500 billion in offline retail in 2010.
- Ecommerce platforms face challenges in attracting customers, converting sales, and retaining shoppers in this rapidly transforming industry.
- Magento has seen strong growth, serving over 200,000 merchants and $26 billion in sales in 2013, and is projected
15. Первые симптомы
• Спагетти код
• Копи-паста код
• Хардкорд
• Игнорирование код стилей (Zend)
• Отсутствие PHP-DOC-oв
• Использование голобалсов
• Закоментированые куски кода
• Методы по 200 строк
• Классы по 100500 строк
REFACTO
RING
19. //@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
Запах
Проблема
Решение
31. Программный граф
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
] Загрузка коллекций без ограниче
32. Сравнение подходов
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
Загрузка моделей в цикле
33. что не нужно забывать
Xml files (configuration & layout updates)
DB Schema (indexes, non-optimal field types)
Javascript, CSS & HTML
Вне поля зрения
Автоматизация находит только подозрения
20-25 % подозрений – это круто
34. Программный граф
1. Файловая Система
2. PHP Токенизация (TokenReflection)
3. PHP Лексическое Дерево (PHP_Parser)
4. Семантические связи
5. Циклические вызовы
54. Рецепт
• Проверка кода как часть методологии ведения
проектов
• Автоматические проверки кода с билдами (CI)
• Расширяем базу для проверки(свои сниферы)
• Пользуемся Системами Мониторинга (Ньюрелик)
• Систематическая проверка
55. Просто так
• Скучные вещи не всегда такие скучные
• Не все можно автоматизировать
• Не ждите пока проблемы начнут проявляться, проверяйте
приложение чаще
56. Полезности
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
Я являюсь тимлидом в отделе Мадженто: експерт консалтинг груп. Мы предоставляем клиентам разные виды услуг, архитектурные ришения, мониторинг систем, продженктмепеджмент и т.д. Занимаемся тем же чем и партнеры, помагаем нашим клиентам быть успешными на базе Мадженто.Нереальные вещи – делаем реальными
Проверкасостояния систем перед запуском. Каккода так и инфраструктуры, запусклоадтестов и автоматическихрегрешин.Проверкаготовностикода с точки зрениябизнесанализа, когдаклиент не совсемуверн, что код реализуетбизнеслогику. Такой себе аудит решения, особеннополезнокогдадаешь в разработкумаленькойаутсорскоманде в 300 чел, и оничто-токолбасят на протяжениигода и в когцегоданужноещетщательнообработатьнапильником, что б с паравозаполучилсясамолет.Анализкода на совместимость с новымивресиями. Все мыработаем с пхп, языксосплошнойдинамикой в разработке и гибкостью и можно так надевелопить, чтоиз 50 кастомныхмодулей, 48 не будутсовместимы с новойверсиейпродукта, нонужно все таки обновить и узнатьсколькобудетстоитьобновлени. Тогдапроводиманализ.Ну и самоеинтерестное, визитмадженто к доктору, береманализы, проверяминфраструктуру, проверям код на потенциальныепроблеммы.- код, приложение, система.Все вышеперечисленноевыможете вводить как практику на проекте или же предоставлять вашим клиентамкакдополнительныйсервис. Бизнес идея.
На нашейпрактикемывыявили 5 основныхзаболеваний, которыенаиболеевсегораспространены в Мадженте и создаютосновную погоду 84% от общего числа проблем.Можеткто-тодогадался о типичных проблемах?
Может кому знакомо, загрузка моделей в цикле.37 процентов проблем в Мадженте связаны именно с этим кодом. Прям магия, 37 процентов и 37 температура воспалительного процесса.В чем же суть проблемы:Каждый лоад модели это 100% запрос в базу данныхТ.к. продукт у нас ЕАВ, то запросов у нас будет несколько.Так на лоад продукта будет 5-10 запросов. Зависит от многих факторов, катсомизаций. Если в коллекции у нас 20 продуктов, то как результат 200 лишних запросов. А вдруг у нас в коде еще пару таких блоков кода?К сати, из практики, рекордсмен был один клиент, у которого было 3000 запросов на загрузку страницы. При том, что без кеша в мадженте 45 запросов на загрузку страницы, что тоже много.Правильным решением будет подготовить данные, подготовить коллекцию и дальше уже просто использовать подготовленную информацию.Вместо повторной загрузки модели.
Загрузка одной и той же сущности больше одного раза. 21% проблем Мадженты связаны именно с этим Каждый раз мы создаем отдельный экземпляр класса в памяти, каждый раз мы посылаем запрос в БД, только для того, что б получить значение одного атрибута сущности. Да Маджента не идеальна, но не будем усугублять не идеальность.Решением будет загрузка модели и далее уже используем загруженную модель.Кстати, про м2, в м2 есть будет реализован новый дата лаер, который сделает процесс инстанционирования более интеллектуальным. Дата лаер будет буферизировать загруженные модели в себе.И случае повторного запроса то й же сущности в рамках одной пхпсесии будет отдаваться уже загруженный инстанс. В принципе все логично, пхп все равно не освобождает память до конца сессии, и мы уже его раз загрузили так давайте будем держать ссылку на него.
Неоптимальное использование возможностей коллекции, загрузка и обработка больше данных чем нам требуется.Может кто-то сталкивался. Примером являетсяфичеред блок.Подобные проблемы занимают 13% от всех проблем связанных с кодом.Нужно 5 элементовПо физике процессов у нас тут несколько проблем: БД обрабатывает кучу данныхБД готовит результат на аутпутМы гоняем по сети кучу пакетов данных, забивая каналывыгружаем всю коллекцию в память, все полтора миллиона продуктовдальше берем только первые два.Правильное решение, используем возможности Мадженто коллекции, добавляем лимит.
Неоптимальная логика. Пересчет данных каждый раз как мы обращаемся к методу.8% от всех проблем связанных с кодом.Проблема не всегдаявная с первоговзгляда. Реализовав один раз метод, мыегоиспользуемнеоднократно и каждый раз данныевнутри метода пересчитываются.Решением, лечением, будетиспользование так званого, логическогокеширования. На времявыполненияпхпсессиисохраняем результат в протектедпеременнуюИспользуем уже загруженыеданныеилиподсчитануюинформацию.
5% от всех проблем связанных с кодом.Сложно придумать пример неправильно кода. Скажу просто. Мы полностью забываем про возможности кеширования в мадженте, особенно данных которые не будут меняться часто
Ну и все остальные… Куча болезней, симптомов, признаков.ВозможностьSQL инекцийНеоптимальная обработка данныхЗагрузка огромнейших файлов в память…
Предвесникамизаболеванийявляетсясыпь.Сыпь – еще не болезнь, но уже явный симптом чего-топриближающегося.Сыпьможноопределить по определенным признакам:Спагетти кодКопи-паста кодХардкодИгнорирование код стайлов (Zend)ОтсутствиеPHP-DOC-oвИспользованиеголобалсовЗакоментированые куски кодаМетодыпо 200 строкКлассы по 100500 строкРешение – Рефакторим!
Все проблемыначинаются с запаха. Открываешь код на проверкуилианализ и уже с первоговзглядаможноопределитьопределенных запахи кода. Как правилоэтоподозрительный код. Вродебынетукориминала, еслибы не соответствующиекоментарри к коду. Особенноонивидныкогдаразработчикипытаютсяихскрыть.
Скрываюткак правило дезодорантами.Самыепопулярныедезодоратны:ФиксМеТу ДуХакИногдаможно переборщить с дезодорантами и тогдаполучается:…
Ахе ефект.Тудушки и коменты, не всегдаплохо, главноечто б онибыли в нужномместе и в нужноевремя.
Какова же истинная проблема с запахами?!Если код находиться в разработке, то вообщеникаких.Проблема только с продакшиновым кодом.Все просто, имея в арсенале код дополненыйтудушками и фиксами мы:Создаем ощущение незавершённостиМожно забыть про то, что оставалось в коде.РешениеСоздаемтикеты в джиреЗаписываем задачи в роадмапДобавляем хистори в спринт беклог
Прежде чем приступить к диагностике, хотелось бы сказать про тренды и каталог болезней.Типичные проблемы и болезни, формирут тренды. Это все тенденции Мадженто бизнеса. Но они нам так же дают возможность понять что нужно в мадженте улучшать, что б разработчики больше не делали таких же ошибок или система не позволяла делать такие ошибки.Вся информация предоставляется в Мадженто УниверситетИ в маджентокор.Хорошим примером является дата лаер, который не позволит делать некоторые типичные ошибки, которые могут повлиять на производительность.
Начнем снебольшогопримера. К нам пришолнебольшойклиент с большимиамбициями. Попросилпосмотретькоданемного.А когдапосмотрелисколько там немножко оказалось:15 неймспейсов120 модулей2000 моделей100000, корочемного.
Ну, горажданеалкоголики, хулиганы, туниядцы.Ктохочетсегодняпоработать?На ликеро-водочныйсегоднянарядовнету и врятли в ближайшиймесяцпридвидиться.ТолькоанализкодаИзвращалиськактолько могли: груповоеревью, одиночное код ревью, сверхувниз-снизу вверх. Послеревьюразборполетов, по старойдобройрусскойтрадициибудемискатьвиноватого.Еще один такой код ревью и вся команда уже готоваувольняться.
Начали думать, что бы такое сделать что бы процесс проверки системы не был таким скучным и утомительным нужно его немного разнообразить.Все мы тут творческие люди и любим всякие новшества.Что можно сделать:Автоматизхировать процесс анализа, посмотреть в сторону написания сниферов на базеПхп код сниферПхппарсерИспользовать код ревью плагин для ИДЕшки, ревуАвтогенерациядокументоphpdocxА теперь остановимся на процессе автоматизации более детально, так как вручную, кто-угодно сможет
В интернете куча статей о том какавтоматизироватьпроцесспроверки. Ноочень мало, о том, каксистематезироватьпроверку.Случайно нашли статью о представлении програмного продукта в виде набораграфов.Корневойсистемойданноййидеиявляетсяфайловая система.Которая сама по себе уже графТак мы уже можемоперировать папками, файлами, подпапкамиИ еслипойтиглубже то мыоперируем проектом, неймспейсом, модулями, моделями-файлами.Уже идетсбор метрик.
Второйуровень, втораясоставляющая, Токенизацияпиейчпикода.На данномэтапеиспользуярефлексиюмытокенезируем код.Код превращается в плоскую структуру. Литерал в данном случае минимальная составляющая языка програмирования.При этомкаждомулитералуприсваивается ряд свойств.Вот пример кода.Ну и что, скажитевы, гляда на простенький пример, в Мадженте такого нету, там все сложней.
Да, сложней.Поэтому покажу второй пример, где мы разбираем цикл.Пример токенизации цикла. Как я уже говорил, литерал собирает в себе ряд свойств.Не смотря на линейную структура, у нас есть опенер и клозер, по которым мы можем линковать внутренние элементы.
Давайте посмотрикак же имеятокенизацию, можноорганизоватьпоискмефического готу в нашемкоде.Каксамый просто пример. Через реджестерзадаемтокены с кторымибудемработать и значениекоторыхбудемпроверять. Задаемотправную точку.Встретился готу – ругаемся матом.
Поиск «Ява»конкатенации в пхпкоде, когда строку через + конкатенируют, чтоможет привести к неправильному выводуинформации для клиента.Отправная точка токент т_плюс.А дальше используяфайндПревиус, файндНекспрогуливаемся по коду и ищемпредыдущий и следующийтокен, сравниваем с типом токена, являетсяли он строкой.
Следующимуровнемявляетсяпостроениелексического дерева.На данномуровнемы уже управляемлексическимиконструкциямиязыка, в отличии от последовательныхтокенов/литералов.1. Имея на входе простенький пхп код,2. Пропускаем код через пхппарсер и получаемлексическое дерево. Самоепростоепредставление дерева - естественнохмл.По сравнению с токенами у нас етсьоченькрасивоепредставлениеметодов в виде дерева.Начиная от класов и в глубь до простыхлитералов.Мыможемоперировать и анализировать на разномуровне: У нас естьконструкцииязыка, выражения, лексемы, литералыУ выраженияестьПеременная в которуюзаписываем результатподвыражениеУ выраженияестьсвоисостоявляющие… тип: плюсИ т.д. Этопростой пример, но на данноппростомпримере видно, что у нас простор для работы над проверкойкоданамногошире. Используяxpathмы можем прогуливаться по лексическому дереву и проверять код по определенным правилам.
Вот пример кода, поиска загрузки коллекций без ограничения размера коллекции.Как видим, одной строкой находим потенциальную проблему в коде.
Для сравнения, токен против лексического дерева, как можно найти потенциальную проблему загрузки моделей в цыкле.Время выполнения.Вам уже решатьчтоиспользовать
Вне поля зрения у нас будетоставиться, то что не автоматезировалосьХмлфайлыДб схемаДжаваскрипт и цссАвтоматизация находит только подозрения!20-25 % подозрений – это круто
В дополнение к Програмномуграфу хотел добавить, что вне нашего внимания остались такие интерестные моменты эволюции как:Семантические связиЦиклические вызовыЧестно говоря у нас не хватило ни сил ни времени с этим разбираться, хотя и накопали интересную тулзуLoco.Поэтомуоставшуюсячастьмыдоверилипроффесионалам в этомделеNew Relic. О опытеработы с которымповедаетмойколлегаКиррил Морозов.
Когда что-то случалось все ведут себя как всегда, воют, как слепые котята.А еще все любят котят, потому хватит нянчиться с котятами, и перейдем к делу.
Вот как-то так выглядит мониторинг важной системы,Особенно если простой системы недоприносит несколько сотен тысяч рублей или пары тысяч долларов или евро.Всем, хочется всем увидеть как оно на самом деле.Сразу оговорюсь, брал данные у реального клиента, клиент крупный, может и в суд подать.
За частую есть несколько факторов, которые сигнализируют о потенцчиальной проблеме.CPU – первыйТраффик – второйПамят – третийВремя ответа – сам надежный -
По какой-то причине
Вот, время ответа – самая надежная метрика для потенциальной проблемы.Сдесь очевидный всплеск до 2х секундЗагрузка процессора близка к
Можно заглянуть чуть глубже, и узнать больше о том, что случилось.
Какая прелесть, вот и долгожданная фича клиента
Вот как-то так выглядит мониторинг важной системы,Особенно если простой системы недоприносит несколько сотен тысяч рублей или пары тысяч долларов или евро.
Будем анализировать происходящее, Видим что контроллер долго отрабатывает.Все ясно, кому-то пора бить по рукам.
Вот он, кошмар для владельца магазина, это сказочный контроллер выполняет очень много интересных задач.В частности полторы тысячи запросов в к базе данных. Теперь можно вспомнить все, о чем говорил Александр.После того, как клиент получил информацию о состоянии своего магазина, он пошел к команде чудо-разработчиков, С тех по мы его не видели.
Апдекс Индекс поизводительности.
Апдекс Индекс поизводительности.
Мы будем выбирать с наименьшим апдексом.
Мы будем выбирать с наименьшим апдексом.
Мы будем выбирать с наименьшим апдексом.
Мы будем выбирать с наименьшим апдексом.
О, Вот он, пойман на гарячем!Видать вмешались в этап сборки страницы и много времени потратили на какую-то мелкую операцию.Кому такое знакомо?
Идем дальше, и видим, очередной косяк, в цикле идем по продуктам, и вызываем что-то свое. На этом стоило бы зако
Ну вот как бы все, осталось только выписать рецепт на будущее, как можно применить все выше сказанное на нашей Мадженте.Что бы наше приложение было всегда в тонусе, закалялось и никогда не требовало обращения к специалистам, для выявления проблем.
Проверка кода как часть методологии ведения проектовАвтоматические проверки кода сбилдами(CI)Пишем свои сниферыПользуемся Системами Мониторигна (Ньюрелик)Делаем диагностику Мадженты самостоятельно и не ждем пока она сама себя вылечит
Скучные вещи не всегда такие скучныеНе все можно автоматизироватьНе ждите пока проблемы начнут проявляться, проверяйте приложение чаще