spf13 / afero

A FileSystem Abstraction System for Go
Apache License 2.0
5.8k stars 498 forks source link

Make IOFS.ReadDir check for fs.ReadDirFile #366

Closed bep closed 2 years ago

bep commented 2 years ago

And implement fs.ReadDirFile for BasePathFile.

There are other File implementations that could also benefit from the above, but this is a start.

The primary motivation behind this is to allow fs.WalkDir use the native implementation whenever possible, as that new function was added in Go 1.16 with speed as its main selling point.

This commit also adds a benchmark for fs.WalkDir that, when compared to the main branch:

name        old time/op    new time/op    delta
WalkDir-10     369µs ± 1%     196µs ± 3%  -46.89%  (p=0.029 n=4+4)

name        old alloc/op   new alloc/op   delta
WalkDir-10    85.3kB ± 0%    40.2kB ± 0%  -52.87%  (p=0.029 n=4+4)

name        old allocs/op  new allocs/op  delta
WalkDir-10       826 ± 0%       584 ± 0%  -29.30%  (p=0.029 n=4+4)

Fixes #365