Montag, 27 Juli 2020 12:54

Speedtest (benchmark) zwischen C# (ASP.Core), PHP (Lumen) und Golang

Artikel bewerten
(0 Stimmen)

Ich habe meine Anwendungen schon lange mit C # und dem .Net Framework programmiert. Ich komme ursprünglich aus der Desktop-Entwicklung und habe gelernt, mit WinForms und C # zu arbeiten. Die Sprache, Ihre Syntax und Ihre Sprachfunktionen haben mich immer beeindruckt, und ich hatte keinen Grund, eine andere Programmiersprache als Primärsprache zu verwenden. Auch wenn ich mich immer ein wenig verirrt habe und andere Sprachen wie Python, PHP, JavaScript, Object Pascal u.v.m. Ich bin immer zu C # zurückgekehrt.

Da ich jedoch immer mehr Backend-Entwicklungen (Web-APIs) im Front-End einer Webanwendung (VueJS oder Angular) durchgeführt habe, habe ich kürzlich gefragt, ob das .Net Framework oder ASP.Core immer noch das richtige für mich ist . Mit der letzten Ankündigung entschied Microsoft auch, dass .Net Core (The Saviour, der vor 2 Jahren gelobt wurde) nun mit dem .Net Framework und .Net Standard sowie Xamarin kombiniert wird und ein .Net 5 erscheint. So gut die Entscheidung auch sein mag, die Auswirkungen für uns Entwickler sind auch gewalttätig. Es wird wieder unzählige bahnbrechende Änderungen geben. Was wird mit meinen alten Projekten passieren? Was muss ich migrieren? Muss ich wieder neue Sprachfunktionen lernen? Bitte versteh mich nicht falsch, ich bin gespannt zu lernen. Aber als Entwickler möchte ich nicht alle zwei Jahre ein neues Framework lernen müssen. Ich möchte, dass mein Code jahrelang ausgeführt wird und nicht veraltet ist, sobald er geschrieben wurde. Vor kurzem habe ich mich auf dem Markt für Programmiersprachen umgesehen und mir einige Frameworks und Konzepte angesehen. Ich war bereits mit Lumen und PHP vertraut, weil ich bereits verschiedene Projekte damit implementiert hatte, aber die Leistung war immer ein bitterer Nachgeschmack, zumindest wenn Sie von .Net Core stammen. Aber wie ist die Leistung im Vergleich zu anderen Sprachen? Aus diesem Grund habe ich einfach einen einfachen Leistungsvergleich (Benchmark) zwischen ASP.Core Web API, Go lang und PHP mit Lumen erstellt.

Programmiersprachen-Benchmark

Um herauszufinden, wie sich die Sprachen unterschiedlich verhalten, habe ich einen Benchmark mit den drei Sprachen erstellt, die für mich von Interesse sind. Gehen Sie lang, ASP.Core und PHP mit dem Microframework Lumen. Ich gab allen drei Sprachen die gleiche Aufgabe und schickte dann 10.000 Anfragen mit dem Apache Benchmark Tool, um zu sehen, welches Framework oder welche Sprache die Aufgabe am schnellsten erledigte. Die Anwendung ist eine Web-API, die einfache arithmetische Probleme bereitstellt und das Ergebnis zurückgibt. Ich habe bewusst das Schreiben von Operationen und Datenbanken vermieden - mein einziges Anliegen war die Exportzeit von Code.

Golang performance

Meiner Meinung nach ist Golang derzeit die interessanteste Programmiersprache für die Backend-Entwicklung. Einerseits ist Go vergleichsweise schnell wie C ++, bietet jedoch moderne Sprachfunktionen wie asynchrone Programmierung (einfach implementiert) sowie Zugriff auf eine große Bibliotheksauswahl für SSL, ORM, Protobuff und mehr. Sprechen Sie die Leistung von C ++, aber mit modernen Sprachfunktionen.

C:\xampp\apache\bin\ab.exe -n 10000 -c 10 -k -H "Accept-Encoding: gzip, deflate" "http://localhost:10000/" > go.log
 
package main

import (
    "fmt"
    "log"
    "net/http"
)

func homePage(w http.ResponseWriter, r *http.Request){
    next := 1
    for a := 1; a < 1000; a++ {
        next = next + (a * a)
     }
    fmt.Fprintf(w, "Welcome to the HomePage! - Result: %d", next)
}

func handleRequests() {
    http.HandleFunc("/", homePage)
    log.Fatal(http.ListenAndServe(":10000", nil))
}

func main() {
    handleRequests()
}
 

PHP (Lumen) performance

C:\xampp\apache\bin\ab.exe -n 10000 -c 10 -k -H "Accept-Encoding: gzip, deflate" "http://localhost/testapi/public/" > lumen.log
 
<?php
namespace App\Http\Controllers;

use Laravel\Lumen\Routing\Controller as BaseController;

class Controller extends BaseController
{
    public function index() {
        $next = 1;
        for ($a = 1; $a < 1000; $a++) {
            $next = $next + ($a * $a);
        }

        $result = $next;
        return response("Welcome to the HomePage! - Result: ".$result);
    }
}
 

C# performance (ASP.Core)

C:\xampp\apache\bin\ab.exe -n 10000 -c 10 -k -H "Accept-Encoding: gzip, deflate" "http://localhost:59380/Default" > dotnetcore.log
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace testapi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DefaultController : ControllerBase
    {
        public DefaultController() { }

        [HttpGet]
        public String Get()
        {
            int next = 1;
            for (int a = 1; a < 1000; a++)
            {
                next = next + (a * a);
            }
            return "Welcome to the HomePage! - Result: " + next;
        }
    }
}
 

Das Benchmark Ergebnis

Metrik ASP.Core API Lumen Go
Time taken for tests 3.461 sec 41.776 sec. 1.391 sec.
Complete requests 10000 10000 10000
Failed requests 0 0 0
Keep-Alive requests 5655 0 10000
Requests per second 2889.22 [#/sec] 239.37 [#/sec] 7187.71 [#/sec]
Time per request 3.461 ms 41.776 ms 1.391 ms

Wie Sie sehen können, ist das Lumen etwa 40-mal langsamer als Go. Go ist in diesem Test sogar dreimal schneller als C # und verfügt über den kompakteren Code aller anderen Frameworks / Sprachen, da es sich nur um eine Datei handelt und nicht über Zehntausende von Projektordnern verfügt.

Gelesen 56 mal Letzte Änderung am Dienstag, 22 Dezember 2020 09:10

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.