Open Source Ecommerce Platforms Comparison Part 2 — Performance and Extensibility [Summer 2020]

Vendure.io

  1. Create a Heroku project.
  2. Add ROOT_URL.
  3. Add MySQL or Postgres as add-ons.
  4. Set an environment at Heroku.
  5. Add the heroku-nodejs package-builder.
  6. Deploy Vendure.io to Heroku.

Extensibility

  • AdminUiPlugin: Bundles a default build of the Vendure Admin UI and serves it when the server is started.
  • AssetServerPlugin: Stores and serves assets from the local file system, and can perform on-the-fly image transformations.
  • ElasticsearchPlugin: Allows your product search to be powered by Elasticsearch — a powerful Open Source search engine.
  • EmailPlugin: Creates and sends transactional emails based on Vendure events.

Performance

====================
benchmark: query-comparison
--------------------
candidate: getproduct on getproduct at https://vendure-monte.herokuapp.com/
++++++++++++++++++++
400Req/s Duration:60s open connections:20
Running 1m test @ https://vendure-monte.herokuapp.com/
8 threads and 20 connections
Thread calibration: mean lat.: 4042.597ms, rate sampling interval: 13705ms
Thread calibration: mean lat.: 4094.949ms, rate sampling interval: 13828ms
Thread calibration: mean lat.: 4091.316ms, rate sampling interval: 13787ms
Thread calibration: mean lat.: 4118.664ms, rate sampling interval: 13975ms
Thread calibration: mean lat.: 4097.844ms, rate sampling interval: 13844ms
Thread calibration: mean lat.: 4126.541ms, rate sampling interval: 14090ms
Thread calibration: mean lat.: 4144.684ms, rate sampling interval: 14057ms
Thread calibration: mean lat.: 4125.240ms, rate sampling interval: 14008ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 26.24s 11.43s 47.42s 58.47%
Req/Sec 10.12 0.88 11.00 100.00%
5095 requests in 1.00m, 1.94MB read
Non-2xx or 3xx responses: 5095
Requests/sec: 84.89
Transfer/sec: 33.07KB
====================
benchmark: query-comparison
--------------------
candidate: getProducts on getProducts at https://vendure-monte.herokuapp.com/
++++++++++++++++++++
400Req/s Duration:60s open connections:20
Running 1m test @ https://vendure-monte.herokuapp.com/
8 threads and 20 connections
Thread calibration: mean lat.: 4112.211ms, rate sampling interval: 13819ms
Thread calibration: mean lat.: 4120.182ms, rate sampling interval: 13860ms
Thread calibration: mean lat.: 4150.881ms, rate sampling interval: 13852ms
Thread calibration: mean lat.: 4142.507ms, rate sampling interval: 14016ms
Thread calibration: mean lat.: 4166.577ms, rate sampling interval: 13910ms
Thread calibration: mean lat.: 4175.921ms, rate sampling interval: 14065ms
Thread calibration: mean lat.: 4193.582ms, rate sampling interval: 14065ms
Thread calibration: mean lat.: 4193.587ms, rate sampling interval: 14057ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 26.46s 10.76s 45.42s 58.22%
Req/Sec 12.00 0.00 12.00 100.00%
5828 requests in 1.00m, 2.22MB read
Non-2xx or 3xx responses: 5828
Requests/sec: 97.11
Transfer/sec: 37.83KB

Spree

rails new my_store
cd my_store
gem 'spree', '~> 4.1'
gem 'spree_auth_devise', '~> 4.1'
gem 'spree_gateway', '~> 3.7'
bundle install
# in case of error
bundle update
rails g spree:install --user_class=Spree::User
rails g spree:auth:install
rails g spree_gateway:install
rails g spree:install --migrate=false --sample=false --seed=false --copy_storefront=false
rails s

Extensibility

  • Support for Analytics Trackers
  • Avalara AvaTax for tax decision automation
  • Devise gem authentication services for Spree
  • Paypal Express extension
  • Contact Us form
  • Extension enabling downloadable products
  • Payment Gateways

Performance

wrk -t12 -c400 -d30s -H "X-Spree-Token: 6e332be3b4fffb003a88ee88c1c9036c8b041147c5e7a0e4" https://spree-e-commerce.herokuapp.com/api/v2/products/1
Running 30s test @ https://spree-e-commerce.herokuapp.com/api/v2/products/1
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 512.14ms 52.55ms 711.39ms 76.98%
Req/Sec 44.49 29.71 150.00 65.88%
13747 requests in 30.10s, 6.17MB read
Socket errors: connect 158, read 0, write 0, timeout 0
Requests/sec: 456.67
Transfer/sec: 210.05KB
wrk -t12 -c400 -d30s -H "X-Spree-Token: 6e332be3b4fffb003a88ee88c1c9036c8b041147c5e7a0e4" https://spree-e-commerce.herokuapp.com/api/v2/products/
Running 30s test @ https://spree-e-commerce.herokuapp.com/api/v2/products/
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 428.17ms 31.38ms 514.23ms 88.02%
Req/Sec 51.48 30.98 171.00 61.30%
16448 requests in 30.10s, 7.33MB read
Socket errors: connect 158, read 0, write 0, timeout 0
Requests/sec: 546.45
Transfer/sec: 249.21KB

Saleor

ALLOWED_CLIENT_HOSTS=.ecommerce-saleor-dashboard.herokuapp.com
ALLOWED_HOSTS=.ecommerce-saleor-dashboard.herokuapp.com, .ecommerce-saleor.herokuapp.com
DEBUG=False (DEBUG=True by default)
API_URI=https://ecommerce-saleor.herokuapp.com/graphql/

Extensibility

Performance

====================
benchmark: One product
--------------------
candidate: OneProduct on python-graphene at https://ecommerce-saleor.herokuapp.com/graphql/
++++++++++++++++++++
400Req/s Duration:60s open connections:20
Running 1m test @ https://ecommerce-saleor.herokuapp.com/graphql/
8 threads and 20 connections
Thread calibration: mean lat.: 5312.195ms, rate sampling interval: 15056ms
Thread calibration: mean lat.: 5316.608ms, rate sampling interval: 14991ms
Thread calibration: mean lat.: 5187.398ms, rate sampling interval: 14991ms
Thread calibration: mean lat.: 5200.366ms, rate sampling interval: 14942ms
Thread calibration: mean lat.: 5235.184ms, rate sampling interval: 14983ms
Thread calibration: mean lat.: 5153.267ms, rate sampling interval: 14794ms
Thread calibration: mean lat.: 5154.761ms, rate sampling interval: 14934ms
Thread calibration: mean lat.: 5249.303ms, rate sampling interval: 15040ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 27.40s 11.12s 46.37s 57.64%
Req/Sec 11.29 0.45 12.00 100.00%
5526 requests in 1.00m, 2.55MB read
Socket errors: connect 0, read 0, write 0, timeout 16
Non-2xx or 3xx responses: 5526
Requests/sec: 92.07
Transfer/sec: 43.42KB
====================
benchmark: All products
--------------------
candidate: AllProducts on python-graphene at https://ecommerce-saleor.herokuapp.com/graphql/
++++++++++++++++++++
400Req/s Duration:60s open connections:20
Running 1m test @ https://ecommerce-saleor.herokuapp.com/graphql/
8 threads and 20 connections
Thread calibration: mean lat.: 3983.652ms, rate sampling interval: 13484ms
Thread calibration: mean lat.: 4041.357ms, rate sampling interval: 13737ms
Thread calibration: mean lat.: 4137.041ms, rate sampling interval: 13852ms
Thread calibration: mean lat.: 4095.248ms, rate sampling interval: 13754ms
Thread calibration: mean lat.: 3972.554ms, rate sampling interval: 13467ms
Thread calibration: mean lat.: 4081.227ms, rate sampling interval: 13778ms
Thread calibration: mean lat.: 4024.856ms, rate sampling interval: 13524ms
Thread calibration: mean lat.: 4075.532ms, rate sampling interval: 13688ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 26.23s 10.91s 45.45s 57.57%
Req/Sec 11.88 0.33 12.00 100.00%
5900 requests in 1.00m, 3.81MB read
Non-2xx or 3xx responses: 5900
Requests/sec: 98.31
Transfer/sec: 64.99KB

Summary

--

--

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
Monterail

Monterail

508 Followers

A close-knit team of 170+ experts offering Web & mobile development for startups and businesses.