Two caveats when working with Sitecore’s dictionary domains:
1. Set uniqe names on each dictionary domain item
If two items have the same name i.E. “Dictionary” this will kick off an infinite loop when opening Experience Editor forcing the instance to freeze.
Update 08/11/2020: Apparently duplicate names aren’t the only thing that triggers these infinite loops. This is a confirmed bug on Sitecore 9.3. Contact Sitecore support, they have a fix for it.
2. Set IDs on site attributes instead of the dictionary names.
Quite a few examples out in the web set the dictionary domain on the site attribute by using it’s item name.
Bad Example:
<sitecore>
<sites>
<site name="website">
<patch:attribute name="dictionaryDomain">My Dictionary Domain Item</patch:attribute>
</site>
</sites>
</sitecore>
Internally, Sitecore will resolve the dictionary domain using a fast:// query which is much slower than querying by ID. Given labels are accessed quite often this could impact your performance.
Good example using Guids:
<sitecore>
<sites>
<site name="website">
<patch:attribute name="dictionaryDomain">{84B9F5F7-835F-4DF7-BEDA-2FF276A0506D}</patch:attribute>
</site>
</sites>
</sitecore>