Ich habe mir kürzlich die Leistung des ActivityPub-Plugins angesehen und über die besten Möglichkeiten nachgedacht, die Leistung für ein solches Projekt zuverlässig zu testen und nachzuweisen. Hier sind einige erste Hintergrundinformationen:
- Das Plugin ist ein Open-Source-Projekt, an dem mehrere Parteien beteiligt sind (d. h. Discourse, dem das Plugin gehört, und Pavilion, das es derzeit entwickelt).
- Verschiedene Parteien können unterschiedliche interne Leistungstestwerkzeuge/-systeme haben.
- Multi-Parteien-Open-Source-Projekte profitieren von allgemein verfügbaren Methoden zum Testen und Nachweisen, dass etwas zuverlässig funktioniert oder in diesem Fall Leistung bringt.
- Discourse (lobenswerterweise) achtet auf Leistung.
Bei Discourse glauben wir, dass Leistung ein Feature ist. Wir begrüßen Pull-Requests, die entweder die Client- oder Server-seitige Leistung verbessern.
- Derzeit ist die einzige allgemein verfügbare Methode zum Testen/Nachweisen der serverseitigen Leistung in Discourse (soweit ich weiß)
track_sql_queries(discourse/spec/support/helpers.rb at 467e1a1bddb8266e4ab1165fbba71745d4f9c269 · discourse/discourse · GitHub), die typischerweise (aber nicht ausschließlich) in Anforderungstests verwendet wird. - Während die Abfrageanzahl ein Indikator für die Leistung ist, ist sie nicht der einzige (einige Abfragen sind größer als andere).
Ein aktuelles Beispiel für die Verwendung von track_sql_queries finden Sie unter
Wenn Sie mit diesem Bereich vertraut sind, wissen Sie wahrscheinlich etwas wie
Faustregel: Unit-Tests brauchen Geschwindigkeit und Performance-Tests brauchen Zeit.
(Zitat aus diesem guten Erklärer)
Was auf den ersten Blick das Leistungstesten (über die Abfragezählung hinaus) etwas schwierig in eine RSpec-Suite (oder ähnliches) zu integrieren macht. Allerdings versuchen einige Leute es:
Ich bin neugierig, welche anderen praktischen Methoden, Vorschläge oder Ideen die Leute haben, um dem Discourse-Ökosystem allgemein verfügbare Leistungstests und Leistungsnachweise hinzuzufügen. Oder ob es Methoden oder Ansätze gibt, die ich hier nicht erwähnt habe. Ich würde die Worte „praktisch“ und „allgemein verfügbar“ dort betonen.
Ein Gedanke, der mir kommt, ist, dass man MiniProfiler in einem Spec verwenden könnte, d. h. etwas wie Rack::MiniProfiler.profile_singleton_method. Aber ich habe das weder ausprobiert noch weiß ich, ob das eine gute Idee wäre.