Veröffentlicht:

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

.

Speedtest (benchmark) zwischen C# (ASP.Core), PHP (Lumen) und Go Marco Griep

Geschrieben von



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 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(&quot;Welcome to the HomePage! - Result: &quot;.$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 &lt; 1000; a++)
        {
            next = next + (a * a);
        }
        return &quot;Welcome to the HomePage! - Result: &quot; + next;
    }
}

}

Das Benchmark Ergebnis

MetrikASP.CoreLumenGo
Time taken for tests3.46141.7761.391
Complete requests100001000010000
Failed requests000
Keep-Alive requests5655010000
Requests per seconds2889.22239.377187.71
Time per request3.46141.7761.391

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.

Kommentare