Зависит от задачи.
Если нужно, чтобы окно мгновенно открывалось, то лучше все загружать и формировать UI заранее, в фоне (лучше в отдельном потоке, создав его с помощью setTimeout). Но это может неблагоприятно сказаться на потребляемом трафике и добавить нагрузку при старте.
Я бы, наверно, выбрал вариант с отрисовкой при первом обращении, а потом скрывал, не удаляя из DOM.
А еще можно попытаться поискать балланс, проанализировав статистику. Наиболее нужные и частоиспользуемые диалоги можно подгружать заранее, остальные - при обращении. Те, которые чаще всего используются только один раз (то есть, редко), можно из DOM удалять для освобождения памяти.