Here is a version of your code that combines the following performance improvements:
- innerHTML . , , , , HTML . DOM, . DOM.
jItems.length 20, 5, DOM 1/50- DOM. .push() .join() , . JS , .- .
- ,
pList pList.name, . jItems[i] , , .- len
for , . jItems[i]["videos"] , .jsonData.items , , . ( ), , , .
:
function list_response(jsonData) {
"use strict";
var lists = document.getElementById("lists"), anchors = document.getElementById("anchors"), jItems = jsonData.items;
var results = [], anks = [], vList, pListName, item, videoItem;
var i, iLen = jItems.length, j, jLen;
for (var i = 0; i < iLen; i++) {
jItems[i].nameLower = jItems[i].name.toLowerCase();
}
jItems.sort(function (a, b) {
return a.nameLower.localeCompare(b.nameLower);
});
for (i = 0; i < iLen; i++) {
item = jItems[i];
videoItem = item["videos"];
pListName = item.name;
results.push('<span class="backtotop">[ <a href="#">Back to top</a> ]</span><br /><br /><br /><li class="title nodot"><a class="pHeader" name="' + pListName + '"><h2>' + pListName + '</h2></a></li>');
anks.push('<a class="pHeader" href="#' + pListName + '">' + pListName + '</a> ');
for (j = 0, jLen = videoItem.length; j < jLen; j++) {
vList = videoItem[j];
results.push('<li class="nodot"><a href="https://www.site.org/videos/Video_Player.page?bctid=' + vList.id + '">' + vList.name + '</a></li>');
}
}
lists.innerHTML += results.join("");
anchors.innerHTML += anks.join("");
}