Skip to content

Instantly share code, notes, and snippets.

@J3RN
Created January 10, 2022 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save J3RN/02054fee382d65eb40ed098e761d2846 to your computer and use it in GitHub Desktop.
Save J3RN/02054fee382d65eb40ed098e761d2846 to your computer and use it in GitHub Desktop.
"optimizing" Gleam code
****** Process <0.91.0> -- 100.00 % of profiled time ***
FUNCTION CALLS % TIME [uS / CALLS]
-------- ----- ------- ---- [----------]
erl_eval:exprs/5 1 0.00 0 [ 0.00]
erl_eval:ret_expr/3 2 0.00 0 [ 0.00]
erl_eval:eval_fun/2 1 0.00 0 [ 0.00]
erl_eval:expr_list/4 1 0.00 0 [ 0.00]
erl_eval:guard/4 1 0.00 0 [ 0.00]
erl_eval:guard0/4 1 0.00 0 [ 0.00]
erl_eval:match_list/4 1 0.00 0 [ 0.00]
erl_eval:merge_bindings/2 1 0.00 0 [ 0.00]
erl_eval:new_bindings/1 1 0.00 0 [ 0.00]
erl_eval:'-expr/5-fun-3-'/1 1 0.00 0 [ 0.00]
erl_internal:bif/3 1 0.00 0 [ 0.00]
lists:foldl/3 2 0.00 0 [ 0.00]
shell:apply_fun/3 1 0.00 0 [ 0.00]
shell:'-eval_loop/3-fun-0-'/3 1 0.00 0 [ 0.00]
gleam@string:join/2 1 0.00 0 [ 0.00]
orddict:new/0 1 0.00 0 [ 0.00]
orddict:to_list/1 2 0.00 0 [ 0.00]
gleam@list:reverse/1 2 0.00 0 [ 0.00]
gleam@list:map/2 1 0.00 0 [ 0.00]
gleam@list:intersperse/2 1 0.00 0 [ 0.00]
form_coder:encode/1 1 0.00 0 [ 0.00]
form_coder:encode_test/0 1 0.00 0 [ 0.00]
erl_eval:do_apply/6 1 0.01 1 [ 1.00]
erl_eval:expr_list/6 1 0.01 1 [ 1.00]
erl_eval:add_bindings/2 1 0.01 1 [ 1.00]
lists:reverse/1 3 0.01 1 [ 0.33]
erl_eval:eval_fun/6 1 0.02 2 [ 2.00]
erlang:apply/2 1 0.02 2 [ 2.00]
erl_eval:expr/5 3 0.02 3 [ 1.00]
lists:reverse/2 2 0.25 32 [ 16.00]
gleam@string_builder:to_string/1 2001 1.08 141 [ 0.07]
gleam@string_builder:from_strings/1 2001 1.09 142 [ 0.07]
gleam_stdlib:identity/1 2001 1.14 149 [ 0.07]
gleam@list:do_intersperse/3 2000 1.24 162 [ 0.08]
gleam_stdlib:percent_encode/1 4000 2.15 280 [ 0.07]
unicode:characters_to_binary/1 2001 2.25 294 [ 0.15]
gleam@string:concat/1 2001 2.26 295 [ 0.15]
gleam@uri:percent_encode/1 4000 2.29 299 [ 0.07]
gleam@list:do_map/3 2001 2.51 327 [ 0.16]
form_coder:'-encode/1-fun-0-'/1 2000 3.42 446 [ 0.22]
unicode:characters_to_binary/2 2001 4.01 523 [ 0.26]
gleam_stdlib:percent_ok/1 38148 23.10 3014 [ 0.08]
gleam_stdlib:percent_encode/2 42148 53.12 6930 [ 0.16]
----------------------------------- ------ ------- ----- [----------]
Total: 106342 100.00% 13045 [ 0.12]
pub fn encode(contents: List(#(String, String))) -> String {
contents
|> list.map(fn(item) {
let #(key, value) = item
string.concat([uri.percent_encode(key), "=", uri.percent_encode(value)])
})
|> string.join("&")
}
****** Process <0.91.0> -- 100.00 % of profiled time ***
FUNCTION CALLS % TIME [uS / CALLS]
-------- ----- ------- ---- [----------]
erl_eval:exprs/5 1 0.00 0 [ 0.00]
erl_eval:do_apply/6 1 0.00 0 [ 0.00]
erl_eval:ret_expr/3 2 0.00 0 [ 0.00]
erl_eval:eval_fun/2 1 0.00 0 [ 0.00]
erl_eval:expr_list/4 1 0.00 0 [ 0.00]
erl_eval:expr_list/6 1 0.00 0 [ 0.00]
erl_eval:guard/4 1 0.00 0 [ 0.00]
erl_eval:guard0/4 1 0.00 0 [ 0.00]
erl_eval:match_list/4 1 0.00 0 [ 0.00]
erl_eval:add_bindings/2 1 0.00 0 [ 0.00]
erl_eval:merge_bindings/2 1 0.00 0 [ 0.00]
erl_eval:new_bindings/1 1 0.00 0 [ 0.00]
erl_eval:'-expr/5-fun-3-'/1 1 0.00 0 [ 0.00]
erl_internal:bif/3 1 0.00 0 [ 0.00]
lists:reverse/1 1 0.00 0 [ 0.00]
lists:foldl/3 2 0.00 0 [ 0.00]
unicode_util:cp/1 2 0.00 0 [ 0.00]
unicode_util:cp_no_bin/1 1 0.00 0 [ 0.00]
unicode_util:gc/1 1 0.00 0 [ 0.00]
unicode_util:gc_1/1 1 0.00 0 [ 0.00]
unicode_util:gc_extend/3 1 0.00 0 [ 0.00]
shell:apply_fun/3 1 0.00 0 [ 0.00]
shell:'-eval_loop/3-fun-0-'/3 1 0.00 0 [ 0.00]
gleam@string:length/1 1 0.00 0 [ 0.00]
gleam@string:slice/3 1 0.00 0 [ 0.00]
gleam@string:drop_right/2 1 0.00 0 [ 0.00]
unicode:characters_to_binary/1 1 0.00 0 [ 0.00]
orddict:new/0 1 0.00 0 [ 0.00]
orddict:to_list/1 2 0.00 0 [ 0.00]
gleam@string_builder:to_string/1 1 0.00 0 [ 0.00]
form_coder:encode/1 1 0.00 0 [ 0.00]
form_coder:encode_test/0 1 0.00 0 [ 0.00]
string:length/1 1 0.00 0 [ 0.00]
string:slice/3 1 0.00 0 [ 0.00]
string:slice_l0/2 1 0.00 0 [ 0.00]
string:slice_l/2 1 0.00 0 [ 0.00]
string:slice_trail/2 1 0.00 0 [ 0.00]
erl_eval:eval_fun/6 1 0.00 1 [ 1.00]
erlang:apply/2 1 0.00 1 [ 1.00]
erl_eval:expr/5 3 0.01 2 [ 0.67]
unicode:characters_to_binary/2 1 1.07 234 [ 234.00]
gleam_stdlib:percent_encode/1 4000 1.22 268 [ 0.07]
gleam@list:fold/3 2001 1.37 300 [ 0.15]
gleam@uri:percent_encode/1 4000 1.50 329 [ 0.08]
gleam@string_builder:append_builder/2 8000 2.49 547 [ 0.07]
gleam@string_builder:from_string/1 8001 2.49 547 [ 0.07]
gleam_stdlib:identity/1 8001 2.60 571 [ 0.07]
gleam_stdlib:iodata_append/2 8000 2.96 649 [ 0.08]
form_coder:'-encode/1-fun-0-'/2 2000 3.80 834 [ 0.42]
gleam@string_builder:append/2 8000 4.98 1094 [ 0.14]
gleam_stdlib:percent_ok/1 38148 14.23 3123 [ 0.08]
string:slice_bin/3 42156 14.26 3130 [ 0.07]
string:length_b/3 42156 14.35 3149 [ 0.07]
gleam_stdlib:percent_encode/2 42148 32.67 7171 [ 0.17]
------------------------------------- ------ ------- ----- [----------]
Total: 216658 100.00% 21950 [ 0.10]
pub fn encode(contents: List(#(String, String))) -> String {
contents
|> list.fold(
string_builder.from_string(""),
fn(sb, item) {
let #(key, value) = item
sb
|> string_builder.append(uri.percent_encode(key))
|> string_builder.append("=")
|> string_builder.append(uri.percent_encode(value))
|> string_builder.append("&")
},
)
|> string_builder.to_string()
|> string.drop_right(1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment