elem.onpropertychange = function() {
if (!elem._lock) {
setTimeout(function() {
// блокируем выполнение повторного события
elem._lock = true;
// тут много-много-много-много кода
// ....
// снимаем блокировку
elem._lock = false;
}, 0);
}
// обработчик будет спокойно отпущен
// сразу же после выполнения setTimeout();
// не ожидая выполнения вложенных скриптов
//
// повторный вызов события не запустит огромный код,
// если он был ранее запущен и еще не выполнился.
}