Widzisz ten błąd, ponieważ prefetch z wyprzedzeniem pobiera za pomocą localStorage dane.
Firstly, storing 1MB of data on the client side is not really good in term of user experience.
Biorąc to pod uwagę, nadal można rozwiązać problem z wieloma zestawami danych. To tylko obejście i może nie być najbardziej eleganckim rozwiązaniem, ale działa idealnie.
Dane próbka I testowane było> 1MB i wygląda to
można zobaczyć próbkę here (zajmuje trochę czasu, aby otworzyć)
Procedura:
- Najpierw pobierz wszystkie dane, używając
$.getJSON
- The n podzieliłem dane na kawałki o wielkości 10.000 (tylko magiczna liczba, która zadziałała dla mnie w różnych przeglądarkach. Znajdź swoje)
- Utworzono zestawy ogarów dla każdego kawałka i przechowywano wszystko w tablicy.
- Następnie zainicjowania wpisywanie znaków z wyprzedzeniem z tej tablicy
Kod:
$.getJSON('data.json').done(function(data) { // download the entire data
var dataSources = [];
var data = data['friends'];
var i, j, data, chunkSize = 10000; // break the data into chunks of 10,000
for (i = 0, j = data.length; i < j; i += chunkSize) {
tempArray = data.slice(i, i + chunkSize);
var d = $.map(tempArray, function(item) {
return {
item: item
};
});
dataSources.push(getDataSources(d)); // push each bloodhound to dataSources array
}
initTypeahead(dataSources); // initialize typeahead
});
function getDataSources(data) {
var dataset = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('item'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: data,
limit: 1 // limited each dataset to 1 because with 76,000 items I have 8 chunks and each chunk gives me 1. So overall suggestion length was 8
});
dataset.initialize();
var src = {
displayKey: 'item',
source: dataset.ttAdapter(),
}
return src;
}
function initTypeahead(data) {
$('.typeahead').typeahead({
highlight: true
}, data); // here is where you use the array of bloodhounds
}
stworzyłem demo here z 20 elementów i chunkSize 2 po prostu pokazać, jak wiele-zestawy danych na ogół działają. (Wyszukaj Seana lub Benjamina)
Mam nadzieję, że to pomoże.
Może to być ustawienie preferencji w przeglądarce, dostępne miejsce na dysku na każdym komputerze lub inna różnica w środowisku. powiązane pytanie [link] (http://stackoverflow.com/questions/2989284/what-is-the-max-size-of-localstorage-values) –