SlideShare a Scribd company logo
1 of 119
Download to read offline
How to
How to
optimize
optimize
background
background
processes
processes
when Sylius meets Blackfire
when Sylius meets Blackfire
Introduction
Introduction
QUIZ
QUIZ
Feature overview
Feature overview
Sylius pricing
Sylius pricing
model
model
Sylius pricing model
Sylius pricing model
Product
Product
May have from 1 to N variants
Sylius pricing model
Sylius pricing model
Product
Product
May have from 1 to N variants
Product variants
Product variants
Always have Y Channel Pricings,
Where Y equals amount of Channels in shop
Sylius pricing model
Sylius pricing model
Product
Product
May have from 1 to N variants
Product variants
Product variants
Always have Y Channel Pricings,
Where Y equals amount of Channels in shop
Channel Pricing
Channel Pricing
Contains end pricing for customer
Discounting rules set
Discounting rules set
Main
Main
configuration
configuration
Processing
Processing
scope
scope
Channel
Channel
Pricing
Pricing
Main
Main
configuration
configuration
Dates
Channels
Enabled
Priority
Exclusiveness
Processing
Processing
scope
scope
Channel
Channel
Pricing
Pricing
Main
Main
configuration
configuration
Dates
Channels
Enabled
Priority
Exclusiveness
Processing
Processing
scope
scope
Variants
Products
Taxonomy
Channel
Channel
Pricing
Pricing
Main
Main
configuration
configuration
Dates
Channels
Enabled
Priority
Exclusiveness
Processing
Processing
scope
scope
Variants
Products
Taxonomy
Channel
Channel
Pricing
Pricing
Fixed discount
Percentage
discount
Tons of
Tons of
configuration
configuration
Dataset size
Dataset size
1 - 10
1 - 10
Minimal processable scope
10k - 100k
10k - 100k
Typical Sylius project
Typical Sylius project
Over 1kk
Over 1kk
Maximal processable scope
Performance test
Performance test
setup
setup
Dataset
Dataset
7000 Product Variants
Dataset
Dataset
7000 Product Variants
3 Catalog Promotions covering all of
products at least once
Dataset
Dataset
7000 Product Variants
3 Catalog Promotions covering all of
products at least once
2 Channels
Execution on single
Execution on single
catalog promotion update
catalog promotion update
Environment
Environment
Production environment
Environment
Environment
Production environment
No debug option
Environment
Environment
Production environment
No debug option
Removal of cache and cache warmup
before each execution
Let's improve
Let's improve
First round - bug
First round - bug
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
public function assignLocale(
TranslatableInterface $translatableEntity
): void {
$fallbackLocale = $this
->translationLocaleProvider
->getDefaultLocaleCode()
;
if ($this->commandBasedChecker->isExecutedFromCLI()) {
$translatableEntity->setCurrentLocale($fallbackLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
return;
}
try {
$currentLocale = $this->localeContext->getLocaleCode();
} catch (LocaleNotFoundException) {
$currentLocale = $fallbackLocale;
}
$translatableEntity->setCurrentLocale($currentLocale);
$translatableEntity->setFallbackLocale($fallbackLocale);
}
QUIZ
QUIZ
Conclusion
Conclusion
Correctly placed "if"
Correctly placed "if" may
may
boost your app
boost your app
significantly
significantly
Second round -
Second round -
N+1
N+1
Lazy loading
Lazy loading
public function findByCodes(
array $codes
): array {
return $this->createQueryBuilder('o')
->andWhere('o.code IN (:codes)')
->setParameter('codes', $codes)
->getQuery()
->getResult()
;
}
public function findByCodes(array $codes): array
{
return $this->createQueryBuilder('o')
->addSelect('product')
->addSelect('channelPricings')
->addSelect('appliedPromotions')
->addSelect('productTaxon')
->addSelect('taxon')
->leftJoin('o.channelPricings', 'channelPricings')
->leftJoin('channelPricings.appliedPromotions',
'appliedPromotions')
->leftJoin('o.product', 'product')
->leftJoin('product.productTaxons', 'productTaxon')
->leftJoin('productTaxon.taxon', 'taxon')
->andWhere('o.code IN (:codes)')
->setParameter('codes', $codes)
->getQuery()
->getResult()
;
}
public function findByCodes(array $codes): array
{
return $this->createQueryBuilder('o')
->addSelect('product')
->addSelect('channelPricings')
->addSelect('appliedPromotions')
->addSelect('productTaxon')
->addSelect('taxon')
->leftJoin('o.channelPricings', 'channelPricings')
->leftJoin('channelPricings.appliedPromotions',
'appliedPromotions')
->leftJoin('o.product', 'product')
->leftJoin('product.productTaxons', 'productTaxon')
->leftJoin('productTaxon.taxon', 'taxon')
->andWhere('o.code IN (:codes)')
->setParameter('codes', $codes)
->getQuery()
->getResult()
;
}
Quiz
Quiz
Conclusion
Conclusion
Lazy loading
Lazy loading boosts your
boosts your
app
app
but
but
can be your enemy
can be your enemy
Third round - EM Clear
Third round - EM Clear
Quiz
Quiz
Conclusion
Conclusion
Clearing entity manager
Clearing entity manager
may
may boost your batch
boost your batch
processing
processing
Summary
Summary
Quiz
Quiz
Final round - native query
Final round - native query
private function clearChannelPricing(
ChannelPricingInterface $channelPricing
): void {
if ($channelPricing->getAppliedPromotions()->isEmpty()) {
return;
}
if ($channelPricing->getOriginalPrice() !== null) {
$channelPricing->setPrice($channelPricing->getOriginalPrice());
}
$channelPricing->clearAppliedPromotions();
}
private function clearChannelPricing(
ChannelPricingInterface $channelPricing
): void {
if ($channelPricing->getAppliedPromotions()->isEmpty()) {
return;
}
if ($channelPricing->getOriginalPrice() !== null) {
$channelPricing->setPrice($channelPricing->getOriginalPrice());
}
$channelPricing->clearAppliedPromotions();
}
private function clearChannelPricing(
ChannelPricingInterface $channelPricing
): void {
if ($channelPricing->getAppliedPromotions()->isEmpty()) {
return;
}
if ($channelPricing->getOriginalPrice() !== null) {
$channelPricing->setPrice($channelPricing->getOriginalPrice());
}
$channelPricing->clearAppliedPromotions();
}
private function clearChannelPricing(
ChannelPricingInterface $channelPricing
): void {
if ($channelPricing->getAppliedPromotions()->isEmpty()) {
return;
}
if ($channelPricing->getOriginalPrice() !== null) {
$channelPricing->setPrice($channelPricing->getOriginalPrice());
}
$channelPricing->clearAppliedPromotions();
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
$codes = array_column($updateVariants->variantsCodes, 'code');
$connection = $this->entityManager->getConnection();
$connection->executeQuery(
'DELETE scpcp FROM sylius_channel_pricing_catalog_promotions scpcp
JOIN sylius_channel_pricing scp ON scpcp.channel_pricing_id = scp.id
JOIN sylius_product_variant spv ON scp.product_variant_id = spv.id
WHERE spv.code IN (?)',
[$codes],
[Connection::PARAM_STR_ARRAY]
);
foreach ($variants as $variant) {
// Apply Catalog promotion
}
Quiz
Quiz
Conclusion
Conclusion
Always
Always have tests
have tests
It is hard to beat libraries
It is hard to beat libraries
properly
properly
Takeaways
Takeaways
Check the highest class in your call-graph
Check the highest class in your call-graph
And look for bugs
Load all data required to perform operation
Load all data required to perform operation
But not more
Remember to clear Entity Manager when batch processing
Remember to clear Entity Manager when batch processing
Unless you are executing asynchronously messages with Symfony
Messenger
Pure DQL may bring benefits
Pure DQL may bring benefits
But is hard to do it properly for complicated objects or mix it with ORM
Amount of queries matter
Amount of queries matter
Especially in managed databases
Thank you!
Thank you!

More Related Content

Similar to How to optimize background processes.pdf

Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using CodeceptionJeroen van Dijk
 
How to Handle NoSQL with a Relational Database
How to Handle NoSQL with a Relational DatabaseHow to Handle NoSQL with a Relational Database
How to Handle NoSQL with a Relational DatabaseDATAVERSITY
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionAdam Trachtenberg
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasminePaulo Ragonha
 
Expense Management PowerPoint Presentation Slides
Expense Management PowerPoint Presentation SlidesExpense Management PowerPoint Presentation Slides
Expense Management PowerPoint Presentation SlidesSlideTeam
 
Towards Functional Programming through Hexagonal Architecture
Towards Functional Programming through Hexagonal ArchitectureTowards Functional Programming through Hexagonal Architecture
Towards Functional Programming through Hexagonal ArchitectureCodelyTV
 
TechShift: There’s light beyond LAMP
TechShift: There’s light beyond LAMPTechShift: There’s light beyond LAMP
TechShift: There’s light beyond LAMPStephen Tallamy
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTMichael Galpin
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentMark Niebergall
 
Portfolio For Charles Tontz
Portfolio For Charles TontzPortfolio For Charles Tontz
Portfolio For Charles Tontzctontz
 
Optimizing Magento by Preloading Data
Optimizing Magento by Preloading DataOptimizing Magento by Preloading Data
Optimizing Magento by Preloading DataIvan Chepurnyi
 
Assumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfAssumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfErin Shellman
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
Zendcon 2007 Api Design
Zendcon 2007 Api DesignZendcon 2007 Api Design
Zendcon 2007 Api Designunodelostrece
 
Amazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersAmazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersJeremy Lindblom
 

Similar to How to optimize background processes.pdf (20)

Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
 
How to Handle NoSQL with a Relational Database
How to Handle NoSQL with a Relational DatabaseHow to Handle NoSQL with a Relational Database
How to Handle NoSQL with a Relational Database
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Expense Management PowerPoint Presentation Slides
Expense Management PowerPoint Presentation SlidesExpense Management PowerPoint Presentation Slides
Expense Management PowerPoint Presentation Slides
 
Towards Functional Programming through Hexagonal Architecture
Towards Functional Programming through Hexagonal ArchitectureTowards Functional Programming through Hexagonal Architecture
Towards Functional Programming through Hexagonal Architecture
 
99% is not enough
99% is not enough99% is not enough
99% is not enough
 
TechShift: There’s light beyond LAMP
TechShift: There’s light beyond LAMPTechShift: There’s light beyond LAMP
TechShift: There’s light beyond LAMP
 
AngularJS
AngularJSAngularJS
AngularJS
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWT
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
 
Portfolio For Charles Tontz
Portfolio For Charles TontzPortfolio For Charles Tontz
Portfolio For Charles Tontz
 
Optimizing Magento by Preloading Data
Optimizing Magento by Preloading DataOptimizing Magento by Preloading Data
Optimizing Magento by Preloading Data
 
Cassandra - lesson learned
Cassandra  - lesson learnedCassandra  - lesson learned
Cassandra - lesson learned
 
Assumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourselfAssumptions: Check yo'self before you wreck yourself
Assumptions: Check yo'self before you wreck yourself
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Zendcon 2007 Api Design
Zendcon 2007 Api DesignZendcon 2007 Api Design
Zendcon 2007 Api Design
 
Amazon Web Services for PHP Developers
Amazon Web Services for PHP DevelopersAmazon Web Services for PHP Developers
Amazon Web Services for PHP Developers
 
Inventory management
Inventory management Inventory management
Inventory management
 
Operation management
Operation managementOperation management
Operation management
 

More from Łukasz Chruściel

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API ProjectsŁukasz Chruściel
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionŁukasz Chruściel
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfŁukasz Chruściel
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsŁukasz Chruściel
 
SymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdfSymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdfŁukasz Chruściel
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Łukasz Chruściel
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdfŁukasz Chruściel
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdfŁukasz Chruściel
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaŁukasz Chruściel
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius APIŁukasz Chruściel
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfŁukasz Chruściel
 
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsSymfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsŁukasz Chruściel
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationŁukasz Chruściel
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machineŁukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machineŁukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machineŁukasz Chruściel
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source projectŁukasz Chruściel
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectŁukasz Chruściel
 

More from Łukasz Chruściel (20)

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdf
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API Projects
 
SymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdfSymfonyLive Online 2023 - Is SOLID dead? .pdf
SymfonyLive Online 2023 - Is SOLID dead? .pdf
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius API
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdf
 
Symfony World - Symfony components and design patterns
Symfony World - Symfony components and design patternsSymfony World - Symfony components and design patterns
Symfony World - Symfony components and design patterns
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source project
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius project
 
Why do I love and hate php?
Why do I love and hate php?Why do I love and hate php?
Why do I love and hate php?
 

Recently uploaded

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 

Recently uploaded (20)

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 

How to optimize background processes.pdf