diff --git a/apps/emqx_utils/src/emqx_placeholder.erl b/apps/emqx_utils/src/emqx_placeholder.erl index 409e41aff..84000669d 100644 --- a/apps/emqx_utils/src/emqx_placeholder.erl +++ b/apps/emqx_utils/src/emqx_placeholder.erl @@ -265,11 +265,16 @@ lookup_var(Var, Value) when Var == ?PH_VAR_THIS orelse Var == [] -> Value; lookup_var([Prop | Rest], Data0) -> Data = - case emqx_utils_json:safe_decode(Data0, [return_maps]) of - {ok, Data1} -> - Data1; - {error, _} -> - Data0 + case is_map(Data0) of + true -> + Data0; + false -> + case emqx_utils_json:safe_decode(Data0, [return_maps]) of + {ok, Data1} -> + Data1; + {error, _} -> + Data0 + end end, case lookup(Prop, Data) of {ok, Value} -> @@ -293,12 +298,10 @@ lookup(Prop, Data) when is_binary(Prop) -> end. do_one_lookup(Key, Data) -> - try - {ok, maps:get(Key, Data)} - catch - error:{badkey, _} -> - {error, undefined}; - error:{badmap, _} -> + case Data of + #{Key := Value} -> + {ok, Value}; + _ -> {error, undefined} end. diff --git a/changes/ce/perf-13118.en.md b/changes/ce/perf-13118.en.md new file mode 100644 index 000000000..ef74daedd --- /dev/null +++ b/changes/ce/perf-13118.en.md @@ -0,0 +1 @@ +Improve performance of template rendering in bridges.