"Reusable Templates in Phoenix" blog post question



Hi everyone!

I just found this post (Reusable Templates in Phoenix) by @danielberkompas. I also write server side components in Phoenix and would like to know how you write your templates!

My code looks like this:

<%= top_bar do %>
  <%= top_bar_title gettext("Edit user account") %>
  <%= top_bar_submit gettext("Update"), form: "user_account_form" %>
  <%= top_bar_link gettext("Back"), to: user_account_path(@conn, :index) %>
<% end %>

<%= render "form.html", changeset: @changeset,
                        action: user_account_path(@conn, :update, @user_account) %>
<%= form_for @changeset, @action, [id: "user_account_form"], fn f -> %>
  <%= box do %>
    <%= box_heading gettext("Security") %>
    <%= box_password_input f, :password, gettext("Password") %>
    <%= box_password_input f, :password_confirmation, gettext("Password confirmation") %>
    <%= hidden_input f, :employee_id %>
  <% end %>
<% end %>
defmodule App.Components do
  use App.Web, :view

  defmacro __using__(_) do
    quote do
      import App.Components, except: [render: 2, template_not_found: 2]

  def top_bar(do: content) do
      <div class="top-bar w-clearfix">
        <%= content %>

  def top_bar_title(title) do
      <div class="top-bar-heading"><%= title %></div>

  def top_bar_subtitle(subtitle) do
      <div class="top-bar-subheading">(<%= subtitle %>)</div>

  def top_bar_link(title, attributes \\ []) do
    link(title, [class: "button top-bar-button"] ++ attributes)

  def top_bar_submit(title, attributes \\ []) do
    submit(title, [class: "button top-bar-button"] ++ attributes)

  # ...

Can you tell me if using ~E is faster or slower than function call like content_tag/2?


I can not find a sigil_E in elixir, eex, nor phoenix. So it is hard tell whithout knowing about its implementation‌…


sigil_E is from phoenix_html: https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#sigil_E/2


Ah, thank you.

So on a first glance it seems, as if sigil_e and sigil_E do a lot of stuff at compile time, while content_tag/2 is more work at runtime.

So if you use the sigil variants it should run faster but might take longer to compile, but to know it for sure which one is better in which situation, you might need to bench