Ограничение размера функции Javascript на Opera? - PullRequest
2 голосов
/ 22 ноября 2011

Есть ли какое-то ограничение длины функции javascript в Opera?

Я проверил, насколько эффективным решением будет предоставление словарей в виде функции javascript, которая проверяет, какой ключ мы даем, и возвращает правильные значения.

Преимущество этого решения заключается в том, что словари будут кэшироваться без LocalStorage из HTML5, используя только механизм кэширования браузера.

Я провел тест с адресной базой данных, функцией записи, фрагмент которой находится здесь:

window.dict = {};

dict.getStreets = function (sym) {
if (sym == '46') {
    return [["Andrzeja","10028"],["B\u0142o\u0144ska","34182"],["Cisowa","10027"],["Dojazdowa","177799"],["Dolna","126726"],["Dzia\u0142kowa","153180"],["Dzikiej R\u00f3\u017cy","211051"],["Fio\u0142kowa","98636"],["Gimnazjalna","126727"],["Gwia\u017adzista","126728"],["Jana","34189"],["Jod\u0142owa","34183"],["Majowa","34184"],["Mi\u0142a","98637"],["Orzechowa","34185"],["Osiedlowa","153181"],["Polowa","34186"],["Po\u0142udniowa","98638"],["Prosta","211052"],["Purzyckiego","126729"],["R\u00f3\u017cana","211053"],["S\u0142owicza","224648"],["Spokojna","34187"],["Stra\u017cacka","98639"],["Szarotki","34188"],["\u015awierkowa","224596"],["Weso\u0142a","153182"],["Wschodnia","126730"],["Zachodnia","34190"]];
} else if (sym == '98') {
    return [["Bia\u0142ych Brz\u00f3z","177802"],["Calineczki","34192"],["Chabrowa","98640"],["Czarodziejska","98641"],["D\u0142uga","10029"],["Dworcowa","34191"],["Familijna","68666"],["Kasztanowa","153183"],["Konwaliowa","217850"],["Ko\u015bcielna","10030"],["Kr\u0119ta","34193"],["Le\u015bna","177803"],["Lipowa","153184"],["\u0141\u00f3dzka","217851"],["Malownicza","177804"],["Masztowa","217852"],["Milenijna","10031"],["P\u00f3\u0142nocna","10032"],["Przesmyk","10033"],["Romantyczna","34720"],["Skrajna","98642"],["Sosnowa","98643"],["Stokrotki","126731"],["T\u0119czowa","10034"],["Uko\u015bna","68667"],["Urocza","34721"],["Ustronna","98644"],["Zaciszna","34722"],["Zau\u0142ek","217853"]];
} else if (sym == '224') {
    return [["Maj\u0105tkowa","217854"],["Orionist\u00f3w","153185"],["Wiosenna","98645"]];
} else if (sym == '394') {
    return [["Kwiatowa","177805"],["Sochaczewska","217855"]];
} else if (sym == '460') {
    return [["Grodziska","34723"],["\u0141\u0105ki","98647"],["Nowakowskiego","217856"],["\u017buk\u00f3wka","95137"]];
// ...... about 5MB of data goes here
} else return null;
};

Весь JavaScipt имеет длину более 5 МБ.Это работает под FireFox (очень медленно, как я предполагал), IE 9 и Chrome (довольно быстро), но под Opera это не работает.Когда я ограничил размер функции, она работает, но в полном размере нет даже функции getStreets , установленной на dict объект.

Так что я точно вижу, что Operaне позволяет создавать такие большие функции, как только из «больших» браузеров.Мой вопрос: если где-то задокументировано, каковы ограничения, или это просто какое-то переполнение буфера (или что-то подобное) в движке JavaScript в Opera?

update Случай со словарямивдохновение, которое сделало этот код генерируемым.Вопрос заключается в ограничении синтаксического анализатора javascript для Opera, а не так, как можно было бы написать приведенный выше код

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Это известное ограничение, которое скоро станет историческим: оно не имеет никакого отношения к размеру функции, но есть ограничение на количество цепочек операторов if..else if .., которые вы можете иметь.В этом тесте и на моем компьютере ограничение составляет 1020 связанных операторов: http://jsfiddle.net/8RAn8/, но я не уверен, является ли это статическим жестко заданным пределом или зависит от некоторых параметров.Если вы удалите else из цепочки ..else if .., он будет работать нормально: http://jsfiddle.net/8RAn8/1/, и я проверил более 15000, если блоки успешно выполнены без других.собирается исправить эту ошибку и изменить ограничение на что-то ближе к тому, что есть в других браузерах.

0 голосов
/ 23 ноября 2011

Да, есть некоторые ограничения.Нет, я не знаю, кто они такие.Извините, что это довольно бесполезный ответ ..

...