Мне нужен эффективный механизм для обнаружения изменений в DOM. Предпочтительно кросс-браузер, но если есть эффективные средства, которые не являются перекрестными браузерами, я могу реализовать их с помощью метода отказоустойчивого кросс-браузера.
В частности, мне нужно обнаружить изменения, которые повлияют на текст на странице, поэтому потребуются любые новые, удаленные или измененные элементы или изменения внутреннего текста (innerHTML).
У меня нет контроля над внесенными изменениями (они могут быть связаны с сторонним javascript-интерфейсом и т.д.), поэтому с этим углом нельзя подходить - мне нужно как-то "следить" за изменениями.
В настоящее время я реализовал метод "quick'n'dirty", который с интервалами проверяет body.innerHTML.length
. Разумеется, это не приведет к обнаружению изменений, которые приводят к возврату той же длины, но в этом случае "достаточно хороши" - шансы на это очень малы, и в этом проекте не удается обнаружить изменение не приведет в потерянных данных.
Проблема с body.innerHTML.length
заключается в том, что это дорого. Это может занять от 1 до 5 миллисекунд в быстром браузере, и это может сильно утомить многое - я также имею дело с большим количеством чисел iframe, и все это складывается. Я уверен, что дорогостоящее выполнение этого заключается в том, что текст innerHTML не хранится статически браузерами и должен рассчитываться из DOM каждый раз, когда он читается.
Типы ответов, которые я ищу, - это что-нибудь от "точного" (например, события) до "достаточно хорошего" - возможно, что-то вроде "quick'n'dirty" как метод innerHTML.length, но который выполняется быстрее.
EDIT: Я должен также отметить, что, хотя было бы "хорошо" обнаружить точный элемент, который был изменен, это не является абсолютной необходимостью - только тот факт, что произошли какие-либо изменения, будет достаточно хорошим. Надеюсь, что это расширит реакцию людей. Я собираюсь исследовать Mutation Events, но мне все еще нужен резерв для поддержки IE, поэтому любые неприятные, творческие, вне квадратные идеи были бы очень желанными.