I think we might need to keep the timing concept and only use the mutation observer to fill in a queue of things that needs to be processed. This would remove some uncertainties (no need for the try/catch around json.parse) while keeping the performance profile.
Or maybe do a debounce type of thing and start processing elements when things are idle for a few hundred miliseconds.
Hmm tests are going to fail.. they assert their presence and content.
Not sure what to do. Remove/rewrite those tests, or revert to jquery.once?