Magento 2 performance of the Helly Hansen eCommerce hosted on the Magento Commerce Cloud

Helly Hansen is a company with a great history.

Helly Hansen(HH) has been making professional-grade gear to help people stay and feel alive for more than 140 years. It all started in 1877 when sea captain Helly Juell Hansen found a better way to stay protected from the harsh Norwegian elements. Soon thereafter, Captain Hansen and his wife Margrethe launched a business producing waterproof oilskin jackets, trousers, sou’westers, and tarpaulins made from coarse linen soaked in linseed oil — and the legend was born!

Hower wrong eCommerce platform implementation with slow performance can kill customers User Experience of the global business easily. I’m really sad about this fact because Helly Hanse is my favorite sailing gear after Gill. Let's take a look into Magento 2 HH performance!

Helly Hansen chose Vaimo because it was a recommended solution partner from Magento. Vaimo’s proven track-record of Magento 2 implementations, scale in number of developers and international presence were the key reasons we decided to work with them.

CHRIS HAMMOND

Global Digital Director HH

This is Magento Commerce Cloud hosted website

Helly Hansen’s mobile-first solution launched on Magento Commerce Cloud in October 2016 with an integration with Magento Order Management. This was the first M2 Magento Order Management integration and the largest implementation at the time. The solution was also the biggest project hosted by Magento Commerce Cloud, with 27 stores in total, and with 4 languages added initially. Today, there are 35 stores on one Magento installation in 7 different languages.

Vaimo

Right after the migration to Magento 2, HH had performance issues:

As you can see this is not a low budget website. It is 2018 EXCELLENCE AWARDS winning website.

Image for post
Image for post

Finalists: SLO, Bauhaus, HH

This project created by the top certified Magento reseller company (Vaimo) and is hosted on top of the official Magento “Cloud”. Jut the hosting for this software can cost many hundreds of thousands of dollars per year.

This is an example of Magento Cloud Cost per big client:

Image for post
Image for post

$825,000+$6,657 + $10,700

Yes, Magento sales representative can provide a significant discount to close the deal on the slow hosting.

Another Vaimos award-winning website Bauhaus is another story. They even have an admin area URL disclosed in the robots.txt file.

Image for post
Image for post
Image for post
Image for post

https://www.bauhaus.dk/robots.txt

Thanks, MagenX team (https://www.linkedin.com/in/magenx/) for this additional information.

Also if Magento 2 version is outdated and to hack such website is 15 minutes work. Adobe itself publicly exposes all security issues in each new release.

SLO website just has a default admin area URL…

Admin is there:

Configuring Admin Security

Magento recommends that you take a multifaceted approach to protect the security of your store. You can begin by using a custom Admin URL that is not easy to guess, rather than the obvious “Admin” or “Backend.”

Official Magento documentation

Just Watch this Video how to hack an outdated Magento website in 5 minutes if you know where admin area is:

Helly Hansen has not secured Wordpress(old version 5.2.3) admin there: https://www.hellyhansen.com/hhadmin/

Performance Test

For the test, we will use PageSpeed Insights

PageSpeed Insights(PSI) provides a score that summarizes the Magento 2 page’s performance. This score is determined by running Lighthouse to collect and analyze lab data about the page. A score of 90 or above is considered fast, and 50 to 90 is considered moderate. Below 50 is considered to be slow.

Real-World Field Data

When PSI is given a URL, it will look it up in the Chrome User Experience Report (CrUX) dataset. If available, PSI reports the First Contentful Paint (FCP) and the First Input Delay (FID) metric data for the origin and potentially the specific page URL.

Classifying Fast, Moderate, Slow

PSI also classifies field data into 3 buckets, describing experiences deemed fast, moderate, or slow. PSI sets the following thresholds for fast/moderate/slow, based on our analysis of the CrUX dataset:

Image for post
Image for post

Distribution and selected value of FCP and FID

PSI presents a distribution of these metrics so that developers can understand the range of FCP and FID values for that page or origin. This distribution is also split into three categories: Fast, Moderate, and Slow, denoted with green, orange, and red bars. For example, seeing 14% within FCP’s orange bar indicates that 14% of all observed FCP values fall between 1,000ms and 3,000ms. This data represents an aggregate view of all page loads over the previous 30 days.

Image for post
Image for post

Above the distribution bars, PSI reports the 75th percentile First Contentful Paint and the 95th percentile First Input Delay, presented in seconds and milliseconds respectfully. These percentiles are selected so that developers can understand the most frustrating user experiences on their site. These field metric values are classified as fast/moderate/slow by applying the same thresholds shown above.

For The Backend Magento 2 Server performance benchmark we will use Apache Benchmark tools!

Apache Benchmark

When developing Magento eCommerce and tuning the hosting that runs them, you’ll want to make sure that they handle requests quickly enough, and at a high enough volume, to meet your requirements. ApacheBench (ab) is a benchmarking tool that measures the performance of a web server by inundating it with HTTP requests and recording metrics for latency and success. ApacheBench can help you determine how much traffic your HTTP server can sustain before performance degrades, and set baselines for typical response times.

While ApacheBench was designed to benchmark the Apache web server, it is a fully fledged HTTP client that benchmarks actual connections, and you can use it to test the performance of any backend that processes HTTP requests. In this post, we will explain how ApacheBench works, and walk you through the ApacheBench metrics that can help you tune your web servers and optimize your applications.

With the ApacheBench’s you can track the duration of different stages of the request-response cycle. ab aggregates properties from its per-request data objects to calculate the min, mean, sd (standard deviation), median, and max of each stage, all in milliseconds:

Image for post
Image for post
  1. Requests per second: is the average of how many requests the Magento 2 was able to handle in a second. It’s useful in determining how your web server will perform when many users are logging onto it at the same time.
  2. Time per request: is how much time, on average, it took to process a request. The values are given in milliseconds, so in our example output the time was 1.1 seconds. The second time per request value is simply multiplied by the concurrency value.
  3. Transfer rate: is how fast it was able to transfer the data, which shouldn’t pose any kind of a bottleneck on a local network. If testing over the internet, the routing and bandwidth limitations could affect this value long before Apache itself.
  4. Connect: How long it takes ab to establish a TCP connection with the target server before writing the request to the connection (ctime)
  5. Processing: How long the connection was open after being created (time - ctime)
  6. Waiting: How long after sending the request before beginning to read a response from the connection (waittime)
  7. Total: The time elapsed from the moment ab attempts to make the connection to the time the connection closes (time)

Let’s check HH performance!

We will test the next steps:

  1. Home page rendering time
  2. Product Page Rendering
  3. Category Page
  4. Layered Navigation Filter
  5. Search

Goggle page speed results:

Mobile Score: 18

Image for post
Image for post

Download Full Result:

https://drive.google.com/open?id=1xkOBu8suo19gYoHY-IF5LdnrfMu7pay5

Desktop Score: 30

Image for post
Image for post

Results are pretty low as for the world brand…

Lets test Helly Hansen Magento 2 Implementation and Magento Commerce Cloud Performance server-side performance:

Home page

Image for post
Image for post
Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 38 38 0.0 38 38
Processing: 4342 4342 0.0 4342 4342
Waiting: 2367 2367 0.0 2367 2367
Total: 4380 4380 0.0 4380 4380

Page Return Time/Time to first byte(TTFB) is 2367ms…

A slow time to first byte (TTFB) is recognized by a high waiting time. It is recommended that you have this under 200ms (Google Documentation). A high TTFB connected with a slowly responding Magento 2 application. There are many reasons a backend can be slow. You will need to do profiling of the Magento software and figure out the issue. However, Magento 2 core itself has a lot of performance issues compared to the previous first version of the software.

2. Product Page rendering

Image for post
Image for post
Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 38 38 0.0 38 38
Processing: 4004 4004 0.0 4004 4004
Waiting: 3580 3580 0.0 3580 3580
Total: 4042 4042 0.0 4042 4042

TTFB: 3580ms

Google considers pages with First Content Paint more than 3000ms as slow.

3. Category page rendering time

Image for post
Image for post

TTFB: 6046ms

Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 37 37 0.0 37 37
Processing: 6466 6466 0.0 6466 6466
Waiting: 6046 6046 0.0 6046 6046
Total: 6503 6503 0.0 6503 6503

Amazon Found Every 100ms of Magento Page rendering time Latency Cost them 1% in Sales. For this specific case, HH loses 60% in revenue. That's why global brands like Nike, Puma who really selling online, not just using eCommerce as an online B2B/B2C catalog moved out from the Magento 2.

4. Filter Layered Navigation result page: filter by color

Image for post
Image for post
Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 37 37 0.0 37 37
Processing: 6531 6531 0.0 6531 6531
Waiting: 6009 6009 0.0 6009 6009
Total: 6568 6568 0.0 6568 6568

TTFB: 6009ms (6 seconds!!!)

Basically Layered navigation and Category page have the same functionality and the same slow performance...

5. Search Result: search for “sailing jacket”

Image for post
Image for post

Magento Search Page TTFB: 7320ms ;)

Awesome Magento Cloud performance!

Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 37 37 0.0 37 37
Processing: 7745 7745 0.0 7745 7745
Waiting: 7320 7320 0.0 7320 7320
Total: 7782 7782 0.0 7782 7782

Let's check this web site under the load…

The world-leading brand with 35 stores on one Magento installation (not the best solution for big merchants) in 7 different languages can easily hit 50 simultaneous requests per second when single Magento 2 page generates several AJAX requests like:

Baner:

https://www.hellyhansen.com/en_us/banner/ajax/load/?requesting_page_url=https%3A%2F%2Fwww.hellyhansen.com%2Fen_us%2Fcatalogsearch%2Fresult%2F%3Fq%3Dsailing%2520jacke&sections=

Swatches:

https://www.hellyhansen.com/en_us/helly-hansen/swatches/colors?image_type=swatch&products=230827,230845,230959,356658,356676,909777,910032,910227

Customer Section:

https://www.hellyhansen.com/en_us/customer/section/load/?sections=google-tag-manager-product-info&force_new_section_timestamp=false&_=1589836599704

Note: Magento 2 doesn’t have a light HTTP request. All requests to the Magento backend is considered heavy for PHP and MySQL server because of heavy PHP frameworks and a lot of Redis caches (60–100 per page), and slow legacy EAV DB architecture. Ajax requests, GraphQL requests, API requests also generate significant load on the server.

6. 50 concurrent users requests to the search page without additional Ajax requests:

Image for post
Image for post
Concurrency Level:      50
Time taken for tests: 36.835 seconds
Complete requests: 50
Failed requests: 0
Total transferred: 13651599 bytes
HTML transferred: 13572050 bytes
Requests per second: 1.36 [#/sec] (mean)
Time per request: 36834.546 [ms] (mean)
Time per request: 736.691 [ms] (mean, across all concurrent requests)
Transfer rate: 361.93 [Kbytes/sec] received
Magento Performance Times (ms)
min mean[+/-sd] median max
Connect: 39 54 4.4 53 65
Processing: 7578 21045 4305.6 20857 29761
Waiting: 6978 19275 4347.4 20201 28189
Total: 7617 21100 4306.9 20909 29816

As a result, we can see that during a slight load world-leading eCommerce website can generate 1.26 pages per second with the single page generation time 20second on Magento Cloud Hosting.

For example, a low budget web sites ($300 months) on Self Hosted Open Source Terraform Magento Cloud with auto-scaling on AWS can handle 100+ request per second with 20% page rendering time degradation! As a result, we can see Magento/Adobe Commerce Cloud is good as a staging infrastructure for the development purpose only or for a small client with 1 request per second

Details there:

We have an experience that many enterprise merchants business has been negatively affected after Magento 2 Commerce/Clouds migration because of misleading information from the sales representative about performance and they lost a lot of money and clients. USA and state of California (where the Magento is officially registered) low provides criminal penalties for false advertising and fraud. Advertising is regulated by both federal and state law. Under the law, your ad is unlawful if it tends to mislead or deceive. Your intentions don’t matter. If your ad is deceptive, you’ll face legal problems even if you have the best intentions in the world. Intentional misrepresentation requires the following elements: A party makes a false statement of fact knowing the statement is not true. Statements of opinion or general embellishment, like a salesperson bragging about a product they wish to sell, are permitted, even if the opinion exaggerates the product’s performance or benefits. The other party reasonably relied on the false statement, which was a substantial factor in causing harm to them. The other party suffered damages as an actual and proximate result of the intentional misrepresentation.

Pivot Table Helly Hansen Magento 2 Performance

+-----------------------------+--------------+
| | Magento 2 HH |
+-----------------------------+--------------+
| 1.Home Page | 2367 |
+-----------------------------+--------------+
| 2.Product Page | 3580 |
+-----------------------------+--------------+
| 3.Category page | 6046 |
+-----------------------------+--------------+
| 4.Filter/Layered Navigation | 6009 |
+-----------------------------+--------------+
| 5.Search Result | 7320 |
+-----------------------------+--------------+
| 6.Search Result 50 users | 20201 |
+-----------------------------+--------------+

Magento 2 HH Performance Chart:

Image for post
Image for post

Written by

Magento/APP Cloud Architect. Melting metal server infrastructure into cloud solutions.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store