A year after, it was time to update benchmarks, .NET Core had many performance improvements over the last year, good job Microsoft's Net Core team and the Open source community

Former-commit-id: 4f04c1a0322520ccd45f56138e8db273c8519e07
This commit is contained in:
Gerasimos (Makis) Maropoulos 2018-10-22 13:52:31 +03:00
parent 5849c77178
commit 7c5f7f42cf
43 changed files with 402 additions and 453 deletions

View File

@ -22,9 +22,9 @@ $ go get -u github.com/kataras/iris
Iris takes advantage of the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature. You get truly reproducible builds, as this method guards against upstream renames and deletes. Iris takes advantage of the [vendor directory](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo) feature. You get truly reproducible builds, as this method guards against upstream renames and deletes.
[![Iris vs .NET Core(C#) vs Node.js (Express)](https://iris-go.com/images/benchmark-new-gray.png)](_benchmarks/README_UNIX.md) [![Iris vs .NET Core(C#) vs Node.js (Express)](_benchmarks/benchmarks_graph_22_october_2018_gray.png)](_benchmarks/README.md)
_Updated at: [Tuesday, 21 November 2017](_benchmarks/README_UNIX.md)_ _Updated at: [Monday, 22 October 2018](_benchmarks/README.md)_
<details> <details>
<summary>Benchmarks from third-party source over the rest web frameworks</summary> <summary>Benchmarks from third-party source over the rest web frameworks</summary>

View File

@ -1,14 +1,55 @@
# Benchmarks: Monday, 22 October 2018
![](benchmarks_graph_22_october_2018.png)
## Hardware ## Hardware
* Processor: Intel(R) Core(TM) **i7-4710HQ** CPU @ 2.50GHz 2.50GHz ![hardware screen](screens/hardware_win.png)
* RAM: **8.00 GB**
## Software ## Software
* OS: Microsoft **Windows** [Version **10**.0.15063], power plan is "High performance" * OS: Microsoft **Windows 10** [Version 1803 (OS Build 17134.345)]
* HTTP Benchmark Tool: https://github.com/codesenberg/bombardier, latest version **1.1** * HTTP Benchmark Tool: https://github.com/codesenberg/bombardier, latest version **1.2.0**
* **.NET Core**: https://www.microsoft.com/net/core, latest version **2.0** * **Iris [Go]**: https://github.com/kataras/iris, latest version **11.0.0** built with [go1.11.1](https://golang.org)
* **Iris**: https://github.com/kataras/iris, latest version **8.3** built with [go1.8.3](https://golang.org) * **.NET Core (both Kestrel & MVC) [C#]**: https://www.microsoft.com/net/core, latest version **2.1.5**
* **Node.js (express + throng) [Javascript]**: https://nodejs.org/, latest version **10.12.0**, express: https://github.com/expressjs/express latest version **4.16.4** and [throng](https://www.npmjs.com/package/throng) latest version **4.0.0**
## Results
* Throughput - `how much data transferred per second`.
* Reqs/sec (Requests Per Second in Average) - `the highest the better, important`.
* Latency - `the smallest the better, important`.
* Time To Complete - `the smallest the better, important`.
| Name | Throughput | Reqs/sec | Latency | Time To Complete | Total Requests |
|-------|:-----------|:--------|:-------------|---------|------|
| Iris | 24.41MB/s | **131268** | **0.95ms** | **7s** | 1000000 |
| .NET Core (Kestrel) | 19.95MB/s | 110150 | 1.13ms | 9s | 1000000 |
| Expressjs| 18.60MB/s | 70352 | 1.80ms | 14s | 1000000 |
| Iris with Sessions | 25.32MB/s | **82477** | **1.53ms** | **1m1s** | 5000000 |
| .NET Core (Kestrel) with Sessions | 28.45MB/s | 61946 | 2.06ms | 1m1s | 5000000 |
| Expressjs with Sessions | 12.81MB/s | 46962 | 2.53mss | 1m42s | 5000000 |
| Iris MVC | 21.27MB/s | **114378** | **1.09ms** | **43s** | 5000000 |
| .Net Core MVC | 18.19MB/s | 82608 | 1.51ms | 1m | 5000000 |
| Expressjs MVC | - | - | - | - | - |
| Iris MVC with Templates | 306.60MB/s | **42501** | **2.94ms** | **23s** | 1000000 |
| .Net Core MVC with Templates | 188.01MB/s | 26051 | 4.78ms | 38s | 1000000 |
| Expressjs MVC with Templates | - | - | - | - | - |
Go ahead and read the rest of the page to learn how you can reproduce the benchmarks. Don't be afraid! It's actually very easy, you can do things like that as well!
## Old results (August of 2017)
**Go vs .NET Core in terms of HTTP performance (Sa, 19 August 2017)**
- https://medium.com/@kataras/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8
- https://dev.to/kataras/go-vsnet-core-in-terms-of-http-performance
**Iris Go vs .NET Core Kestrel in terms of HTTP performance (Mo, 21 August 2017)**
- https://medium.com/@kataras/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5
**Thank you all** for the 100% green feedback, have fun!
# .NET Core MVC vs Iris MVC # .NET Core MVC vs Iris MVC
@ -22,7 +63,7 @@ We will compare two identical things here, in terms of application, the expected
```bash ```bash
$ cd netcore-mvc $ cd netcore-mvc
$ dotnet run -c Release $ dotnet run --urls=http://localhost:5000 -c Release
Hosting environment: Production Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -31,16 +72,16 @@ Application started. Press Ctrl+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5 $ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 requests using 125 connections Bombarding http://localhost:5000/api/values/5 with 5000000 request(s) using 125 connection(s)
5000000 / 5000000 [=====================================================================================] 100.00% 2m3s 5000000 / 5000000 [=====================================================================================] 100.00% 1m0s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 40226.03 8724.30 161919 Reqs/sec 82608.44 4072.64 96896.66
Latency 3.09ms 1.40ms 169.12ms Latency 1.51ms 255.49us 235.36ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 8.91MB/s Throughput: 18.19MB/s
``` ```
### Iris MVC ### Iris MVC
@ -54,16 +95,16 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5 $ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 requests using 125 connections Bombarding http://localhost:5000/api/values/5 with 5000000 request(s) using 125 connection(s)
5000000 / 5000000 [======================================================================================] 100.00% 47s 5000000 / 5000000 [======================================================================================] 100.00% 43s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 105643.81 7687.79 122564 Reqs/sec 114378.40 5080.77 135410.87
Latency 1.18ms 366.55us 22.01ms Latency 1.09ms 26.25us 19.92ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 19.65MB/s Throughput: 21.27MB/s
``` ```
Click [here](screens) to navigate to the screenshots. Click [here](screens) to navigate to the screenshots.
@ -77,17 +118,15 @@ Click [here](screens) to navigate to the screenshots.
* Memory usage - smaller is better. * Memory usage - smaller is better.
* LOC (Lines Of Code) - smaller is better. * LOC (Lines Of Code) - smaller is better.
.NET Core MVC Application, written using 86 lines of code, ran for **2 minutes and 3 seconds** serving **40226.03** requests per second within **3.09ms** latency in average and **169.12ms** max, the memory usage of all these was ~123MB (without the dotnet host). .NET Core MVC Application, written using 86 lines of code, ran for **1 minute** serving **82608.44** requests per second within **1.51ms** latency in average and **235.36ms** max, the memory usage of all these was ~123MB (without the dotnet host).
Iris MVC Application, written using 27 lines of code, ran for **47 seconds** serving **105643.71** requests per second within **1.18ms** latency in average and **22.01ms** max, the memory usage of all these was ~12MB. Iris MVC Application, written using 27 lines of code, ran for **43 seconds** serving **114378.40** requests per second within **1.09ms** latency in average and **19.92ms** max, the memory usage of all these was ~12MB.
#### Update: 20 August 2017 #### Update: 20 August 2017 and benchmarks re-ran at 22 October 2018
As [Josh Clark](https://twitter.com/clarkis117) and [Scott Hanselman](https://twitter.com/shanselman) pointed out [on this status](https://twitter.com/shanselman/status/899005786826788865), on .NET Core MVC `Startup.cs` file the line with `services.AddMvc();` can be replaced with `services.AddMvcCore();`. I followed their helpful instructions and re-run the benchmarks. The article now contains the latest benchmark output for the .NET Core application with the change both Josh and Scott noted. As [Josh Clark](https://twitter.com/clarkis117) and [Scott Hanselman](https://twitter.com/shanselman) pointed out [on this status](https://twitter.com/shanselman/status/899005786826788865), on .NET Core MVC `Startup.cs` file the line with `services.AddMvc();` can be replaced with `services.AddMvcCore();`. I followed their helpful instructions and re-run the benchmarks. The article now contains the latest benchmark output for the .NET Core application with the change both Josh and Scott noted.
The twitter conversion: https://twitter.com/MakisMaropoulos/status/899113215895982080 The twitter conversation: https://twitter.com/MakisMaropoulos/status/899113215895982080
For those who want to compare with the standard services.AddMvc(); you can see the old output by pressing [here](screens/5m_requests_netcore-mvc.png).
## MVC + Templates ## MVC + Templates
@ -97,7 +136,7 @@ Lets run one more benchmark, spawn `1000000 requests` but this time we expect
```bash ```bash
$ cd netcore-mvc-templates $ cd netcore-mvc-templates
$ dotnet run -c Release $ dotnet run --urls=http://localhost:5000 -c Release
Hosting environment: Production Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc-templates Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc-templates
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -106,16 +145,16 @@ Application started. Press Ctrl+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 1000000 http://localhost:5000 $ bombardier -c 125 -n 1000000 http://localhost:5000
Bombarding http://localhost:5000 with 1000000 requests using 125 connections Bombarding http://localhost:5000 with 1000000 request(s) using 125 connection(s)
1000000 / 1000000 [=====================================================================================] 100.00% 1m20s 1000000 / 1000000 [======================================================================================] 100.00% 38s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 11738.60 7741.36 125887 Reqs/sec 26051.53 3256.67 42363.32
Latency 10.10ms 22.10ms 1.97s Latency 4.78ms 0.93ms 417.39ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 89.03MB/s Throughput: 188.01MB/s
``` ```
### Iris MVC with Templates ### Iris MVC with Templates
@ -129,34 +168,26 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 1000000 http://localhost:5000 $ bombardier -c 125 -n 1000000 http://localhost:5000
Bombarding http://localhost:5000 with 1000000 requests using 125 connections Bombarding http://localhost:5000 with 1000000 request(s) using 125 connection(s)
1000000 / 1000000 [======================================================================================] 100.00% 37s 1000000 / 1000000 [======================================================================================] 100.00% 23s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 26656.76 1944.73 31188 Reqs/sec 42501.30 1604.82 46023.80
Latency 4.69ms 1.20ms 22.52ms Latency 2.94ms 81.93us 24.93ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 192.51MB/s Throughput: 306.60MB/s
``` ```
### Summary ### Summary
* Time to complete the `1000000 requests` - smaller is better. .NET Core MVC with Templates Application ran for **38 seconds** serving **26051.53** requests per second with **188.01MB/s** within **4.78ms** latency in average and **417.39ms** max, the memory usage of all these was ~193MB (without the dotnet host).
* Reqs/sec - bigger is better.
* Latency - smaller is better
* Memory usage - smaller is better.
* Throughput - bigger is better.
.NET Core MVC with Templates Application ran for **1 minute and 20 seconds** serving **11738.60** requests per second with **89.03MB/s** within **10.10ms** latency in average and **1.97s** max, the memory usage of all these was ~193MB (without the dotnet host). Iris MVC with Templates Application ran for **23 seconds** serving **42501.30** requests per second with **306.60MB/s** within **2.94ms** latency in average and **24.93ms** max, the memory usage of all these was ~17MB.
Iris MVC with Templates Application ran for **37 seconds** serving **26656.76** requests per second with **192.51MB/s** within **1.18ms** latency in average and **22.52ms** max, the memory usage of all these was ~17MB.
# .NET Core (Kestrel) vs Iris # .NET Core (Kestrel) vs Iris
_Monday, 21 August 2017_
This time we will compare the speed of the “low-level” .NET Cores server implementation named Kestrel and Iris “low-level” handlers, we will test two simple applications, the first will be the same as our previous application but written using handlers and the second test will contain a single route which sets and gets a session value(string) based on a key(string). This time we will compare the speed of the “low-level” .NET Cores server implementation named Kestrel and Iris “low-level” handlers, we will test two simple applications, the first will be the same as our previous application but written using handlers and the second test will contain a single route which sets and gets a session value(string) based on a key(string).
## Simple ## Simple
@ -167,7 +198,7 @@ Spawn `1000000 requests` with 125 different "threads", targeting to a dynamic re
```bash ```bash
$ cd netcore $ cd netcore
$ dotnet run -c Release $ dotnet run --urls=http://localhost:5000 -c Release
Hosting environment: Production Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -176,16 +207,16 @@ Application started. Press Ctrl+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5 $ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 1000000 requests using 125 connections Bombarding http://localhost:5000/api/values/5 with 1000000 request(s) using 125 connection(s)
1000000 / 1000000 [======================================================================================] 100.00% 10s 1000000 / 1000000 [=======================================================================================] 100.00% 9s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 97884.57 8699.94 110509 Reqs/sec 110150.12 8195.73 122486.03
Latency 1.28ms 682.63us 61.04ms Latency 1.13ms 178.98us 81.78ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 17.73MB/s Throughput: 19.95MB/s
``` ```
### Iris ### Iris
@ -199,22 +230,22 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5 $ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 1000000 requests using 125 connections Bombarding http://localhost:5000/api/values/5 with 1000000 request(s) using 125 connection(s)
1000000 / 1000000 [=======================================================================================] 100.00% 8s 1000000 / 1000000 [=======================================================================================] 100.00% 7s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 117917.79 4437.04 125614 Reqs/sec 131268.51 5757.43 141530.72
Latency 1.06ms 278.12us 19.03ms Latency 0.95ms 62.10us 19.92ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 21.93MB/s Throughput: 24.41MB/s
``` ```
### Node.js (Express) ### Node.js (Express)
```bash ```bash
$ cd expressjs $ cd expressjs-throng
$ npm install $ npm install
$ node app.js $ node app.js
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -223,31 +254,25 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5 $ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 1000000 requests using 125 connections Bombarding http://localhost:5000/api/values/5 with 1000000 request(s) using 125 connection(s)
1000000 / 1000000 [=======================================================================================] 100.00% 1m25s 1000000 / 1000000 [======================================================================================] 100.00% 14s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 11665.30 628.41 21978 Reqs/sec 70352.00 10947.26 115334.47
Latency 10.72ms 1.45ms 112.10ms Latency 1.80ms 1.39ms 206.45ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 3.14MB/s Throughput: 18.60MB/s
``` ```
### Summary ### Summary
* Time to complete the `1000000 requests` - smaller is better. .NET Core (Kestrel) Application written using **63 code of lines** ran for **9 seconds** serving **110150.12** requests per second with **19.95MB/s** within **1.13ms** latency in average and **81.78ms** max.
* Reqs/sec - bigger is better.
* Latency - smaller is better
* Throughput - bigger is better.
* LOC (Lines Of Code) - smaller is better.
.NET Core (Kestrel) Application written using **63 code of lines** ran for **10 seconds** serving **97884.57** requests per second with **17.73MB/s** within **1.28ms** latency in average and **61.04ms** max. Iris Application written using **14 code of lines** ran for **7 seconds** serving **131268.51** requests per second with **24.41MB/s** within **0.95ms** latency in average and **19.92ms** max.
Iris Application written using **14 code of lines** ran for **8 seconds** serving **117917.79** requests per second with **21.93MB/s** within **1.06ms** latency in average and **19.03ms** max. Node.js (Express) Application written using **12 code of lines** ran for **14 seconds** serving **70352** requests per second with **18.60MB/s** within **1.80ms** latency in average and **206.45ms** max.
Node.js (Express) Application written using **12 code of lines** ran for **1 minute and 25 seconds** serving **11665.30** requests per second with **3.14MB/s** within **10.72ms** latency in average and **112.10ms** max.
## Sessions ## Sessions
@ -257,7 +282,7 @@ Spawn `5000000 requests` with 125 different "threads" targeting a static request
```bash ```bash
$ cd netcore-sessions $ cd netcore-sessions
$ dotnet run -c Release $ dotnet run --urls=http://localhost:5000 -c Release
Hosting environment: Production Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-sessions Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-sessions
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -266,16 +291,16 @@ Application started. Press Ctrl+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 5000000 http://localhost:5000/setget $ bombardier -c 125 -n 5000000 http://localhost:5000/setget
Bombarding http://localhost:5000/setget with 5000000 requests using 125 connections Bombarding http://localhost:5000/setget with 5000000 request(s) using 125 connection(s)
5000000 / 5000000 [====================================================================================] 100.00% 2m40s 5000000 / 5000000 [=====================================================================================] 100.00% 1m1s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 31844.77 13856.19 253746 Reqs/sec 61946.59 13164.30 100166.94
Latency 4.02ms 15.57ms 0.96s Latency 2.06ms 2.42ms 781.91ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 14.51MB/s Throughput: 28.45MB/s
``` ```
### Iris with Sessions ### Iris with Sessions
@ -289,22 +314,22 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 5000000 http://localhost:5000/setget $ bombardier -c 125 -n 5000000 http://localhost:5000/setget
Bombarding http://localhost:5000/setget with 5000000 requests using 125 connections Bombarding http://localhost:5000/setget with 5000000 request(s) using 125 connection(s)
5000000 / 5000000 [====================================================================================] 100.00% 1m15s 5000000 / 5000000 [=====================================================================================] 100.00% 1m1s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 66749.70 32110.67 110445 Reqs/sec 82477.76 29886.37 166399.36
Latency 1.88ms 9.13ms 1.94s Latency 1.53ms 462.79us 286.23ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 20.65MB/s Throughput: 25.32MB/s
``` ```
### Node.js (Express) with Sessions ### Node.js (Express) with Sessions
```bash ```bash
$ cd expressjs-sessions $ cd expressjs-throng-sessions
$ npm install $ npm install
$ node app.js $ node app.js
Now listening on: http://localhost:5000 Now listening on: http://localhost:5000
@ -313,42 +338,24 @@ Application started. Press CTRL+C to shut down.
```bash ```bash
$ bombardier -c 125 -n 5000000 http://localhost:5000/setget $ bombardier -c 125 -n 5000000 http://localhost:5000/setget
Bombarding http://localhost:5000/setget with 5000000 requests using 125 connections Bombarding http://localhost:5000/setget with 5000000 request(s) using 125 connection(s)
5000000 / 5000000 [====================================================================================] 100.00% 15m47s 5000000 / 5000000 [====================================================================================] 100.00% 1m42s
Done! Done!
Statistics Avg Stdev Max Statistics Avg Stdev Max
Reqs/sec 5634.27 2317.30 9945 Reqs/sec 46962.17 10028.21 104302.48
Latency 22.17ms 8.19ms 119.08ms Latency 2.53ms 1.45ms 368.01ms
HTTP codes: HTTP codes:
1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0 1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0
others - 0 others - 0
Throughput: 1.48MB/s Throughput: 12.81MB/s
``` ```
### Summary ### Summary
* Time to complete the `5000000 requests` - smaller is better. .NET Core with Sessions Application ran for **1 minute and 1 second** serving **61946.59** requests per second with **28.45MB/s** within **2.06ms** latency in average and **781.91ms** max.
* Reqs/sec - bigger is better.
* Latency - smaller is better
* Throughput - bigger is better.
.NET Core with Sessions Application ran for **2 minutes and 40 seconds** serving **31844.77** requests per second with **14.51MB/s** within **4.02ms** latency in average and **0.96s** max. Iris with Sessions Application ran for **1 minute and 1 second** serving **82477.76** requests per second with **25.32MB/s** within **1.53ms** latency in average and **286.23ms** max.
Iris with Sessions Application ran for **1 minute and 15 seconds** serving **66749.70** requests per second with **20.65MB/s** within **1.88ms** latency in average and **1.94s** max. Node.js (Express) with Sessions Application ran for **1 minute and 42 seconds** serving **46962.17** requests per second with **12.81MB/s** within **2.53ms** latency in average and **368.01ms** max.
Node.js (Express) with Sessions Application ran for **15 minutes and 47 seconds** serving **5634.27** requests per second with **1.48MB/s** within **22.17ms** latency in average and **119.08ms** max.
> Click [here](screens) to navigate to the screenshots. > Click [here](screens) to navigate to the screenshots.
### Articles
**Go vs .NET Core in terms of HTTP performance (Sa, 19 August 2017)**
- https://medium.com/@kataras/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8
- https://dev.to/kataras/go-vsnet-core-in-terms-of-http-performance
**Iris Go vs .NET Core Kestrel in terms of HTTP performance (Mo, 21 August 2017)**
- https://medium.com/@kataras/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5
**Thank you all** for the 100% green feedback, have fun!

View File

@ -1,61 +0,0 @@
![Iris vs .NET Core(C#) vs Node.js (Express)](https://iris-go.com/images/benchmark-new.png)]
## Hardware
* [Processor](screens/unix/system_info_cpu.png): Intel(R) Core(TM) **i7-4710HQ** CPU @ 2.50GHz
* [RAM](screens/unix/system_info_ram.png): **8.00 GB**
## Software
* OS: Linux **Ubuntu** [Version **17.10**] with latest kernel version **4.14.0-041400-generic x86_64 GNU/Linux**
* HTTP Benchmark Tool: https://github.com/codesenberg/bombardier, latest version **1.1**
* **Iris [Go]**: https://github.com/kataras/iris, latest version **8.5.7** built with [go1.9.2](https://golang.org)
* **.NET Core [C#]**: https://www.microsoft.com/net/core, latest version **2.0.2**
* **Node.js (express + throng) [Javascript]**: https://nodejs.org/, latest version **9.2.0**, express: https://github.com/expressjs/express latest version **4.16.0** and [throng](https://www.npmjs.com/package/throng) latest version **4.0.0**
Go ahead to the [README.md](README.md) and read how you can reproduce the benchmarks. Don't be scary it's actually very easy, you can do these things as well!
## Results
* Throughput - `bigger is better`.
* Reqs/sec (Requests Per Second in Average) - `bigger is better`.
* Latency - `smaller is better`.
* Time To Complete - `smaller is better`.
* Total Requests in this fortune are all 1 million, in order to be easier to do the graph later on.
### Native
| Name | Throughput | Reqs/sec | Latency | Time To Complete | Total Requests |
|-------|:-----------|:--------|:-------------|---------|------|
| Iris | **29.31MB/s** | 157628 | 791.58us | 6s | 1000000 |
| Kestrel | **25.28MB/s** | 139642 | 0.89ms | 7s | 1000000 |
| Node.js | **13.69MB/s** | 50907 | 2.45ms | 19s | 1000000 |
| Iris with Sessions | **22.37MB/s** | 71922 | 1.74ms | 14s | 1000000 |
| Kestrel with Sessions | **14.51MB/s** | 31102 | 4.02ms | 32s | 1000000 |
| Node.js with Sessions | **5.08MB/s** | 19358 | 6.48ms | 51s | 1000000 |
> each test has its own screenshot, click [here](screens/unix) to explore
### MVC (Model View Controller)
| Name | Throughput | Reqs/sec | Latency | Time To Complete | Total Requests |
|-------|:-----------|:--------|:-------------|---------|------|
| Iris MVC | **26.39MB/s** | 141868 | 0.88ms | 7s | 1000000 |
| .Net Core MVC | **11.99MB/s** | 54418 | 2.30ms | 18s | 1000000 |
| - | - | - | - | - | - |
| Iris MVC with Templates | **136.58MB/s** | 18933 | 6.60ms | 52s | 1000000 |
| .Net Core MVC with Templates | **88.95MB/s** | 12347 | 10.12ms | 1m21s | 1000000 |
| - | - | - | - | - | - |
> nodejs express does not contain any MVC features
### Updates
- 21 November 2017: initial run and publish
## Articles (ms windows OS)
- https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8
- https://hackernoon.com/iris-go-vs-net-core-kestrel-in-terms-of-http-performance-806195dc93d5
**Thank you all** for the 100% green feedback, have fun!

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,15 +1,15 @@
{ {
"name": "expressjs-app", "name": "expressjs-app",
"version": "1.0.0", "version": "1.0.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"accepts": { "accepts": {
"version": "1.3.4", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
"integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
"requires": { "requires": {
"mime-types": "2.1.17", "mime-types": "~2.1.18",
"negotiator": "0.6.1" "negotiator": "0.6.1"
} }
}, },
@ -19,20 +19,20 @@
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
}, },
"body-parser": { "body-parser": {
"version": "1.18.2", "version": "1.18.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
"requires": { "requires": {
"bytes": "3.0.0", "bytes": "3.0.0",
"content-type": "1.0.4", "content-type": "~1.0.4",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"http-errors": "1.6.2", "http-errors": "~1.6.3",
"iconv-lite": "0.4.19", "iconv-lite": "0.4.23",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"qs": "6.5.1", "qs": "6.5.2",
"raw-body": "2.3.2", "raw-body": "2.3.3",
"type-is": "1.6.15" "type-is": "~1.6.16"
} }
}, },
"bytes": { "bytes": {
@ -41,9 +41,9 @@
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
}, },
"clone": { "clone": {
"version": "1.0.3", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
}, },
"content-disposition": { "content-disposition": {
"version": "0.5.2", "version": "0.5.2",
@ -79,9 +79,9 @@
} }
}, },
"depd": { "depd": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
}, },
"destroy": { "destroy": {
"version": "1.0.4", "version": "1.0.4",
@ -94,9 +94,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
}, },
"encodeurl": { "encodeurl": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
}, },
"escape-html": { "escape-html": {
"version": "1.0.3", "version": "1.0.3",
@ -109,40 +109,40 @@
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
}, },
"express": { "express": {
"version": "4.16.0", "version": "4.16.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.16.0.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
"integrity": "sha1-tRljjk61jnF4yBtJjvIveYyy4lU=", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
"requires": { "requires": {
"accepts": "1.3.4", "accepts": "~1.3.5",
"array-flatten": "1.1.1", "array-flatten": "1.1.1",
"body-parser": "1.18.2", "body-parser": "1.18.3",
"content-disposition": "0.5.2", "content-disposition": "0.5.2",
"content-type": "1.0.4", "content-type": "~1.0.4",
"cookie": "0.3.1", "cookie": "0.3.1",
"cookie-signature": "1.0.6", "cookie-signature": "1.0.6",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"etag": "1.8.1", "etag": "~1.8.1",
"finalhandler": "1.1.0", "finalhandler": "1.1.1",
"fresh": "0.5.2", "fresh": "0.5.2",
"merge-descriptors": "1.0.1", "merge-descriptors": "1.0.1",
"methods": "1.1.2", "methods": "~1.1.2",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"path-to-regexp": "0.1.7", "path-to-regexp": "0.1.7",
"proxy-addr": "2.0.2", "proxy-addr": "~2.0.4",
"qs": "6.5.1", "qs": "6.5.2",
"range-parser": "1.2.0", "range-parser": "~1.2.0",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.2",
"send": "0.16.0", "send": "0.16.2",
"serve-static": "1.13.0", "serve-static": "1.13.2",
"setprototypeof": "1.1.0", "setprototypeof": "1.1.0",
"statuses": "1.3.1", "statuses": "~1.4.0",
"type-is": "1.6.15", "type-is": "~1.6.16",
"utils-merge": "1.0.1", "utils-merge": "1.0.1",
"vary": "1.1.2" "vary": "~1.1.2"
} }
}, },
"express-session": { "express-session": {
@ -154,25 +154,25 @@
"cookie-signature": "1.0.6", "cookie-signature": "1.0.6",
"crc": "3.4.4", "crc": "3.4.4",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.1",
"on-headers": "1.0.1", "on-headers": "~1.0.1",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"uid-safe": "2.1.5", "uid-safe": "~2.1.5",
"utils-merge": "1.0.1" "utils-merge": "1.0.1"
} }
}, },
"finalhandler": { "finalhandler": {
"version": "1.1.0", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
"integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "2.6.9",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"statuses": "1.3.1", "statuses": "~1.4.0",
"unpipe": "1.0.0" "unpipe": "~1.0.0"
} }
}, },
"forwarded": { "forwarded": {
@ -186,27 +186,23 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
}, },
"http-errors": { "http-errors": {
"version": "1.6.2", "version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"requires": { "requires": {
"depd": "1.1.1", "depd": "~1.1.2",
"inherits": "2.0.3", "inherits": "2.0.3",
"setprototypeof": "1.0.3", "setprototypeof": "1.1.0",
"statuses": "1.3.1" "statuses": ">= 1.4.0 < 2"
},
"dependencies": {
"setprototypeof": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
}
} }
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.19", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
}, },
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
@ -214,13 +210,13 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}, },
"ipaddr.js": { "ipaddr.js": {
"version": "1.5.2", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
"integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
}, },
"lodash": { "lodash": {
"version": "2.4.2", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
}, },
"lodash.defaults": { "lodash.defaults": {
@ -230,7 +226,7 @@
}, },
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
}, },
"merge-descriptors": { "merge-descriptors": {
@ -249,16 +245,16 @@
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
}, },
"mime-db": { "mime-db": {
"version": "1.30.0", "version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
}, },
"mime-types": { "mime-types": {
"version": "2.1.17", "version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"requires": { "requires": {
"mime-db": "1.30.0" "mime-db": "~1.37.0"
} }
}, },
"ms": { "ms": {
@ -276,14 +272,14 @@
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-3.2.1.tgz", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-3.2.1.tgz",
"integrity": "sha1-p5WNMqikLZEZziWYZWfqLF+WZ3M=", "integrity": "sha1-p5WNMqikLZEZziWYZWfqLF+WZ3M=",
"requires": { "requires": {
"clone": "1.0.3", "clone": "1.0.x",
"lodash": "4.17.4" "lodash": "4.x"
}, },
"dependencies": { "dependencies": {
"lodash": { "lodash": {
"version": "4.17.4", "version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
} }
} }
}, },
@ -311,18 +307,18 @@
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
}, },
"proxy-addr": { "proxy-addr": {
"version": "2.0.2", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
"integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
"requires": { "requires": {
"forwarded": "0.1.2", "forwarded": "~0.1.2",
"ipaddr.js": "1.5.2" "ipaddr.js": "1.8.0"
} }
}, },
"qs": { "qs": {
"version": "6.5.1", "version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}, },
"random-bytes": { "random-bytes": {
"version": "1.0.0", "version": "1.0.0",
@ -335,50 +331,55 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
}, },
"raw-body": { "raw-body": {
"version": "2.3.2", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"requires": { "requires": {
"bytes": "3.0.0", "bytes": "3.0.0",
"http-errors": "1.6.2", "http-errors": "1.6.3",
"iconv-lite": "0.4.19", "iconv-lite": "0.4.23",
"unpipe": "1.0.0" "unpipe": "1.0.0"
} }
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"send": { "send": {
"version": "0.16.0", "version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.0.tgz", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
"integrity": "sha1-FjONu5ou3krVe0hCDsO4LY6ApXs=", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"destroy": "1.0.4", "destroy": "~1.0.4",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"etag": "1.8.1", "etag": "~1.8.1",
"fresh": "0.5.2", "fresh": "0.5.2",
"http-errors": "1.6.2", "http-errors": "~1.6.2",
"mime": "1.4.1", "mime": "1.4.1",
"ms": "2.0.0", "ms": "2.0.0",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"range-parser": "1.2.0", "range-parser": "~1.2.0",
"statuses": "1.3.1" "statuses": "~1.4.0"
} }
}, },
"serve-static": { "serve-static": {
"version": "1.13.0", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.0.tgz", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
"integrity": "sha1-gQyR24AOlLoofq5rTgbKq5/cFvE=", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
"requires": { "requires": {
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"send": "0.16.0" "send": "0.16.2"
} }
}, },
"session-memory-store": { "session-memory-store": {
@ -386,8 +387,8 @@
"resolved": "https://registry.npmjs.org/session-memory-store/-/session-memory-store-0.2.2.tgz", "resolved": "https://registry.npmjs.org/session-memory-store/-/session-memory-store-0.2.2.tgz",
"integrity": "sha1-1GQ48oTPjg7RVE9v1Zk+4Ud8dlY=", "integrity": "sha1-1GQ48oTPjg7RVE9v1Zk+4Ud8dlY=",
"requires": { "requires": {
"lodash": "2.4.2", "lodash": "^2.4.2",
"node-cache": "3.2.1" "node-cache": "^3.1.0"
} }
}, },
"setprototypeof": { "setprototypeof": {
@ -396,25 +397,25 @@
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
}, },
"statuses": { "statuses": {
"version": "1.3.1", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
}, },
"throng": { "throng": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz", "resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz",
"integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=", "integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=",
"requires": { "requires": {
"lodash.defaults": "4.2.0" "lodash.defaults": "^4.0.1"
} }
}, },
"type-is": { "type-is": {
"version": "1.6.15", "version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
"requires": { "requires": {
"media-typer": "0.3.0", "media-typer": "0.3.0",
"mime-types": "2.1.17" "mime-types": "~2.1.18"
} }
}, },
"uid-safe": { "uid-safe": {
@ -422,7 +423,7 @@
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"requires": { "requires": {
"random-bytes": "1.0.0" "random-bytes": "~1.0.0"
} }
}, },
"unpipe": { "unpipe": {

View File

@ -1,6 +1,6 @@
{ {
"name": "expressjs-app", "name": "expressjs-app",
"version": "1.0.0", "version": "1.0.1",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
"scripts": { "scripts": {
@ -9,7 +9,7 @@
"author": "Gerasimos (Makis) Maropoulos <kataras2006@hotmail.com>", "author": "Gerasimos (Makis) Maropoulos <kataras2006@hotmail.com>",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"express": "^4.16.0", "express": "^4.16.4",
"express-session": "^1.15.6", "express-session": "^1.15.6",
"session-memory-store": "^0.2.2", "session-memory-store": "^0.2.2",
"throng": "4.0.0" "throng": "4.0.0"

View File

@ -1,15 +1,15 @@
{ {
"name": "expressjs-app", "name": "expressjs-app",
"version": "1.0.0", "version": "1.0.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"accepts": { "accepts": {
"version": "1.3.4", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
"integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
"requires": { "requires": {
"mime-types": "2.1.17", "mime-types": "~2.1.18",
"negotiator": "0.6.1" "negotiator": "0.6.1"
} }
}, },
@ -19,20 +19,20 @@
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
}, },
"body-parser": { "body-parser": {
"version": "1.18.2", "version": "1.18.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
"requires": { "requires": {
"bytes": "3.0.0", "bytes": "3.0.0",
"content-type": "1.0.4", "content-type": "~1.0.4",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"http-errors": "1.6.2", "http-errors": "~1.6.3",
"iconv-lite": "0.4.19", "iconv-lite": "0.4.23",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"qs": "6.5.1", "qs": "6.5.2",
"raw-body": "2.3.2", "raw-body": "2.3.3",
"type-is": "1.6.15" "type-is": "~1.6.16"
} }
}, },
"bytes": { "bytes": {
@ -69,9 +69,9 @@
} }
}, },
"depd": { "depd": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
}, },
"destroy": { "destroy": {
"version": "1.0.4", "version": "1.0.4",
@ -84,9 +84,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
}, },
"encodeurl": { "encodeurl": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
}, },
"escape-html": { "escape-html": {
"version": "1.0.3", "version": "1.0.3",
@ -99,54 +99,54 @@
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
}, },
"express": { "express": {
"version": "4.16.0", "version": "4.16.4",
"resolved": "https://registry.npmjs.org/express/-/express-4.16.0.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
"integrity": "sha1-tRljjk61jnF4yBtJjvIveYyy4lU=", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
"requires": { "requires": {
"accepts": "1.3.4", "accepts": "~1.3.5",
"array-flatten": "1.1.1", "array-flatten": "1.1.1",
"body-parser": "1.18.2", "body-parser": "1.18.3",
"content-disposition": "0.5.2", "content-disposition": "0.5.2",
"content-type": "1.0.4", "content-type": "~1.0.4",
"cookie": "0.3.1", "cookie": "0.3.1",
"cookie-signature": "1.0.6", "cookie-signature": "1.0.6",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"etag": "1.8.1", "etag": "~1.8.1",
"finalhandler": "1.1.0", "finalhandler": "1.1.1",
"fresh": "0.5.2", "fresh": "0.5.2",
"merge-descriptors": "1.0.1", "merge-descriptors": "1.0.1",
"methods": "1.1.2", "methods": "~1.1.2",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"path-to-regexp": "0.1.7", "path-to-regexp": "0.1.7",
"proxy-addr": "2.0.2", "proxy-addr": "~2.0.4",
"qs": "6.5.1", "qs": "6.5.2",
"range-parser": "1.2.0", "range-parser": "~1.2.0",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.2",
"send": "0.16.0", "send": "0.16.2",
"serve-static": "1.13.0", "serve-static": "1.13.2",
"setprototypeof": "1.1.0", "setprototypeof": "1.1.0",
"statuses": "1.3.1", "statuses": "~1.4.0",
"type-is": "1.6.15", "type-is": "~1.6.16",
"utils-merge": "1.0.1", "utils-merge": "1.0.1",
"vary": "1.1.2" "vary": "~1.1.2"
} }
}, },
"finalhandler": { "finalhandler": {
"version": "1.1.0", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
"integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "2.6.9",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"statuses": "1.3.1", "statuses": "~1.4.0",
"unpipe": "1.0.0" "unpipe": "~1.0.0"
} }
}, },
"forwarded": { "forwarded": {
@ -160,27 +160,23 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
}, },
"http-errors": { "http-errors": {
"version": "1.6.2", "version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
"requires": { "requires": {
"depd": "1.1.1", "depd": "~1.1.2",
"inherits": "2.0.3", "inherits": "2.0.3",
"setprototypeof": "1.0.3", "setprototypeof": "1.1.0",
"statuses": "1.3.1" "statuses": ">= 1.4.0 < 2"
},
"dependencies": {
"setprototypeof": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
}
} }
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.19", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
}, },
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
@ -188,9 +184,9 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}, },
"ipaddr.js": { "ipaddr.js": {
"version": "1.5.2", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
"integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
}, },
"lodash.defaults": { "lodash.defaults": {
"version": "4.2.0", "version": "4.2.0",
@ -199,7 +195,7 @@
}, },
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
}, },
"merge-descriptors": { "merge-descriptors": {
@ -218,16 +214,16 @@
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
}, },
"mime-db": { "mime-db": {
"version": "1.30.0", "version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
}, },
"mime-types": { "mime-types": {
"version": "2.1.17", "version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"requires": { "requires": {
"mime-db": "1.30.0" "mime-db": "~1.37.0"
} }
}, },
"ms": { "ms": {
@ -259,18 +255,18 @@
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
}, },
"proxy-addr": { "proxy-addr": {
"version": "2.0.2", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
"integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
"requires": { "requires": {
"forwarded": "0.1.2", "forwarded": "~0.1.2",
"ipaddr.js": "1.5.2" "ipaddr.js": "1.8.0"
} }
}, },
"qs": { "qs": {
"version": "6.5.1", "version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}, },
"range-parser": { "range-parser": {
"version": "1.2.0", "version": "1.2.0",
@ -278,50 +274,55 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
}, },
"raw-body": { "raw-body": {
"version": "2.3.2", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
"requires": { "requires": {
"bytes": "3.0.0", "bytes": "3.0.0",
"http-errors": "1.6.2", "http-errors": "1.6.3",
"iconv-lite": "0.4.19", "iconv-lite": "0.4.23",
"unpipe": "1.0.0" "unpipe": "1.0.0"
} }
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"send": { "send": {
"version": "0.16.0", "version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.0.tgz", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
"integrity": "sha1-FjONu5ou3krVe0hCDsO4LY6ApXs=", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.1", "depd": "~1.1.2",
"destroy": "1.0.4", "destroy": "~1.0.4",
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"etag": "1.8.1", "etag": "~1.8.1",
"fresh": "0.5.2", "fresh": "0.5.2",
"http-errors": "1.6.2", "http-errors": "~1.6.2",
"mime": "1.4.1", "mime": "1.4.1",
"ms": "2.0.0", "ms": "2.0.0",
"on-finished": "2.3.0", "on-finished": "~2.3.0",
"range-parser": "1.2.0", "range-parser": "~1.2.0",
"statuses": "1.3.1" "statuses": "~1.4.0"
} }
}, },
"serve-static": { "serve-static": {
"version": "1.13.0", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.0.tgz", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
"integrity": "sha1-gQyR24AOlLoofq5rTgbKq5/cFvE=", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
"requires": { "requires": {
"encodeurl": "1.0.1", "encodeurl": "~1.0.2",
"escape-html": "1.0.3", "escape-html": "~1.0.3",
"parseurl": "1.3.2", "parseurl": "~1.3.2",
"send": "0.16.0" "send": "0.16.2"
} }
}, },
"setprototypeof": { "setprototypeof": {
@ -330,25 +331,25 @@
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
}, },
"statuses": { "statuses": {
"version": "1.3.1", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
}, },
"throng": { "throng": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz", "resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz",
"integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=", "integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=",
"requires": { "requires": {
"lodash.defaults": "4.2.0" "lodash.defaults": "^4.0.1"
} }
}, },
"type-is": { "type-is": {
"version": "1.6.15", "version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
"requires": { "requires": {
"media-typer": "0.3.0", "media-typer": "0.3.0",
"mime-types": "2.1.17" "mime-types": "~2.1.18"
} }
}, },
"unpipe": { "unpipe": {

View File

@ -1,6 +1,6 @@
{ {
"name": "expressjs-app", "name": "expressjs-app",
"version": "1.0.0", "version": "1.0.1",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
"scripts": { "scripts": {
@ -9,7 +9,7 @@
"author": "Gerasimos (Makis) Maropoulos <kataras2006@hotmail.com>", "author": "Gerasimos (Makis) Maropoulos <kataras2006@hotmail.com>",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"express": "^4.16.0", "express": "^4.16.4",
"throng": "4.0.0" "throng": "4.0.0"
} }
} }

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -9,11 +9,12 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework> <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB