felixge / felixge/httpsnoop

avoid multiple wrapping

Aberta
#19 2 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Go
Estrelas
1.2k
Forks
48
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

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?

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.