Ho prelevato il codice e l'immagine e fatto una pagina di prova nel mio localhost.
Ho qualche perplessità :master: Parlo di sensazioni perchè non ho i mezzi per verificare.
Ho creato un pulsante ed ho messo il codice:
document.getElementById("obj1").src = "empty_img_for_xhtml_validation.png";
(da me si chiama così l'immagine prelavata dal tuo sito)


Nella tua funzione commento:
//document.getElementById(id).setAttribute(attr, uri);

Ho pensato che quando il codice arriva lì, l'immagine è già stata scaricata in memoria (XMLHttpReqObj.status = 304)

Premo il link di preload ed aspetto una diecina di secondi.
Io penso che, se il preload è già fatto, il click del pulsante deve visulizzare l'immagine immediatamente
Invece noto un certo tempo (breve) per il caricamento dell'immagine.

Adesso, nell'evento load metto il classico:
self.x = new Image(); x.src = "empty_img_for_xhtml_validation.png";

carico la pagina, aspetto 10 secondi, clicco il pulsante, e l'immagine appare istantaneamente.

Ecco perchè sono un poco perplesso