Слышал, но не проверял, что обратные цыклы работают быстрее.
Т.е. i меняется не от 0 к length, а от length к 0 и проверяется при этом во втором условии i.
Т.е. как-то так:
for (var i=xmlCols.length; i; i--)
Но даже если делать с прямым циклом, то length лучше посчитать заранее (у вас в каждой итерации цикла data.length пересчитывается вроде как):
for (var i = 0, l = data.length; i < l; i++)