Laden...

Parsen von HTTP User Agents mit .NET

Erstellt von Abt vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.017 Views
Abt Themenstarter:in
16.834 Beiträge seit 2008
vor 2 Jahren
Parsen von HTTP User Agents mit .NET

Servus zusammen,

gfoidl und ich haben die letzten Tage einen HTTP User Agent Parser geschrieben, der dem aktuellen Stand von .NET doch ganz gut gerecht wird 🙂

Hintergrund war, dass gfoidl im Rahmen der Analyse der Leistung des Forums aufgefallen ist, dass unser bisheriger Parser (UA Parser) doch relativ viel Performance gefressen hat und wir keine so richtig gute, existierende Lösung gefunden haben.
Entsprechend mit Zahlen zu sehen ist das auch in den Benchmarks, in dem wir unseren Code mit anderen Bibliotheken verglichen haben - und doch sehr gut (~50x schneller ohne Caching) abschneiden 🙂

GitHub
MyCSharp.HttpUserAgentParser auf GitHub

Auf GitHub gibt es entsprechende Beispiele zur Nuztung sowie zur jeweiligen Integration.
Dem Quellcode kann entnommen werden, welche User Agents aktuell unterstützt werden.

NuGet
Neben dem Parser selbst gibt es zwei weitere Pakete für die Nutzung des Parsers mit einem Cache sowie der direkten Integration mit ASP.NET Core.
MyCSharp.HttpUserAgentParser auf NuGet
MyCSharp.HttpUserAgentParser.MemoryCache auf NuGet
MyCSharp.HttpUserAgentParser.AspNetCore auf NuGet

PS: weil wir zeitlich immer noch nicht dazu kamen den angekündigten Architekturartikel des Forums zu schreiben, kann man das Projekt hier als kleinen Ausschnitt sehen, wie wir arbeiten, und wie wir Software Architektur leben 🙂

Grüße,
gfoidl und Abt

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo zusammen,

im Rahmen der Analyse der Leistung des Forums aufgefallen ist, dass unser bisheriger Parser (UA Parser)

Dazu als Ergänzung / Erklärung.

UA Parser kann ziemlich viele User Agents parsen, aber (leider) ist die .NET Bibliothek ein ziemlich direkter Port des JavaScript Projekts. Das macht sich v.a. durch die unzähligen Closures bemerkbar und sind in einem GC-Dump deutlich sichtbar -- siehe Anhang.

Für eine Web-Anwendung hätte ich mir Objekte von Kestrel (Server), MVC, EF Core, etc. erwartet und nicht dass eine "Hilf-Bibliothek" dort so dominant zu sehen ist.
BTW: unser eigener Code, abgesehen vom DbContext, taucht erst relativ weit unten auf und ist in diesem Abschnitt nicht zu sehen.

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"