Running File.ls many times and seeing how fast it was gave me an idea. So I
wrote this code and benchmarked it.
defmodule Benchmark do
def run(function) do
function |> :timer.tc() |> elem(0) |> Kernel./(1_000_000)
end
end
defmodule MyFile do
def list(directory, filter) do
Enum.reduce([directory], [], fn item, acc ->
if String.ends_with?(item, filter) do
[item] ++ acc
else
item
|> File.ls()
|> case do
{:ok, files} -> Enum.reduce(files, [], &(item |> Path.join(&1) |>
list(filter) |> Kernel.++(&2))) ++ acc
_ -> acc
end
end
end)
end
end
*Docker Results*
iex(45)> Benchmark.run(fn -> Path.wildcard("lib/**/*.ex") end)
0.877545
iex(46)> Benchmark.run(fn -> Enum.each(0..10, fn _ -> Path.wildcard(
"lib/**/*.ex") end) end)
9.808442
iex(47)> Benchmark.run(fn -> MyFile.list("lib", ".ex") end)
0.380802
iex(48)> Benchmark.run(fn -> Enum.each(0..10, fn _ -> MyFile.list("lib",
".ex") end) end)
4.368466
*Mac Results*
iex(29)> Benchmark.run(fn -> Path.wildcard("lib/**/*.ex") end)
0.053149
iex(30)> Benchmark.run(fn -> Enum.each(0..10, fn _ -> Path.wildcard(
"lib/**/*.ex") end) end)
0.641741
iex(31)> Benchmark.run(fn -> MyFile.list("lib", ".ex") end)
0.019919
iex(32)> Benchmark.run(fn -> Enum.each(0..10, fn _ -> MyFile.list("lib",
".ex") end) end)
0.248769
--
You received this message because you are subscribed to the Google Groups
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/53169987-cb9f-4f02-9709-c8766ec9830e%40googlegroups.com.