diff options
author | Kim Alvefur <zash@zash.se> | 2020-10-11 23:04:13 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2020-10-11 23:04:13 +0200 |
commit | b6f4936b57078c02e7bee7ae524f1e3ab32a2af2 (patch) | |
tree | d9debc81153eb3764a6a4426b43f3a47b18d91d7 /util | |
parent | 22befd94aeb723dd74050b931ad98b8784e3a70e (diff) | |
download | prosody-b6f4936b57078c02e7bee7ae524f1e3ab32a2af2.tar.gz prosody-b6f4936b57078c02e7bee7ae524f1e3ab32a2af2.zip |
util.paths: Optimize path joining with few arguments
A casual search suggests that the majority of paths.join() calls involve
only two arguments. This saves the creation of a table for up to 3
arguments.
Looks like 3x faster for 3 arguments or less, 5% slower when it uses the
array to concatenate.
Diffstat (limited to 'util')
-rw-r--r-- | util/paths.lua | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/util/paths.lua b/util/paths.lua index 036f315a..b75c35e5 100644 --- a/util/paths.lua +++ b/util/paths.lua @@ -37,8 +37,18 @@ function path_util.glob_to_pattern(glob) end).."$"; end -function path_util.join(...) - return t_concat({...}, path_sep); +function path_util.join(a, b, c, ...) -- (... : string) --> string + -- Optimization: Avoid creating table for most uses + if b then + if c then + if ... then + return t_concat({a,b,c,...}, path_sep); + end + return a..path_sep..b..path_sep..c; + end + return a..path_sep..b; + end + return a; end function path_util.complement_lua_path(installer_plugin_path) |