document.createElement() можно и нужно! юзать. Но есть ситуации, когда этот метод не подходит, например если html получаешь ajax-ом.
document.createDocumentFragment() можно использовать в цикле затусовав туда все элементы, а потом один раз replaceChild, вместо множественных insertBefore;
function replace(targetNode, html)
    {
        var tmpNode = document.createElement('div');
        tmpNode.innerHTML = html;
        
        var fragmentNode = document.createDocumentFragment();
        while (tmpNode.firstChild) {
            fragmentNode.appendChild(tmpNode.firstChild);
        }
        
        targetNode.parentNode.replaceChild(fragmentNode, targetNode);
    }