Вероятно, слишком много данных для обработки подряд, не позволяя браузеру выполнять какие-либо циклы, и мобильный браузер считает, что javascript перестал отвечать на запросы.Даже на моем четырехъядерном рабочем столе может потребоваться несколько секунд.
Вы можете разбить его на куски и дать браузеру вдохнуть (с setTimeout
) между каждым таким блоком, как этот.Демонстрация здесь: http://jsfiddle.net/jfriend00/XFgAa/. Обратите внимание, это в несколько раз быстрее, чем ваша предыдущая версия, которая использует document.write()
в каждой строке, потому что это накапливает ценность данных объекта и добавляет их все сразу в одной операции DOM, так что эта новая версияимеет 1/27 числа операций DOM.
function addBigData() {
// populate big array
var items = [], i;
for (i = 0; i < 5000; i++) {
var data = {};
for (var j = 1; j <= 8; j++) {
data["prop" + j] = "Some Big Data " + j;
}
var item = {};
item.data = data;
items.push(item);
}
i = 0;
function addNextChunk() {
var chunkEnd = Math.min(i + 20, items.length);
var chunk = [], item;
while (i < chunkEnd) {
item = items[i++];
chunk.push("Item " + i);
chunk.push("<br />");
for (var prop in item.data) {
chunk.push(" ");
chunk.push(prop + " = " + item.data[prop]);
chunk.push("<br />");
}
chunk.push("<br /><br />");
}
var div = document.createElement("div");
div.innerHTML = chunk.join("");
document.body.appendChild(div);
if (i < items.length) {
setTimeout(addNextChunk, 1);
}
}
addNextChunk();
}
addBigData();
К вашему сведению, в мобильном браузере вы столкнетесь с некоторыми ограничениями доступной памяти или локального хранилища гораздо раньше, чем в настольном браузере, так что вам действительно не следуетне помещать гигантские объемы данных на страницу или даже в локальное хранилище.