Ho esaminato di recente le prestazioni del plugin ActivityPub e sto considerando i modi migliori per testare in modo affidabile e dimostrare le prestazioni ai fini di un progetto di questo tipo. Ecco alcuni elementi di contesto iniziali:
- Il plugin è un progetto open source con più parti coinvolte (ad esempio, Discourse, che possiede il plugin, e Pavilion, che lo sta attualmente sviluppando).
- Parti diverse possono avere strumenti/sistemi interni diversi per il test delle prestazioni.
- I progetti open source multipartitici beneficiano di metodi comunemente disponibili per testare e dimostrare che qualcosa funziona, o in questo caso, offre prestazioni, in modo affidabile.
- Discourse (lodevolmente) tiene alla performance.
A Discourse crediamo che le prestazioni siano una funzionalità. Accogliamo con favore le pull request che migliorano le prestazioni lato client o lato server.
- Attualmente, l’unico metodo comunemente disponibile per testare/dimostrare le prestazioni lato server in Discourse (di cui sono a conoscenza) è track_sql_queries, che viene tipicamente (ma non esclusivamente) utilizzato nei test di richiesta.
- Sebbene il conteggio delle query sia un indicatore delle prestazioni, non è l’unico (alcune query sono più grandi di altre).
Per un esempio recente dell’uso di track_sql_queries vedere
Se hai familiarità con quest’area, probabilmente conosci qualcosa come
La regola generale è che i test unitari necessitano di velocità e i test delle prestazioni necessitano di tempo.
(citazione da questa discreta spiegazione)
Il che, a prima vista, può rendere il test delle prestazioni (oltre al conteggio delle query) alquanto difficile da integrare in una suite rspec (o simile). Detto questo, alcuni ci provano
Sono curioso di sapere quali altri metodi pratici, suggerimenti o idee la gente potrebbe avere per aggiungere test delle prestazioni e prove delle prestazioni più comunemente disponibili all’ecosistema Discourse. O se ci sono metodi o approcci che non ho menzionato qui. Sottolineerei le parole “pratico” e “comunemente disponibile”.
Un pensiero che mi viene in mente è che si potrebbe usare MiniProfiler in uno spec, cioè qualcosa come Rack::MiniProfiler.profile_singleton_method. Ma non l’ho provato, né so se sarebbe una buona idea.