The aim of this report is to introduce developers to the world of Magento optimization, giving suggestions and practical examples of the best practices to apply.
This document describes how to use Oracle Service Bus and Oracle Coherence caching capabilities to improve performance of a slow web service. It shows how to create a sample web service that takes 9 seconds to respond using Java and deploy it to WebLogic Server. Then it imports the web service into an Oracle Service Bus project and enables caching for the business service. With caching enabled, subsequent requests return immediately from the cache instead of calling the backend web service. It also describes how to use an external Coherence server for out-of-process caching and monitoring the cache using the Coherence console.
Solving the C20K problem: Raising the bar in PHP Performance and Scalability
This document summarizes a presentation given by Luxi Chidambaran of Oracle on solving the C20K problem of scaling PHP applications. It discusses how the Oracle 11g Database Resident Connection Pool (DRCP) allows PHP applications to connect to the database in a way that supports tens of thousands of concurrent connections using minimal system resources. It provides an overview of DRCP and how the enhanced OCI8 PHP extension connects to leverage DRCP. Performance benchmarks are presented showing significant increases in throughput and reductions in memory usage compared to non-DRCP connections.
This code is not thread-safe because the idNum field is being incremented without synchronization. If this JSP page was accessed concurrently by multiple requests, it could generate non-unique IDs by incrementing idNum multiple times between requests. To make it thread-safe, the idNum field would need to be declared as volatile or access to it would need to be synchronized.
This document provides an overview of state management in ASP.NET, including client-based state using view state, cookies, and query strings, as well as server-based state using application state, session state, and profile properties. It discusses when each state management technique is appropriate and how to implement them in ASP.NET applications.
This document provides tips for improving the performance of ColdFusion applications, including writing code in an object-oriented style, checking for errors first and planning fast exits, limiting nested loops, knowing which ColdFusion functions to avoid, testing execution speed, using stored procedures, caching pages, queries and ORM data, and flushing caches when needed. Additional resources are provided on optimizing ColdFusion applications and performance tuning servers.
Servers - Apache Tomcat Server
Server-side scripts - Java Server Pages
The document discusses request/response protocols for client-side scripts versus server-side scripts like Java Server Pages. It explains how a server can interact with multiple concurrent clients through multi-threaded responses. HTML meta-tags can control the request/response interaction, and the file extension (.html vs .jsp) affects how the page is processed.
The document discusses various techniques for building mashups including AJAX. It defines mashups as lightweight web applications that combine content from existing sources via public APIs. It describes how AJAX uses XMLHttpRequest to asynchronously retrieve data from servers in the background without page refreshes. This improves responsiveness. JSON is also discussed as a data format used for mashups. Challenges with mashups include lack of APIs and difficulties accessing unstructured internal data.
This document discusses tuning web performance from a frontend perspective. It covers the impact of performance on user experience, development tools for optimization like Firebug and Chrome DevTools, and various techniques for website optimization including reducing requests, optimizing images, leveraging caching, minimizing JavaScript, and improving loading efficiency. The goal is to provide an overview of concepts and tools for optimizing frontend performance.
This document provides a history of AJAX and an overview of how it works. It discusses how AJAX enables asynchronous data retrieval, allowing parts of web pages to update without reloading the entire page. It then provides examples of using the XMLHttpRequest object to make requests to a server and retrieve data to dynamically update a web page. The document also covers browser support for AJAX and examples of server-side scripts to handle AJAX requests.
The document provides an overview of developing high performance web applications, focusing on optimizing front-end performance. It discusses why front-end performance matters, and provides best practices for optimizing page load time, developing responsive interfaces, and efficiently loading and executing JavaScript. The document also covers DOM scripting techniques, tools for profiling and analyzing performance, and how the performance monitoring service Gomez can be extended to better measure client-side metrics.
Endeca - Promoting Content & Configuration from Staging to Production
This diagram / mind map was created using MindJet application and covers the steps/guidelines on exactly what it takes to promote the Content & Search configuration from Staging to Production environment.
QSpiders - Installation and Brief Dose of Load Runner
The document provides information on performance testing processes and tools. It outlines 8 key steps: 1) create scripts, 2) create test scenarios, 3) execute load testing, 4) analyze results, 5) test reporting, 6) performance tuning, 7) communication planning, and 8) troubleshooting. It also discusses tools like LoadRunner, Controller, and Analysis for executing and analyzing tests. The document emphasizes having a thorough test process and communication plan to ensure performance testing is done correctly.
ASP.NET uses an event-based programming model where event handlers are executed in response to events. Events can be page events, which always occur, or control events associated with specific controls. When a browser requests an ASP.NET page, the page class is dynamically compiled and executed on the server to produce the HTML and JavaScript sent to the browser.
This document provides an introduction and tutorial for JavaServer Pages (JSP) technology. It explains how to create simple JSP applications that handle HTML forms and pass data between the client and a JavaBeans component on the server. Examples are provided to demonstrate creating a basic "Hello World" application, handling form submission and passing user-entered data to a bean using JSP tags, and writing the corresponding JavaBeans component. The tutorial also explains how to install and run the example applications using Tomcat.
The document discusses the implications of overfishing in oceans and the Chesapeake Bay. It notes that overfishing is threatening marine life by taking fish out of bodies of water faster than populations can be replenished. This can disrupt food chains and ecosystems. In oceans, overfishing endangers species like sharks that regulate other marine populations. In the Chesapeake Bay, overfishing has reduced the oyster population to 0.3% of historic levels, worsening water quality since oysters filter contaminants. Overall, overfishing in oceans and the Bay poses serious threats to marine life, ecosystems, and ultimately humans who rely on healthy waterways.
Shafia Begum and Mia worked on completing the sound for a film trailer over several sessions from March 16th to March 16th. They used GarageBand to add background music and sound effects. Mia recorded additional voiceover and they edited the narration to fit each scene. Their final session involved some additional editing touches and adding a "Double Take" sound effect to a shot at the end of the trailer. Through this process, they learned how to structure voiceovers and adjust audio levels to balance music and dialogue.
This document discusses the history and research on summer school programs in the United States. It notes that summer school was originally used for recreation but began focusing on remediation in the 1950s. Research shows disadvantaged students experience greater learning loss over the summer. Recent increased emphasis on standardized testing and promotion standards has led more districts to use mandated summer school, but research on its effectiveness has been limited until a 2000 meta-analysis of 93 program evaluations.
Mohammed Omer is a mechanical engineer seeking a position in HVAC projects and customer service. He has over 10 years of experience in HVAC design and project management. Some of the key projects he has worked on include a 500 million AED residential and commercial development with 11 towers, and a 1.6 billion AED expansion of Dubai International Airport. Currently he is working on infrastructure projects at Dubai International Airport. He holds a Bachelor's degree in Mechanical Engineering and is pursuing an MBA in Operations Management.
Este documento presenta dos modelos de reglamento para centros de cómputo en una universidad. Define usuarios y encargados, e incluye normas sobre el uso de computadoras, redes e internet, así como sanciones. El Modelo 1 contiene 19 artículos sobre normas generales, uso de computadoras, red y sanciones. El Modelo 2 contiene 13 artículos sobre acceso, comportamiento y uso apropiado de equipos. Ambos modelos buscan regular el uso de los centros de cómputo con fines académicos y proteger los equipos.
Innovation: The Top Five Things Project Managers Need to Know
In this highly informative session, Tony will leverage PMI research findings to explore the primary issues and opportunities in innovation project management. Innovation is a critical element in helping product-oriented companies achieve their market objectives and projects in these environments are development are complex, long, resource-intensive, and risky. Therefore, it is important to detect problems early to avoid waste of time and resources. Because that is often easier said than done, Tony will couple PMI’s research with observations from his company’s client interactions in the field to help session attendees fully comprehend each of the top five innovation project management issues.
By the end of the presentation, participants will have a very clear understanding of the specific challenges that plague low-performing organizations and the best practice activities that characterize their high-performing counterparts. The costs and benefits of employing these best practices in organizations where they do not yet exist will also be provided, as will be lessons learned from performance improvement efforts in innovation environments. If you want to understand how to assist an organization with improving time-to-market success rates, increase the value of product development efforts, and maximize opportunity in the world of innovation, this session is for you.
Chinua Achebe was a Nigerian novelist, poet, professor, and critic best known for his novel Things Fall Apart. He was born in 1930 in Ogidi, Nigeria and excelled at school, winning a scholarship to university. After graduating, he worked for Nigerian broadcasting and supported Biafran independence. Since 2009, he has been a professor at Brown University. Achebe was highly educated and published several influential works exploring Igbo culture and the collision with European values.
Tubal brings Shylock news from Genoa. He has been unable to find Shylock's daughter. Shylock is distraught over the loss of precious jewels and money spent searching for his daughter. Tubal then shares more positive news - one of Antonio's ships has been wrecked. He further shares that Antonio's creditors say he will not be able to pay his debts. Shylock is pleased by this, saying he will plague and torture Antonio. However, he is upset again upon learning his daughter spent a large sum of money and traded one of his turquoise rings for a monkey.
This document contains 3 sections summarizing an English language assessment of students. Section 1 lists 20 multiple choice comprehension questions assessing various topics. Section 2 lists 5 short answer questions with subparts on comprehension. Section 3 contains analysis of students' writing scores, dividing the assessment into sections on format, content, and overall performance. The document aims to analyze student weaknesses by question topic for both reading and writing.
This document summarizes the key linking features between the filmmaker's main ancillary tasks - a film magazine called The Reel, and a film poster and trailer called Double Take. The features discussed include using red text and fonts to link the pieces, representing the film's theme of love through affectionate imagery and symbols, maintaining continuity between costumes in the poster and trailer, and focusing on the female lead character in all pieces to make her relatable to the target female audience. The filmmaker plans to further explain these linking features in an upcoming presentation.
Magento sites need optimization to load fast and provide a good user experience. Speeding up a site increases sales and improves SEO. Factors that impact load time include network transfers and the resource-intensive nature of Magento. Benchmarking tools like APDEX, Funkload, Yslow and Pagespeed help measure performance and set goals, such as loading the homepage in under 1.5 seconds. Architectures must be sized properly and include techniques like splitting front and back ends, enabling caching, and using a CDN. The Nitrogento extension automates optimizations like blocking caching, sprite generation, and asset minification to significantly improve performance.
How to Improve Magento Performance | Tips to Speed up Magento eCommerce Site/...
Do you want to improve Magento performance Follow these effective ways to optimize Magento performance and it will help you speed up Magento eCommerce site and improve pageload time This Magento optimization guide is extremely helpful for owners and developers alike
Magento, a ready to fly ecommerce plateform, for those who really wanted to crack and enter the ecommerce market. Most of the time we found that Magento is good to start with but as business grows, it seems like Magento become a bottleneck itself in terms of performance, stability and then there is a big time question how to scale it up... here is a solution to start thinking...
The document discusses various techniques for optimizing CakePHP 2.x applications. It covers optimizations that can be made at the browser level, environment level, and application level. Specific optimizations discussed include improving caching strategies, lazy loading elements, reducing bootstrapping overhead, optimizing routing and URL generation, and using containable instead of recursive model associations. Testing optimizations with tools like siege and ab is also recommended.
The document discusses request/response protocols for client-side scripts, server-side scripts, and Java Server Pages. It explains how a server can interface with multiple clients simultaneously using threads. An experiment is described to demonstrate refreshing a JSP page from multiple browsers. The effect of file extensions like .html vs .jsp is also examined.
Caching in Rails works by storing the output of page, fragments, or actions to improve performance. Page caching stores the entire HTML output, while action caching stores the output but still runs before filters. Fragment caching stores portions of views. The cached content is served from memory, file storage, or services like Memcached to avoid repeatedly generating the same content on subsequent requests.
This document discusses integrating servlets and JSP pages using the MVC architecture. It explains that servlets are well-suited for complex programming tasks, while JSP pages are better for generating HTML. It describes using servlets to forward requests to different JSP pages depending on the data, and to set up beans containing data that multiple JSP pages can access. Servlets obtain a RequestDispatcher and use its forward method to transfer control to a JSP page. They can also store data in the request or as beans for JSP pages to access.
This document describes how to use Oracle Service Bus and Oracle Coherence caching capabilities to improve performance of a slow web service. It shows how to create a sample web service that takes 9 seconds to respond using Java and deploy it to WebLogic Server. Then it imports the web service into an Oracle Service Bus project and enables caching for the business service. With caching enabled, subsequent requests return immediately from the cache instead of calling the backend web service. It also describes how to use an external Coherence server for out-of-process caching and monitoring the cache using the Coherence console.
Solving the C20K problem: Raising the bar in PHP Performance and ScalabilityZendCon
This document summarizes a presentation given by Luxi Chidambaran of Oracle on solving the C20K problem of scaling PHP applications. It discusses how the Oracle 11g Database Resident Connection Pool (DRCP) allows PHP applications to connect to the database in a way that supports tens of thousands of concurrent connections using minimal system resources. It provides an overview of DRCP and how the enhanced OCI8 PHP extension connects to leverage DRCP. Performance benchmarks are presented showing significant increases in throughput and reductions in memory usage compared to non-DRCP connections.
This code is not thread-safe because the idNum field is being incremented without synchronization. If this JSP page was accessed concurrently by multiple requests, it could generate non-unique IDs by incrementing idNum multiple times between requests. To make it thread-safe, the idNum field would need to be declared as volatile or access to it would need to be synchronized.
This document provides an overview of state management in ASP.NET, including client-based state using view state, cookies, and query strings, as well as server-based state using application state, session state, and profile properties. It discusses when each state management technique is appropriate and how to implement them in ASP.NET applications.
This document provides tips for improving the performance of ColdFusion applications, including writing code in an object-oriented style, checking for errors first and planning fast exits, limiting nested loops, knowing which ColdFusion functions to avoid, testing execution speed, using stored procedures, caching pages, queries and ORM data, and flushing caches when needed. Additional resources are provided on optimizing ColdFusion applications and performance tuning servers.
Servers - Apache Tomcat Server
Server-side scripts - Java Server Pages
The document discusses request/response protocols for client-side scripts versus server-side scripts like Java Server Pages. It explains how a server can interact with multiple concurrent clients through multi-threaded responses. HTML meta-tags can control the request/response interaction, and the file extension (.html vs .jsp) affects how the page is processed.
The document discusses various techniques for building mashups including AJAX. It defines mashups as lightweight web applications that combine content from existing sources via public APIs. It describes how AJAX uses XMLHttpRequest to asynchronously retrieve data from servers in the background without page refreshes. This improves responsiveness. JSON is also discussed as a data format used for mashups. Challenges with mashups include lack of APIs and difficulties accessing unstructured internal data.
This document discusses tuning web performance from a frontend perspective. It covers the impact of performance on user experience, development tools for optimization like Firebug and Chrome DevTools, and various techniques for website optimization including reducing requests, optimizing images, leveraging caching, minimizing JavaScript, and improving loading efficiency. The goal is to provide an overview of concepts and tools for optimizing frontend performance.
This document provides a history of AJAX and an overview of how it works. It discusses how AJAX enables asynchronous data retrieval, allowing parts of web pages to update without reloading the entire page. It then provides examples of using the XMLHttpRequest object to make requests to a server and retrieve data to dynamically update a web page. The document also covers browser support for AJAX and examples of server-side scripts to handle AJAX requests.
The document provides an overview of developing high performance web applications, focusing on optimizing front-end performance. It discusses why front-end performance matters, and provides best practices for optimizing page load time, developing responsive interfaces, and efficiently loading and executing JavaScript. The document also covers DOM scripting techniques, tools for profiling and analyzing performance, and how the performance monitoring service Gomez can be extended to better measure client-side metrics.
Endeca - Promoting Content & Configuration from Staging to ProductionKeyur Shah
This diagram / mind map was created using MindJet application and covers the steps/guidelines on exactly what it takes to promote the Content & Search configuration from Staging to Production environment.
The document provides information on performance testing processes and tools. It outlines 8 key steps: 1) create scripts, 2) create test scenarios, 3) execute load testing, 4) analyze results, 5) test reporting, 6) performance tuning, 7) communication planning, and 8) troubleshooting. It also discusses tools like LoadRunner, Controller, and Analysis for executing and analyzing tests. The document emphasizes having a thorough test process and communication plan to ensure performance testing is done correctly.
ASP.NET uses an event-based programming model where event handlers are executed in response to events. Events can be page events, which always occur, or control events associated with specific controls. When a browser requests an ASP.NET page, the page class is dynamically compiled and executed on the server to produce the HTML and JavaScript sent to the browser.
This document provides an introduction and tutorial for JavaServer Pages (JSP) technology. It explains how to create simple JSP applications that handle HTML forms and pass data between the client and a JavaBeans component on the server. Examples are provided to demonstrate creating a basic "Hello World" application, handling form submission and passing user-entered data to a bean using JSP tags, and writing the corresponding JavaBeans component. The tutorial also explains how to install and run the example applications using Tomcat.
The document discusses the implications of overfishing in oceans and the Chesapeake Bay. It notes that overfishing is threatening marine life by taking fish out of bodies of water faster than populations can be replenished. This can disrupt food chains and ecosystems. In oceans, overfishing endangers species like sharks that regulate other marine populations. In the Chesapeake Bay, overfishing has reduced the oyster population to 0.3% of historic levels, worsening water quality since oysters filter contaminants. Overall, overfishing in oceans and the Bay poses serious threats to marine life, ecosystems, and ultimately humans who rely on healthy waterways.
Shafia Begum and Mia worked on completing the sound for a film trailer over several sessions from March 16th to March 16th. They used GarageBand to add background music and sound effects. Mia recorded additional voiceover and they edited the narration to fit each scene. Their final session involved some additional editing touches and adding a "Double Take" sound effect to a shot at the end of the trailer. Through this process, they learned how to structure voiceovers and adjust audio levels to balance music and dialogue.
This document discusses the history and research on summer school programs in the United States. It notes that summer school was originally used for recreation but began focusing on remediation in the 1950s. Research shows disadvantaged students experience greater learning loss over the summer. Recent increased emphasis on standardized testing and promotion standards has led more districts to use mandated summer school, but research on its effectiveness has been limited until a 2000 meta-analysis of 93 program evaluations.
Mohammed Omer is a mechanical engineer seeking a position in HVAC projects and customer service. He has over 10 years of experience in HVAC design and project management. Some of the key projects he has worked on include a 500 million AED residential and commercial development with 11 towers, and a 1.6 billion AED expansion of Dubai International Airport. Currently he is working on infrastructure projects at Dubai International Airport. He holds a Bachelor's degree in Mechanical Engineering and is pursuing an MBA in Operations Management.
Este documento presenta dos modelos de reglamento para centros de cómputo en una universidad. Define usuarios y encargados, e incluye normas sobre el uso de computadoras, redes e internet, así como sanciones. El Modelo 1 contiene 19 artículos sobre normas generales, uso de computadoras, red y sanciones. El Modelo 2 contiene 13 artículos sobre acceso, comportamiento y uso apropiado de equipos. Ambos modelos buscan regular el uso de los centros de cómputo con fines académicos y proteger los equipos.
In this highly informative session, Tony will leverage PMI research findings to explore the primary issues and opportunities in innovation project management. Innovation is a critical element in helping product-oriented companies achieve their market objectives and projects in these environments are development are complex, long, resource-intensive, and risky. Therefore, it is important to detect problems early to avoid waste of time and resources. Because that is often easier said than done, Tony will couple PMI’s research with observations from his company’s client interactions in the field to help session attendees fully comprehend each of the top five innovation project management issues.
By the end of the presentation, participants will have a very clear understanding of the specific challenges that plague low-performing organizations and the best practice activities that characterize their high-performing counterparts. The costs and benefits of employing these best practices in organizations where they do not yet exist will also be provided, as will be lessons learned from performance improvement efforts in innovation environments. If you want to understand how to assist an organization with improving time-to-market success rates, increase the value of product development efforts, and maximize opportunity in the world of innovation, this session is for you.
Chinua Achebe was a Nigerian novelist, poet, professor, and critic best known for his novel Things Fall Apart. He was born in 1930 in Ogidi, Nigeria and excelled at school, winning a scholarship to university. After graduating, he worked for Nigerian broadcasting and supported Biafran independence. Since 2009, he has been a professor at Brown University. Achebe was highly educated and published several influential works exploring Igbo culture and the collision with European values.
Tubal brings Shylock news from Genoa. He has been unable to find Shylock's daughter. Shylock is distraught over the loss of precious jewels and money spent searching for his daughter. Tubal then shares more positive news - one of Antonio's ships has been wrecked. He further shares that Antonio's creditors say he will not be able to pay his debts. Shylock is pleased by this, saying he will plague and torture Antonio. However, he is upset again upon learning his daughter spent a large sum of money and traded one of his turquoise rings for a monkey.
This document contains 3 sections summarizing an English language assessment of students. Section 1 lists 20 multiple choice comprehension questions assessing various topics. Section 2 lists 5 short answer questions with subparts on comprehension. Section 3 contains analysis of students' writing scores, dividing the assessment into sections on format, content, and overall performance. The document aims to analyze student weaknesses by question topic for both reading and writing.
This document summarizes the key linking features between the filmmaker's main ancillary tasks - a film magazine called The Reel, and a film poster and trailer called Double Take. The features discussed include using red text and fonts to link the pieces, representing the film's theme of love through affectionate imagery and symbols, maintaining continuity between costumes in the poster and trailer, and focusing on the female lead character in all pieces to make her relatable to the target female audience. The filmmaker plans to further explain these linking features in an upcoming presentation.
Magento sites need optimization to load fast and provide a good user experience. Speeding up a site increases sales and improves SEO. Factors that impact load time include network transfers and the resource-intensive nature of Magento. Benchmarking tools like APDEX, Funkload, Yslow and Pagespeed help measure performance and set goals, such as loading the homepage in under 1.5 seconds. Architectures must be sized properly and include techniques like splitting front and back ends, enabling caching, and using a CDN. The Nitrogento extension automates optimizations like blocking caching, sprite generation, and asset minification to significantly improve performance.
How to Improve Magento Performance | Tips to Speed up Magento eCommerce Site/...I-Verve Inc
Do you want to improve Magento performance Follow these effective ways to optimize Magento performance and it will help you speed up Magento eCommerce site and improve pageload time This Magento optimization guide is extremely helpful for owners and developers alike
Magento, a ready to fly ecommerce plateform, for those who really wanted to crack and enter the ecommerce market. Most of the time we found that Magento is good to start with but as business grows, it seems like Magento become a bottleneck itself in terms of performance, stability and then there is a big time question how to scale it up... here is a solution to start thinking...
The document discusses various techniques for optimizing CakePHP 2.x applications. It covers optimizations that can be made at the browser level, environment level, and application level. Specific optimizations discussed include improving caching strategies, lazy loading elements, reducing bootstrapping overhead, optimizing routing and URL generation, and using containable instead of recursive model associations. Testing optimizations with tools like siege and ab is also recommended.
This document discusses profiling PHP applications to improve performance. It recommends profiling during development to identify inefficiencies. The document introduces Xdebug for profiling PHP code and Webgrind, a PHP frontend for visualizing Xdebug profiles. It provides an example of profiling a sample PHP application, identifying issues, making code changes, and verifying performance improvements through re-profiling.
The document provides tips for building a scalable and high-performance website, including using caching, load balancing, and monitoring. It discusses horizontal and vertical scalability, and recommends planning, testing, and version control. Specific techniques mentioned include static content caching, Memcached, and the YSlow performance tool.
This document provides an overview of Google App Engine, including what cloud computing is, the different types of cloud computing models, how App Engine provides a scalable infrastructure, the programming languages and frameworks supported, how data is stored and accessed via the datastore, services available on App Engine like caching, task queues, and mail, and tips for testing and deploying App Engine applications.
This white paper discusses various methods for optimizing performance on Magento, an ecommerce platform. It begins with basic optimizations like minifying files, optimizing images, enabling caching and gzip compression. More advanced techniques include implementing memcached, Redis and Varnish caching, using a content delivery network, optimizing the database with measures like flat categories and products. The paper provides details on implementing each technique and the benefits to Magento performance. Key contacts at the authoring company RetailOn are provided.
Performance is the most important attribute for success of any commercial and Enterprise Software. In a client server environment, developers focus a lot on optimizing the Data and Logical Tiers. Optimization of Presentation Tier which is responsible for more than 30 % of performance is usually ignored.
The document is developed with the intension to teach the technical staff on Optimizing the Presentation Tier which significantly improves the performance of the Client Server applications.
Java servlets are small programs that run on a web server and dynamically generate web page content. They extend the functionality of web servers and allow for more complex interactions than CGI programs. Servlets support multithreading and sharing of resources, making them faster than CGI programs which require creating a new process for each request. Common ways to handle form data submitted to servlets include using the getParameter() method to retrieve parameter values by name. Sessions can be tracked across requests using cookies, which are small pieces of data stored in the user's browser by the web server. There are two main architectures for developing JSP applications - page-centric and servlet-centric, with servlet-centric following the MVC pattern and separating business
This document discusses Magento eCommerce performance optimization. It provides an overview of Magento, compares it to other platforms, and discusses common performance issues. It then outlines various optimization strategies for Magento configuration, .htaccess tweaks, web server, browser, and MySQL configuration. Specific techniques are described like enabling flat catalog navigation, merging JS/CSS, compiling Magento, disabling logs, enabling caching. Tools for performance measuring and optimization are also listed. The overall document provides a comprehensive overview of approaches for optimizing Magento performance.
This document discusses the benefits of using the .NET framework for web development. It begins by explaining that .NET compiles code to intermediate language (IL) rather than machine code. This allows the common language runtime (CLR) to manage aspects like garbage collection and exception handling. ASP.NET uses dynamic compilation for improved performance. The .NET framework also includes a large set of reusable classes. Additional benefits discussed include object-oriented architecture, caching, XML configuration, code separation, mobile support, powerful data access, language preference, and easy creation of web services.
This document summarizes a presentation on optimizing Joomla performance. It describes two parts to the presentation:
Part 1 covers basic application-level optimizations for Joomla like keeping Joomla updated, choosing extensions wisely, simplifying templates, and using plugins and .htaccess rules to enable caching and compression.
Part 2 discusses server-level optimizations like using a CDN, opcode caching with APC and Memcached, and reverse proxy servers like Nginx and Varnish. It provides configuration examples and presents results of benchmark tests showing improvements from optimizations.
Real-World Pulsar Architectural PatternsDevin Bost
This presentation covers Real-World Pulsar Architectural Patterns involving Distributed Caching and Distributed Tracing. We also cover the use of Apache Ignite, Jaeger, Apache Flink, and many other technologies, as well as industry best-practices.
Crunch Your Data in the Cloud with Elastic Map Reduce - Amazon EMR HadoopAdrian Cockcroft
A introductory discussion of cloud computing and capacity planning implications is followed by a step by step guide to running a Hadoop job in EMR, and finally a discussion of how to write your own Hadoop queries.
Sherlock Homepage - A detective story about running large web services - WebN...Maarten Balliauw
The site was slow. CPU and memory usage everywhere! Some dead objects in the corner. Something terrible must have happened! We have some IIS logs. Some traces from a witness. But not enough to find out what was wrong. In this session, we’ll see how effective telemetry, a profiler or two as well as a refresher of how IIS runs our ASP.NET web applications can help solve this server murder mystery.
This document provides information on improving Drupal performance through various techniques including performance testing, caching, optimizing database and server configurations, using tools like Varnish, load balancers, and CDNs, and addressing inefficient code. It also discusses a case study of using scalable cloud hosting and caching strategies to handle peak traffic for a site during major awards events.
The servlet code reads the name and age parameters from an HTML form submitted via GET. It uses the getParameter() method to retrieve the parameter values and prints them out wrapped in HTML.
The 90-Day Startup with Google AppEngine for JavaDavid Chandler
The document discusses Google App Engine, a platform for developing and hosting web applications on Google's infrastructure. It provides an overview of App Engine and how to get started, discusses some limitations and tradeoffs compared to traditional web hosting, and recommends frameworks and techniques for building scalable applications on App Engine, including Objectify, Guice, and gwt-dispatch. It also notes that while App Engine is still relatively new, it has significant potential for developing scalable applications with minimal upfront costs.
This document discusses strategies for making Ruby on Rails applications highly available. It covers common architectures using a single server, and moving to distributed systems. Key topics include application modularity, useful gems for asynchronous processing, database replication, session management, application deployment, configuration management, and load balancing. The conclusion emphasizes that porting Rails apps to a highly available environment requires thinking about architecture and distribution early, but is not prohibitively difficult if approached methodically.
Similar to Introduction to Magento Optimization (20)
Explore the rapid development journey of TryBoxLang, completed in just 48 hours. This session delves into the innovative process behind creating TryBoxLang, a platform designed to showcase the capabilities of BoxLang by Ortus Solutions. Discover the challenges, strategies, and outcomes of this accelerated development effort, highlighting how TryBoxLang provides a practical introduction to BoxLang's features and benefits.
Cultural Shifts: Embracing DevOps for Organizational TransformationMindfire Solution
Mindfire Solutions specializes in DevOps services, facilitating digital transformation through streamlined software development and operational efficiency. Their expertise enhances collaboration, accelerates delivery cycles, and ensures scalability using cloud-native technologies. Mindfire Solutions empowers businesses to innovate rapidly and maintain competitive advantage in dynamic market landscapes.
Software development... for all? (keynote at ICSOFT'2024)miso_uam
Our world runs on software. It governs all major aspects of our life. It is an enabler for research and innovation, and is critical for business competitivity. Traditional software engineering techniques have achieved high effectiveness, but still may fall short on delivering software at the accelerated pace and with the increasing quality that future scenarios will require.
To attack this issue, some software paradigms raise the automation of software development via higher levels of abstraction through domain-specific languages (e.g., in model-driven engineering) and empowering non-professional developers with the possibility to build their own software (e.g., in low-code development approaches). In a software-demanding world, this is an attractive possibility, and perhaps -- paraphrasing Andy Warhol -- "in the future, everyone will be a developer for 15 minutes". However, to make this possible, methods are required to tweak languages to their context of use (crucial given the diversity of backgrounds and purposes), and the assistance to developers throughout the development process (especially critical for non-professionals).
In this keynote talk at ICSOFT'2024 I presented enabling techniques for this vision, supporting the creation of families of domain-specific languages, their adaptation to the usage context; and the augmentation of low-code environments with assistants and recommender systems to guide developers (professional or not) in the development process.
Ansys Mechanical enables you to solve complex structural engineering problems and make better, faster design decisions. With the finite element analysis (FEA) solvers available in the suite, you can customize and automate solutions for your structural mechanics problems and parameterize them to analyze multiple design scenarios. Ansys Mechanical is a dynamic tool that has a complete range of analysis tools.
A Comparative Analysis of Functional and Non-Functional Testing.pdfkalichargn70th171
A robust software testing strategy encompassing functional and non-functional testing is fundamental for development teams. These twin pillars are essential for ensuring the success of your applications. But why are they so critical?
Functional testing rigorously examines the application's processes against predefined requirements, ensuring they align seamlessly. Conversely, non-functional testing evaluates performance and reliability under load, enhancing the end-user experience.
Overview of ERP - Mechlin Technologies.pptxMitchell Marsh
This PowerPoint presentation provides a comprehensive overview of Enterprise Resource Planning (ERP) systems. It covers the fundamental concepts, benefits, and key functionalities of ERP software, illustrating how it integrates various business processes into a unified system. From finance and HR to supply chain and customer relationship management, ERP facilitates efficient data management and decision-making across organizations. Whether you're new to ERP or looking to deepen your understanding, this presentation offers valuable insights into leveraging ERP for business success.
Sami provided a beginner-friendly introduction to Amazon Web Services (AWS), covering essential terms, products, and services for cloud deployment. Participants explored AWS' latest Gen AI offerings, making it accessible for those starting their cloud journey or integrating AI into coding practices.
Are you wondering how to migrate to the Cloud? At the ITB session, we addressed the challenge of managing multiple ColdFusion licenses and AWS EC2 instances. Discover how you can consolidate with just one EC2 instance capable of running over 50 apps using CommandBox ColdFusion. This solution supports both ColdFusion flavors and includes cb-websites, a GoLang binary for managing CommandBox websites.
Seamless PostgreSQL to Snowflake Data Transfer in 8 Simple StepsEstuary Flow
Unlock the full potential of your data by effortlessly migrating from PostgreSQL to Snowflake, the leading cloud data warehouse. This comprehensive guide presents an easy-to-follow 8-step process using Estuary Flow, an open-source data operations platform designed to simplify data pipelines.
Discover how to seamlessly transfer your PostgreSQL data to Snowflake, leveraging Estuary Flow's intuitive interface and powerful real-time replication capabilities. Harness the power of both platforms to create a robust data ecosystem that drives business intelligence, analytics, and data-driven decision-making.
Key Takeaways:
1. Effortless Migration: Learn how to migrate your PostgreSQL data to Snowflake in 8 simple steps, even with limited technical expertise.
2. Real-Time Insights: Achieve near-instantaneous data syncing for up-to-the-minute analytics and reporting.
3. Cost-Effective Solution: Lower your total cost of ownership (TCO) with Estuary Flow's efficient and scalable architecture.
4. Seamless Integration: Combine the strengths of PostgreSQL's transactional power with Snowflake's cloud-native scalability and data warehousing features.
Don't miss out on this opportunity to unlock the full potential of your data. Read & Download this comprehensive guide now and embark on a seamless data journey from PostgreSQL to Snowflake with Estuary Flow!
Try it Free: https://dashboard.estuary.dev/register
An MVP (Minimum Viable Product) mobile application is a streamlined version of a mobile app that includes only the core features necessary to address the primary needs of its users. The purpose of an MVP is to validate the app concept with minimal resources, gather user feedback, and identify any areas for improvement before investing in a full-scale development. This approach allows businesses to quickly launch their app, test its market viability, and make data-driven decisions for future enhancements, ensuring a higher likelihood of success and user satisfaction.
Efficient hot work permit software for safe, streamlined work permit management and compliance. Enhance safety today. Contact us on +353 214536034.
https://sheqnetwork.com/work-permit/
React and Next.js are complementary tools in web development. React, a JavaScript library, specializes in building user interfaces with its component-based architecture and efficient state management. Next.js extends React by providing server-side rendering, routing, and other utilities, making it ideal for building SEO-friendly, high-performance web applications.
React Native vs Flutter - SSTech SystemSSTech System
Your project needs and long-term objectives will ultimately choose which of React Native and Flutter to use. For applications using JavaScript and current web technologies in particular, React Native is a mature and trustworthy choice. For projects that value performance and customizability across many platforms, Flutter, on the other hand, provides outstanding performance and a unified UI development experience.
2. Why are
we here?
This is a set of slides which will introduce you to the
magical, overflowed, strenuous world of Magento
optimization.
It won't be problem-centric, but a quick tour on the
whole ensemble of Mage's good practices to achieve
excellent performance and understand why this
platform has such a moody character.
3. Ok then:
what
makes it
so slow?
Magento, in fact, isn’t that slow.
The problem basically resides in its fragile
scalability, due to very low tolerance for bad code,
the EAV model which generates performance-killer
queries, an excessive dependence on media
resources and a dispersive class structure.
4. Ok then:
what
makes it
so slow?
Descending more into details, we can split the area
of operation into five sections:
➢ HTTP Transactions
➢ Database
➢ Media
➢ Source code
➢ Tweaking
Each one of them has its own peculiarity, with
specific "dos" and "don'ts". Let’s take a look.
5. HTTP
Transactions
The main responsible for client-server
communication, its performance greatly impacts the
user experience on the website.
The best optimization available can be made using a
caching system. There are different kind of them, the
choice will be influenced by the load of the website
and the scope of the cache. We will discuss this
further.
But to rely only on cache for optimization is a bad
mistake. Caching is useful to push optimization over
the boundaries only when there's no other option
left.
6. Database The major drawback of the EAV model it's the
extremely dispersive structure, which generates
queries with lots of JOINs.
Besides, the excessive amount of transparency of the
Model to the eyes of the developer, and its
counterintuitive nature, may lead to bad code
application, affecting performance while interacting
with the database.
7. Database Other than best practices, we can achieve major
advantages through replication since the structure
generated by the EAV suffers from really bad
concurrency illness.
Replication is most effective on tables with an high
access rate, typically the FLAT ones. This form of
optimization can be implemented manually or
through 3rd party services, like the ones offered by
AWS.
8. Media With the term media we are mainly referring to
images. Those are often managed by the customer
itself, leading to possible inefficiencies in size and
quality of the images.
Without the proper compression, a single image may
take up to 80% more bandwidth than an optimized
one! Even when Magento responds quickly, if the
browser needs to download lots of MBs of images the
user will still get a sensation of slowness.
9. Media There are services and plugins for dealing with the
optimization without having to check manually
every image uploaded to the platform.
The most famous are Kraken.io and Apptrian Image
Optimizer, which intercept the images being
requested, call a webservice for optimizing size (with
both lossy or lossless algorithms) and then return it,
properly cached.
10. Assets Just like the media, assets have great impact on the
loading time of the client. The best option here is to
relocate and minify the code.
To relocate all the js and css source in the same host
is useful for reducing network time over the
resolution of DNS and routing to the server, while the
minification reduces the size of the single files and
the number of requests needed to download them all.
One of the most used extension is Apptrian Minify
HTML CSS JS.
11. Source code The possibilities to extend Magento functionalities
are nearly limitless, but this flexibility costs much.
Given the chance to use Models for interacting with
database, it's essential to know exactly how code
operates, in order to prevent improper use of objects
and classes which may lead to overheads of JOINs or
unwanted big queries for just small chunks of
information.
12. Source code
Iteration $p = Mage::getModel('catalog/product')
->getCollection();
foreach ($p as $item) {
// Doin’ stuff...
}
This is a don’t, as Magento uses a lazy loading
approach while dealing with collections, thus loading
the entire PHP object at every cycle of the for. It is
utterly expensive.
13. Source code
Iteration $p = Mage::getModel('catalog/product')
->getCollection();
foreach ($p->getData() as $data) {
// Doin’ stuff
}
This is the proper way, because it loads only the
informations we really need.
14. Source code
Iteration $p = Mage::getModel('catalog/product')
->getCollection();
while ($item = $p->fetchItem()) {
// Doin’ stuff
}
This is totally analogue to the previous solution, with
just some saving in the amount of memory stored for
each item of the collection.
15. Source code
Iteration
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
Time Memory
wrong way ~ 0.0366 sec ~ 3.14 MB
getData() ~ 0.0052 sec ~ 1.16 MB
fetchItem() ~ 0.0211 sec ~ 0.30 MB
16. Source code
Scaling $p = Mage::getModel('catalog/product')
->getCollection();
foreach ($p as $item) {
$item->load($item->getId());
echo $item->getDescription();
}
This is a don’t, as at every cycle we are loading
the entire product object just for a single information.
17. Source code
Scaling
$p = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect(
array('description')
);
foreach ($p as $item) {
echo $item->getDescription();
}
Here we are correctly specifying which information
we are going to need later, lightening the execution of
the cycle.
18. Source code
Scaling
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
Time Memory
without attribute ~ 17.07 sec ~ 25.83 MB
with attribute ~ 0.0435 sec ~ 3.45 MB
19. Source code
Saving $p = Mage::getModel('catalog/product')
->load($id);
$p->setDescription('New Test')
->save();
Another don’t. This way of saving forces Magento to
store the entire object, not just the attribute we’ve
modified.
20. Source code
Saving $p = Mage::getModel('catalog/product')
->load($id);
$p->setDescription('New Test')
->getResource()
->saveAttribute($p, 'description');
Instead of storing the entire object, we specify exactly
the attribute to be saved, thus sparing us time and
memory.
21. Source code
Saving
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
Time Memory
save() ~ 0.336 sec ~ 5.99 MB
saveAttribute() ~ 0.0432 sec ~ 2.47 MB
22. Source code
Reuse & Recycle
# Multiple static call
$nam = Mage::getModel('catalog/product' )->load($id)->getName();
$sku = Mage::getModel('catalog/product' )->load($id)->getSku();
$des = Mage::getModel('catalog/product' )->load($id)->getDescription ();
/******** VERSUS ********/
# Single static call
$p = Mage::getModel('catalog/product' )->load($id);
$nam = $p->getName();
$sku = $p->getSku();
$des = $p->getDescription ();
It may seems obvious, but attention to details is
needed when working with big amount of data.
23. Source code
Reuse & Recycle
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
Time Memory
multiple ~ 0.0823 sec ~ 2.54 MB
single ~ 0.0376 sec ~ 2.54 MB
Thinking of a store with about 10.000 products,
performance would be impacted greatly.
24. Source code
Native funcs
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
Time Memory
count() ~ 0.0363 sec ~ 3.14 MB
getSize() ~ 0.0019 sec ~ 0.0016 MB
Sometimes we found ourselves thinking that
native PHP functions should work better than the
ones offered by a framework. This is true in some
cases, but not with Magento. Here’s an example:
counting elements in a collection.
25. Cache The temptation of using a cache system to speed up
our website is very strong, but we shall not fall for
the Dark Side.
Instead, caching is effective only after all the other
optimizations have been applied.
Moreover, regardless of the cache system that one
will choose for its website, it's very important to plan
accurately and think over the pros and the cons of
using the proper system, if you are going to need it at
all.
26. Cache
In Mage World, we can distinguish two major cache
family:
➢ Infrastructure, server-level
➢ Application, managed by Magento itself
27. Cache
Infrastructure
This type of cache uses services implemented
outside the basecode, typically reverse proxies,
which take place between the client and the
Magento application entry point.
It greatly reduces the response time, because when a
request hits the cache Magento hasn’t been
instanced yet and all the callback effort is handled
by the proxy service itself.
Besides, reducing the number of hit to Magento will
also reduce the amount of load on the server.
28. Cache
Infrastructure
The most famous reverse proxy is Varnish, widely
used for eCommerce sites with high traffic levels.
It also provides support for a specific hypertext
syntax called ESI: it’s used to specify, through proper
tags, which content of the page needs to be reloaded
every time, committing the job to Varnish.
When the proxy encounters an ESI tag, it will send a
request to the application to obtain the resource,
merge the result with the cached response and then
return it to the client.
29. Cache
Application
The second cache family has a more diversificated
situation. Many different extensions have been
implemented from time to time, all of which
different from the others by the way the cache is
implemented (before or after Mage instance) or the
the kind of storage being made (full, partial).
So, for the sake of orderliness, we will split up this
types in three:
❖ Full Page Cache
❖ Static Cache
❖ Hybrid Cache
30. Cache
Full Page Cache
Full Page Cache (FPC for friends) is intended for
caching the most out of a page, while reloading the
resource just for specific chunks of page that are
requested as fresh every time.
The advantage of this extension is that it kicks in
before all the Mage app object is instanced, thus
saving lots of resources.
The drawback, however, resides in the necessity to
parse the response, which can be enormous, and to
retrieve the dynamic content to replace in the
cached response for every request.
31. Cache
Static Cache
This kind of cache is the most effective, but its range
of use is very limited. Like FPC, it is placed before the
instance of Mage app and it caches all the content of
the request, regardless of the content.
The cons, here, are clear: it can't be used in any page
that provides dynamic objects, like a cart, or session-
related informations.
However it is very useful with static pages like 404
(which are very expensive in Magento!), external
widgets or other static contents (like a 'Contact us'
block).
32. Cache
Hybrid Cache
The Hybrid tries to take the pros of both types,
reducing the cons.
The content is returned through Static Cache, so it's
faster and the user will be served asap, while to the
response we will attach javascript algorithm to
create asynchronous calls towards the server and
retrieve the dynamic content after the page has been
loaded.
This approach will return only the information
needed, while the async calls may be cached again
as they are fully compatible with any other cache
system, both Application and Infrastructure.
33. Tweaking Usually snobbed by developers for small or mid-
sized application, a proper LAMP/LNMP
configuration setup becomes mandatory working
with Magento.
In this presentation we will list only the most
important tweaks, but for a complete list I suggest to
follow this link.
34. Tweaking
Server
1. Turn on the Gzip compression: it reduces output
size, speeding up the download for clients.
2. Turn on the option "KeepAlives" of Apache: this
option enables the server to channel multiple
HTTP request through a single TCP connection,
improving response time. Be careful, though,
because setting a wrong time for this parameter
may lead to an excess of open TCP connections,
which will increase considerably the load on the
server.
35. Tweaking
Server
3. Use a RAM filesystem for storing files with an
high rate of I/O operation, usually var/cache and
var/session.
4. Reduce logging operation when not needed: it's
an I/O that may slow down HTTP requests;
alternatively, think of an async write or the use
of a memory based filesystem.
36. Tweaking
PHP
1. Use an accelerator like APC, Zend Opcache or
XCache.
2. Increase the memory_limit to at least 128M
3. Check the real amount of realpath cache used by
PHP and set the correct amount in the
realpath_cache_size option. You can verify it
using the realpath_cache_size() function.
37. Tweaking
PHP
4. Turn off open_basedir, as it prevents realpath
cache use.
5. Use an Autoloader, which will reduce I/O
operation while scavenging for classes during
Mage execution.
Another ally in the parse of the base code may
be the AOE_ClassPathCache extension, which
does not create an Autoload file but registers all
the filepaths for resolving classes requests into a
single file, thus saving time for scanning all the
dirs searching for the proper file.
38. Tweaking
Database
1. Disable log writing to database if not needed.
Magento does not offer this option by default, it
can be achieved through the use of an extension
called Yireo DisableLog.
2. Increase the query_cache_size amount, useful
when server comes with loads of RAM. MySQL
packages tend to be resource conservative by
default. It can be increased to 64MB if the server
has at least 1GB of RAM.
3. Increase the query_cache_limit, bringing it to at
least 2MB.
39. Tweaking
Database
4. MySQL uses a buffer to store information on data
and indexes, to speed up queries execution.
The buffer size can be monitored with the
innodb_buffer_pool_size option, which value
depends on the database server specs.
Database server RAM Size
Shared with HTTP server 6 GB 2/3 GB
Dedicated 6 GB 5 GB
Dedicated 12 GB 10 GB
40. Tweaking
Database
5. Increase the innodb_thread_concurrency
attribute, which defines the maximum number
of concurrency threads inside InnoDB. By
default this option is set to 0. It's useful for
websites with at least 60 active user at the same
time.
A good way to guess the correct amount of
concurrency threads is to apply this formula:
(2 * [n° of CPU])+ 2
41. Platform This is not proper optimization, but it’s a good point
to consider when talking about performance.
The platform over which Magento runs can greatly
improve speed, stability and scalability.
One of the best booster for a Magento 1.9 installation
would be a setup composed by PHP 7 FPM and
MySQL Percona 5.6. Advantages are tremendous, and
will be shown in comparison with past benchmarks.
42. Platform Let’s take the code of page #16, which is the heaviest
of all in this presentation.
Time Memory
PHP 5.6* ~ 17.07 sec ~ 25.83 MB
PHP 7** ~ 6.28 sec ~ 13.12 MB
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
*Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
vs.
**Vagrant - OS Ubuntu 14.04 - PHP 7.0.0 FPM - MySQL Percona 5.6.27
43. Platform We can achieve interesting results also with code
from #19, during the save operation of a product. In
this case, Mage cache was not taken in account.
Time Memory
PHP 5.6* ~ 0.643 sec ~ 7.576 MB
PHP 7** ~ 0.310 sec ~ 3.465 MB
Benchmark made on a Magento 1.9 installation
with official sample data (~580 products)
*Vagrant - OS Ubuntu 14.04 - PHP 5.6.12 with APC - MySQL 5.6.24
vs.
**Vagrant - OS Ubuntu 14.04 - PHP 7.0.0 FPM - MySQL Percona 5.6.27
44. Platform While officially Magento 1.9 does not support PHP 7,
there are simple fixes that needs to be made in the
Core in order to get it up and running.
The real problem is, no one can assure backward
compatibility for Magento 1.x modules, thus
potentially transforming a simple platform migration
into your worst nightmare.
This kind of change should not be done on running
and stable projects, but it’s a really good (and brave)
start for new ones. Even starting from fresh, though,
we need to be careful about code written for PHP 5 in
3rd party extensions.
45. At last...
Released under Creative Commons by-nc-nd
...thanks
for watching!
Synesthesia srl
HQ: Via Amedeo Peyron 29, 10143 Torino
Tel: +39 011 0437401 - info@synesthesia.it - www.synesthesia.it - www.droidcon.it
Reg. Office: C.so Galileo Ferraris 110, 10129 Torino - VAT N° IT10502360018
Mobile Apps // Web Development // Ecommerce & Magento // UX&UI Design