Adobe Magento 2.4+ vs OpenMage (Magento 1.9 Open Source) Performance 2021

Yegor Shytikov
The Startup
Published in
12 min readDec 16, 2020

--

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.

Read why AWS single threaded Graviton 2 server with 64 CPUs is 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:

  1. Category page, PLP
  2. Filter Layered Navigation
  3. Search “Shirt”
  4. Product Page Simple, PDP
  5. Product Page Configurable
  6. Test Empty CMS page — “Hello World!” test
  7. 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=consolerunning (00m11.5s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m11.4s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m05.8s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.8s/10m0s 20/20 shared iters
█ setup█ teardowndata_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.4 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=consolerunning (00m16.2s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m16.1s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m05.6s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.6s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m10.7s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m10.6s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m05.7s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.6s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m09.2s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m09.2s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m05.5s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.5s/10m0s 20/20 shared iters
█ teardown█ setupdata_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=consolerunning (00m10.1s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m10.1s/10m0s 20/20 shared iters
█ teardown█ setupdata_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=consolerunning (00m05.9s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.9s/10m0s 20/20 shared iters
█ teardown█ setupdata_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=consolerunning (00m07.3s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m07.3s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m04.6s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m04.6s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m04.2s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m04.2s/10m0s 20/20 shared iters
█ setup█ teardowndata_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=consolerunning (00m05.5s), 0/1 VUs, 20 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m05.5s/10m0s 20/20 shared iters
█ setup█ teardowndata_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:

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:

--

--

Yegor Shytikov
The Startup

True Stories about Magento 2. Melting down metal server infrastructure into cloud solutions.