felixge / felixge/httpsnoop

avoid multiple wrapping

Abierto
#19 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Go
Estrellas
1.2k
Forks
48
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Since it's possible to have multiple uses of httpsnoop in a project, coming from different imported modules (e.g. when using [server-timing](https://github.com/mitchellh/go-server-timing)), it's also possible to end up wrapping a `ResponseWriter` multiple times. This is not ideal because it has a sensible performance impact:
```
cpu: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
BenchmarkBaseline
BenchmarkBaseline-8 745539247 1.477 ns/op 0 B/op 0 allocs/op
BenchmarkCaptureMetrics
BenchmarkCaptureMetrics-8 3790958 296.2 ns/op 225 B/op 7 allocs/op
BenchmarkCaptureMetricsTwice
BenchmarkCaptureMetricsTwice-8 1912039 581.3 ns/op 450 B/op 14 allocs/op
```
(these benchmarks were made after switching `httptest.NewServer` for direct `h.ServeHTTP` calls, in order to avoid the unrelated overhead of the server; see #20 )

Ideally we'd return the same `Metrics` instance when re-wrapping an already wrapped `ResponseWriter`.

In case we explicitly want to measure at two different places in the middleware-chain, we'd still be able to `Unwrap` before re-wrapping.

WDYT?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.