Adobe Magento 2.4+ vs OpenMage (Magento 1.9 Open Source) Performance 2021
By: Yegor Shytikov
Tags: Magento Development, Magento, PHP, Ecommerce

M2 is the slowest platform on the market and has many misleading advertisement campaigns and marketing lies about M2 performance. One of such lies: M2 is faster than M1. Let’s check that.

OpenMage LTS (https://github.com/OpenMage/magento-lts) is a community-driven true Open Source fork of Magento 1.9 with security vulnerability patches, bug fixes, performance improvements, and more.

Today we will check how Adobe improved the performance of the “innovative” e-commerce platform built on top of abandoned Zend Framework v.1 and Knockout.JS vs Previous Magento version 1.9.

We have a C5.xlarge instance (3 GHz Intel Xeon Platinum 8124M, 4 vCPU, 8 GiB memory) with M1 and Magento 2 sample data. PHP 7.4. All Magento stack (PHP, MySQL, ElasticSearch, Redis, Varnish, Nginx ) installed on the same instance.

In a previous test, we used a Cloud-Ready environment. ASG, separate Redis Elastic Cache instance, RDS, EFS, will be different in favor of M2 because it has terrible performance on scaling architecture basically because M2 has not scalable architecture and has more Redis and SQL calls, additional network wait latency overhead. In this test, everything is on the one instance, and it is the best configuration for Magento 2. Reda why AWS monocore 64 CPU Graviton 2 instance is slow Magento cloud killer :

As a test tool, we will use K6.io open-source load testing tool optimized for Magento script:

Also, I will use TideWays Profiler to show real code profilings of both platforms.

The test scenario is the same as in the previous test:

Test Scenarios:

Category page, PLP Filter Layered Navigation Search “Shirt” Product Page Simple, PDP Product Page Configurable Test Empty CMS page — “Hello World!” test Frontend performance, Lighthouse

Why Benchmarking, “Hello, World!”?

“Hello World! performance evaluation provides a deep understanding of a system’s behavior, quantifying not only the overall behavior, but also its internal mechanisms and policies. It explains why a system behaves the way it does, what limits that behavior, and what problems must be addressed in order to improve the system.” Richard L. Sites

There is a lot to be learned from careful observation of a program and its complete Magento surrounding context, even one as “trivial” as HelloWorld. Some or all of these were probably missing from the picture in your head:

• Bootstrap Time

• Startup/shutdown time

• More time in kernel code than in user code

• Serialized waiting for others; not executing at all

• Cache interference

If you substitute for HelloWorld, a nontrivial Magento controller, you can learn even more about Magento 1,2, and its execution on a server.

We will run each test 20 times with 1 concurrent user and gather minimum, average, 95% percentile, and maximum page server-side rendering metrics.

Magento 2 Category Page Performance

INFO[0012] Tested URL: /collections/performance-fabrics.html source=console running (00m11.5s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m11.4s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 5.0 MB 439 kB/s

data_sent..................: 2.8 kB 244 B/s

http_req_blocked...........: min=4.43µs med=4.84µs avg=16.87µs max=241.13µs p(95)=18.26µs

http_req_connecting........: min=0s med=0s avg=9.42µs max=188.41µs p(95)=9.42µs

http_req_duration..........: min=336.15ms med=354.05ms avg=370.79ms max=594.44ms p(95)=449.83ms

http_req_receiving.........: min=1.53ms med=2.17ms avg=3.01ms max=10.79ms p(95)=5.84ms

http_req_sending...........: min=22.52µs med=25.21µs avg=28.83µs max=84.56µs p(95)=44.09µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=334.07ms med=351.95ms avg=367.75ms max=583.62ms p(95)=447.09ms

http_reqs..................: 20 1.741933/s

iteration_duration.........: min=123.48µs med=552.87ms avg=519.47ms max=795.11ms p(95)=640.39ms

Result:

min: 334 ms

med: 351 ms

avg: 367 ms

max: 587 ms

percentile 96: 447 ms

Magento 2 Category Profiling

Timeline:

Magento 1 Category Page performance

Tested URL: /sale.html source=console running (00m05.8s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.8s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 1.1 MB 193 kB/s

data_sent..................: 2.4 kB 405 B/s

http_req_blocked...........: min=4.45µs med=5.09µs avg=18.49µs max=269.66µs p(95)=20.15µs

http_req_connecting........: min=0s med=0s avg=10.12µs max=202.58µs p(95)=10.12µs

http_req_duration..........: min=86.4ms med=89.16ms avg=89.11ms max=92.51ms p(95)=91.73ms

http_req_receiving.........: min=1.68ms med=1.78ms avg=1.99ms max=3ms p(95)=2.8ms

http_req_sending...........: min=20.11µs med=24.27µs avg=26.72µs max=70.61µs p(95)=40.56µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=84.68ms med=86.85ms avg=87.1ms max=90.62ms p(95)=89.93ms

http_reqs..................: 20 3.421097/s

iteration_duration.........: min=134.45µs med=289.46ms avg=263.37ms max=293.04ms p(95)=292.24ms

Results:

min: 84.68 ms

med: 86.85 ms

avg: 87.1 ms

max: 9.62 ms

percentile 95: 89.93 ms

Magento 1 Category Page profiling

Timeline:

Magento 2 Layered Navigation Performace

M2 has an Elastic Search. Many folks think it kan M2 faster and will fix Magento 2 performance issue. Let’s check it!

Tested URL: /collections/performance-fabrics.html?size=168 source=console running (00m16.2s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m16.1s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 4.8 MB 298 kB/s

data_sent..................: 3.0 kB 185 B/s

http_req_blocked...........: min=4.5µs med=5.08µs avg=18.94µs max=275.28µs p(95)=20.35µs

http_req_connecting........: min=0s med=0s avg=10.55µs max=211.12µs p(95)=10.55µs

http_req_duration..........: min=554.32ms med=578.73ms avg=605.73ms max=753.67ms p(95)=733.79ms

http_req_receiving.........: min=2.33ms med=3.75ms avg=4.72ms max=15.28ms p(95)=8.49ms

http_req_sending...........: min=21.48µs med=24.83µs avg=27.89µs max=80.98µs p(95)=38.22µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=551.84ms med=575.74ms avg=600.97ms max=738.36ms p(95)=729.49ms

http_reqs..................: 20 1.237863/s

iteration_duration.........: min=131.53µs med=776.99ms avg=733.08ms max=954.79ms p(95)=931.66ms

Results:

min: 551.84 ms

med: 575.74 ms

avg: 600.97 ms

max: 738.56 ms

percentile 95: 729.29 ms

As I can see, Magento 2 with elastic search given slower than with MySQL search

Magento 1 Layered Navigation filter

Tested URL: /men/new-arrivals.html?size=80 source=console running (00m05.6s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.6s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 916 kB 162 kB/s

data_sent..................: 2.8 kB 490 B/s

http_req_blocked...........: min=4.9µs med=5.41µs avg=19.62µs max=279.81µs p(95)=27.91µs

http_req_connecting........: min=0s med=0s avg=11.16µs max=223.37µs p(95)=11.16µs

http_req_duration..........: min=75.81ms med=80.27ms avg=80.5ms max=89.57ms p(95)=89.3ms

http_req_receiving.........: min=1.63ms med=1.81ms avg=2.3ms max=6.55ms p(95)=3.31ms

http_req_sending...........: min=20.48µs med=24.21µs avg=28.1µs max=83.06µs p(95)=40.7µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=73.98ms med=78.08ms avg=78.17ms max=87.75ms p(95)=82.95ms

http_reqs..................: 20 3.540966/s

iteration_duration.........: min=192.39µs med=280.36ms avg=255.62ms max=290.22ms p(95)=289.51ms

iterations.................: 20 3.540966/s

vus........................: 1 min=1 max=1

vus_max....................: 1 min=1 max=1

Result:

min: 73.98 ms

med: 78.08 ms

avg: 78.17 ms

max: 67.75 ms

percentile 95: 82 ms

Magento 1 is the same fast.

Magento 2 Search Performance

Tested URL: /catalogsearch/result/?q=shirt source=console running (00m10.7s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m10.6s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 2.2 MB 201 kB/s

data_sent..................: 2.7 kB 249 B/s

http_req_blocked...........: min=4.61µs med=5.18µs avg=19.08µs max=275.19µs p(95)=22.91µs

http_req_connecting........: min=0s med=0s avg=10.87µs max=217.57µs p(95)=10.87µs

http_req_duration..........: min=299.96ms med=321.33ms avg=330.51ms max=428.45ms p(95)=367.26ms

http_req_receiving.........: min=2.59ms med=5.06ms avg=5.59ms max=14.12ms p(95)=8.35ms

http_req_sending...........: min=22.6µs med=25.04µs avg=28.03µs max=83.85µs p(95)=32.11µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=294.18ms med=314.65ms avg=324.88ms max=422.23ms p(95)=363.49ms

http_reqs..................: 20 1.8725/s

iteration_duration.........: min=137.72µs med=520.42ms avg=482.88ms max=628.99ms p(95)=564.3ms

Results:

min: 294.18 ms

med: 314.65 ms

avg: 324.88 ms

max: 422.23 ms

percentile 95: 363.49 ms

Magento 1 Search Performance

Tested URL: catalogsearch/result/?q=shirt source=console running (00m05.7s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.6s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 1.0 MB 177 kB/s

data_sent..................: 2.8 kB 486 B/s

http_req_blocked...........: min=4.22µs med=5.32µs avg=20.14µs max=292.68µs p(95)=28.5µs

http_req_connecting........: min=0s med=0s avg=11.37µs max=227.52µs p(95)=11.37µs

http_req_duration..........: min=76.46ms med=80.42ms avg=81.34ms max=93.46ms p(95)=88.18ms

http_req_receiving.........: min=1.43ms med=1.85ms avg=2.38ms max=8.53ms p(95)=3.09ms

http_req_sending...........: min=20.53µs med=24.23µs avg=27.46µs max=91.12µs p(95)=33.37µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=74.7ms med=78.59ms avg=78.93ms max=86.16ms p(95)=84.96ms

http_reqs..................: 20 3.512274/s

iteration_duration.........: min=138.06µs med=280.71ms avg=256.34ms max=294.02ms p(95)=289.05ms

Result:

min: 74.7 ms

med: 78.59 ms

avg: 78.93 ms

max: 86.16 ms

percentile 95: 84.96 ms

Magento 2 Product Page Simple Performance, PDP

Tested URL: /didi-sport-watch.html source=console running (00m09.2s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m09.2s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 1.2 MB 133 kB/s

data_sent..................: 2.5 kB 271 B/s

http_req_blocked...........: min=4.69µs med=5.27µs avg=19.08µs max=279.47µs p(95)=22.47µs

http_req_connecting........: min=0s med=0s avg=10.07µs max=201.47µs p(95)=10.07µs

http_req_duration..........: min=248.29ms med=251.61ms avg=260.13ms max=408.41ms p(95)=268.09ms

http_req_receiving.........: min=937.24µs med=1.17ms avg=1.59ms max=4.12ms p(95)=3.8ms

http_req_sending...........: min=22.03µs med=24.65µs avg=28.83µs max=94.81µs p(95)=33.45µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=247.29ms med=250.14ms avg=258.51ms max=407.23ms p(95)=266.33ms

http_reqs..................: 20 2.165153/s

iteration_duration.........: min=121.41µs med=451.88ms avg=418.87ms max=608.98ms p(95)=461.11ms

Result:

min: 247.29 ms

med: 250.14 ms

avg: 258.51 ms

max: 407.23 ms

percentile 95: 266.33 ms

Magento 2 Product Page Profiling

Product Profiling Timeline

Magento 1 Product Page Simple Performance, PDP

Tested URL: /accessories/jewelry/swing-time-earrings.html source=console running (00m05.5s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.5s/10m0s 20/20 shared iters █ teardown █ setup data_received..............: 596 kB 109 kB/s

data_sent..................: 3.1 kB 559 B/s

http_req_blocked...........: min=4.29µs med=4.97µs avg=18.73µs max=277.13µs p(95)=20.98µs

http_req_connecting........: min=0s med=0s avg=10.97µs max=219.57µs p(95)=10.97µs

http_req_duration..........: min=68.23ms med=71.41ms avg=71.94ms max=82.54ms p(95)=76.4ms

http_req_receiving.........: min=105.36µs med=136.39µs avg=147.06µs max=283.22µs p(95)=212.9µs

http_req_sending...........: min=20.91µs med=24.75µs avg=26.95µs max=74.27µs p(95)=31.2µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=68.08ms med=71.24ms avg=71.77ms max=82.33ms p(95)=76.23ms

http_reqs..................: 20 3.64619/s

iteration_duration.........: min=129.95µs med=271.48ms avg=247.8ms max=283.53ms p(95)=276.53ms

Result:

min: 68.08 ms

med: 71.24 ms

avg: 71.77 ms

max: 82.33 ms

percentile 95: 76.23 ms

Magento 1 Product page profiling

Timeline:

Magento 2 Product Page

Configurable Performance, PDP

Tested URL: /breathe-easy-tank.html source=console running (00m10.1s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m10.1s/10m0s 20/20 shared iters █ teardown █ setup data_received..............: 2.0 MB 199 kB/s

data_sent..................: 2.5 kB 250 B/s

http_req_blocked...........: min=4.4µs med=5.32µs avg=18.57µs max=266.56µs p(95)=20.65µs

http_req_connecting........: min=0s med=0s avg=9.81µs max=196.39µs p(95)=9.81µs

http_req_duration..........: min=288.19ms med=291.82ms avg=303.09ms max=407.24ms p(95)=401.23ms

http_req_receiving.........: min=1.03ms med=1.25ms avg=1.8ms max=4.59ms p(95)=4.15ms

http_req_sending...........: min=16.37µs med=24.51µs avg=28.34µs max=105.38µs p(95)=31.16µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=286.83ms med=290.38ms avg=301.26ms max=404.98ms p(95)=399.89ms

http_reqs..................: 20 1.977375/s

iteration_duration.........: min=125.08µs med=491.78ms avg=457.91ms max=608.37ms p(95)=596.23ms

iterations.................: 20 1.977375/s

Result:

min: 286.83 ms

med: 290.38 ms

avg: 301.26 ms

max: 404.98 ms

percentile 95: 399.89 ms

What’s interesting 404 ms is the max time. It is the product's load the first time when the price cache is not generated. So, on production and in real-time page generation of the Magento even worse.

Magento 1 Product Page

Configurable Performance, PDP

Tested URL: /men/shirts/plaid-cotton-shirt-476.html source=console running (00m05.9s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.9s/10m0s 20/20 shared iters █ teardown █ setup data_received..............: 977 kB 166 kB/s

data_sent..................: 3.0 kB 502 B/s

http_req_blocked...........: min=4.17µs med=5.03µs avg=18.47µs max=272.98µs p(95)=19.21µs

http_req_connecting........: min=0s med=0s avg=10.71µs max=214.25µs p(95)=10.71µs

http_req_duration..........: min=87.32ms med=91.04ms avg=92.01ms max=100.35ms p(95)=98.23ms

http_req_receiving.........: min=1.6ms med=1.82ms avg=2.11ms max=3.15ms p(95)=3.08ms

http_req_sending...........: min=21.88µs med=24.44µs avg=27µs max=77.61µs p(95)=29.31µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=85.58ms med=88.93ms avg=89.87ms max=98.42ms p(95)=95.44ms

http_reqs..................: 20 3.404569/s

iteration_duration.........: min=128.86µs med=291.26ms avg=266.04ms max=301.31ms p(95)=298.75ms

iterations.................: 20 3.404569/s

Result:

min: 85.58 ms

med: 88.93 ms

avg: 89.87 ms

max: 98.42 ms

percentile 95: 95.44 ms

Magento 2 CMS Page Hello World TEST

I don’t have time to create a separate Hellow World page we will use the default Customer-service text. Basically, it is the same, just a simple CMS page without heavy eCommerce functionality.

Tested URL: /customer-service source=console running (00m07.3s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m07.3s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 712 kB 97 kB/s

data_sent..................: 2.4 kB 328 B/s

http_req_blocked...........: min=4.58µs med=5.28µs avg=19.09µs max=279.85µs p(95)=20.35µs

http_req_connecting........: min=0s med=0s avg=10.1µs max=202.11µs p(95)=10.1µs

http_req_duration..........: min=157.49ms med=159.28ms avg=164.45ms max=261.55ms p(95)=167.27ms

http_req_receiving.........: min=682.58µs med=829.21µs avg=1ms max=2.44ms p(95)=1.92ms

http_req_sending...........: min=22.41µs med=24.03µs avg=28.26µs max=89.67µs p(95)=43.27µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=156.45ms med=158.28ms avg=163.41ms max=260.65ms p(95)=165.39ms

http_reqs..................: 20 2.727626/s

iteration_duration.........: min=132.59µs med=359.65ms avg=331.88ms max=462.15ms p(95)=362.75ms

Result:

min: 156.45 ms

med: 158.28 ms

avg: 163.41 ms

max: 260.65 ms

percentile 95: 165.39 ms

Magento 1 CMS Page Hello World TEST

Tested URL: /customer-service/ source=console running (00m04.6s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m04.6s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 508 kB 111 kB/s

data_sent..................: 2.5 kB 550 B/s

http_req_blocked...........: min=4.1µs med=4.62µs avg=19.4µs max=294.12µs p(95)=22.42µs

http_req_connecting........: min=0s med=0s avg=11.75µs max=235.08µs p(95)=11.75µs

http_req_duration..........: min=25.51ms med=26.4ms avg=26.8ms max=35.02ms p(95)=28.29ms

http_req_receiving.........: min=104.98µs med=122.53µs avg=126.24µs max=150.45µs p(95)=149.98µs

http_req_sending...........: min=21.74µs med=23.58µs avg=26.72µs max=72.4µs p(95)=37.77µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=25.36ms med=26.26ms avg=26.65ms max=34.8ms p(95)=28.13ms

http_reqs..................: 20 4.35159/s

iteration_duration.........: min=120.2µs med=226.85ms avg=206.71ms max=235.96ms p(95)=228.41ms

Result:

min: 25.36 ms

med: 26.26 ms

avg: 26.65 ms

max: 34.8 ms

percentile 95: 28.13 ms

As we can see, Magento 2 bicycle is 6 times slower than M1!

Magento 1 Rest API performance

Tested URL: /api/rest/products source=console running (00m04.2s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m04.2s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 4.1 kB 976 B/s

data_sent..................: 2.5 kB 596 B/s

http_req_blocked...........: min=4.3µs med=4.98µs avg=18.99µs max=282.93µs p(95)=20.66µs

http_req_connecting........: min=0s med=0s avg=11.25µs max=225.17µs p(95)=11.25µs

http_req_duration..........: min=8.87ms med=8.98ms avg=9.27ms max=14.86ms p(95)=9.42ms

http_req_receiving.........: min=62.18µs med=71.55µs avg=74.21µs max=95.97µs p(95)=93.43µs

http_req_sending...........: min=17.78µs med=24.8µs avg=28.45µs max=83.22µs p(95)=43.97µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=8.77ms med=8.87ms avg=9.17ms max=14.68ms p(95)=9.32ms

http_reqs..................: 20 4.719071/s

iteration_duration.........: min=127.86µs med=209.53ms avg=190.79ms max=215.93ms p(95)=209.67ms

Result:

min: 8.77 ms

med: 8.87 ms

avg: 9.17 ms

max: 14.68 ms

percentile 95: 9.32 ms

Magento 2 Rest API performance

Tested URL: /rest/default/V1/products source=console running (00m05.5s), 0/1 VUs, 20 complete and 0 interrupted iterations

default ✓ [======================================] 1 VUs 00m05.5s/10m0s 20/20 shared iters █ setup █ teardown data_received..............: 11 kB 2.1 kB/s

data_sent..................: 2.6 kB 466 B/s

http_req_blocked...........: min=4.6µs med=5.23µs avg=18.26µs max=261.08µs p(95)=19.86µs

http_req_connecting........: min=0s med=0s avg=10.21µs max=204.24µs p(95)=10.21µs

http_req_duration..........: min=71.31ms med=73.16ms avg=73.64ms max=84.71ms p(95)=75.43ms

http_req_receiving.........: min=69.61µs med=81.48µs avg=80.8µs max=98.23µs p(95)=94.85µs

http_req_sending...........: min=22.26µs med=24.36µs avg=28.21µs max=80.57µs p(95)=41.73µs

http_req_tls_handshaking...: min=0s med=0s avg=0s max=0s p(95)=0s

http_req_waiting...........: min=71.2ms med=73.05ms avg=73.53ms max=84.54ms p(95)=75.31ms

http_reqs..................: 20 3.629461/s

iteration_duration.........: min=124.28µs med=273.55ms avg=249.38ms max=285.87ms p(95)=275.51ms

Result:

min: 71.2 ms

med: 73.05 ms

avg: 73.53 ms

max: 84.54 ms

percentile 95: 75.31 ms

Why Magento2 is so slow and broken?

Check the Magento 2 bootstrap graph.

Just To load “Hello Wold” it needs to load 100 MB of PHP code and execute millions of lines of dummy code.

Magento 2 PHP code execution times vs I/O operations (Database/Redis/File) is ~ 10 : 1. It is not acceptable for modern web app frameworks. To load a 1 ms SQL query you need to spend 10ms on PHP post and prefprcessing. It is just awful...

Magento 2 Frontend performance, Lighthouse

Magento JS bundling is disabled to improve performance

Mobile:

Result: 36

Desktop:

Result: 69

Magento 1 Frontend performance, Lighthouse

Mobile:

Result: 100

Desktop:

Result: 100

No comments. Magento 2 has broken the Backend and also broken UI Frontend performance. That’s why Magento guys chose to build a custom solution around it without using its core components:

Example of such projects:

Vue Storefront — PWA and headless approach, using a modern JS stack

Hyva — Magento 2 frontend that is good (https://hyva.io/)

— Magento 2 frontend that is good (https://hyva.io/) React Opcache GUI — Magento less backend UI (https://github.com/Genaker/Magento2OPcacheGUI)

— Magento less backend UI (https://github.com/Genaker/Magento2OPcacheGUI) React Storefront (https://www.reactstorefront.io/) The fastest PWA for Magento

(https://www.reactstorefront.io/) The fastest PWA for Magento Magento 2 React UI Components — (https://github.com/Genaker/reactmagento2)

— (https://github.com/Genaker/reactmagento2) If you know a similar solution, email me (egorshitikov@gmail.com)

Magento 2 is completely broken both UI and PHP Framework, and without a custom solution, it doesn’t float. Avoid it at all costs! Use and invest in the custom solutions created by the community!

Performance Pivot Table

+----------------------+-------------+-------------+

| | Magento 2.4 | Magento 1.9 |

+----------------------+-------------+-------------+

| Simple Product | 266.33 | 76.23 |

+----------------------+-------------+-------------+

| Configurable Product | 399.89 | 95.44 |

+----------------------+-------------+-------------+

| Category | 447 | 89.93 |

+----------------------+-------------+-------------+

| CMS Page | 165.39 | 28.13 |

+----------------------+-------------+-------------+

| Filter Products | 729.29 | 82 |

+----------------------+-------------+-------------+

| Search | 363.49 | 84.96 |

+----------------------+-------------+-------------+

| Rest API | 75.31 | 9.32 |

+----------------------+-------------+-------------+

Magento 2 .4 vs Magento 1 Performance Chart

So, Magento 2 performance is 6–20 times slower than its previous version Magento 1. Magento 1 is still the best eCommerce on the market and is the better version of Magento 2.

Erwing Hofman (https://www.linkedin.com/in/erwinhofman/ — Helps your shop + team to improve pagespeed (3G-5G) since 2004 📱🖥️ prepare for Web Vitals ranking update) shared this uses case about M1 to M2 migration performance.

Note: it is just a core performance test without customization. After customizations and other issues: Extensions, Magento Cloud hosting, 1-st party customizations, Non-optimistic session Locking,+AJAX requests, Have and broken Crons, Indexers, async operations etc. Magento 2 performance will be much, much worse…

My Previous Post about M2.3 v M1.9 performance: