Скажем, у нас есть несколько function heads
или case do
шаблонов для сопоставления.
Будет ли сначала размещаться "общий случай" или "наиболее вероятный" заголовокпредлагаете какие-либо преимущества?
Я вижу улучшения во времени, когда я переупорядочиваю case do
шаблоны соответствия в ELIXIR, ставя наиболее распространенный шаблон на первое место.
Я ожидал, что виртуальная машина оптимизирует этопрочь, и порядок не должен иметь значения.
Пример:
for {s, i} <- li do
case :binary.split(s, spliter, [:global]) do
[_, tag, val, _, _] ->
# this pattern occurs over 9/10 times.
# in files with over 100000 rows matching this pattern
# reduced processing time
{:tv, i, tag, val}
[_, "data", _] ->
Process.put(:data_tag, true)
{:tb, i, "data"}
[_, "/data", _] ->
Process.put(:data_tag, false)
{:te, i, "data"}
[_, "/" <> tag, _] ->
if Process.get(:data_tag) do
{nil, i}
else
{:te, i, tag}
end
[_, "?xml" <> _, _] ->
{nil, i}
[_, "!--" <> _, _] ->
{nil, i}
[_, "return" <> _, _] ->
{nil, i}
[_, tag, _] ->
if Process.get(:data_tag) do
{:tv, i, tag, ""}
else
{:tb, i, tag}
end
_ ->
{nil, i}
end
end