Opera上的Javascript函数大小限制?

Opera上的Javascript函数大小限制?,javascript,function,limit,opera,Javascript,Function,Limit,Opera,Opera上的javascript函数长度是否有限制 我已经测试过,提供字典作为javascript函数,测试我们给出的键并返回正确的值是多么有效的解决方案 该解决方案的优点是,字典将在不使用HTML5本地存储的情况下进行缓存,只使用浏览器缓存机制 我已经用地址数据库和写函数做了测试,下面是哪个片段: window.dict = {}; dict.getStreets = function (sym) { if (sym == '46') { return [["Andrzeja","

Opera上的javascript函数长度是否有限制

我已经测试过,提供字典作为javascript函数,测试我们给出的键并返回正确的值是多么有效的解决方案

该解决方案的优点是,字典将在不使用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的长度超过5MB。这在FireFox(我认为速度很慢)、IE 9和Chrome(速度很快)下都能正常工作,但在Opera下却无法正常工作。当我限制了函数的大小时,它可以工作,但对于全尺寸,dict对象上甚至并没有设置函数getStreets

因此,我确信Opera不允许创建如此大的功能,因为只能从“大”浏览器创建。我的问题是,是否有文档记录了限制是什么,或者只是Opera的javascript引擎中的缓冲区溢出(或任何类似的情况)

更新
字典的例子只是一个灵感,使得这段代码得以生成。问题是关于Opera javascript解析器的限制,而不是上述代码的另一种编写方式

是的,存在一些限制。不,我不知道它们到底是什么。很抱歉,这是一个毫无用处的答案。

这是一个已知的限制,很快就会成为历史:它与函数的大小无关,但是链接if..else if。。您可以拥有的语句。在这个测试中,在我的计算机上,限制是1020个链式语句:但我不确定这是一个静态硬编码限制还是取决于一些参数。如果从..else If..中删除
else
。。链接它运行得很好:我已经测试了15000多个if块,在没有其他模块的情况下成功


我们即将修复此错误,并将限制更改为更接近其他浏览器的限制。

顺便说一句,将5MB函数脚本作为测试用例将非常有趣。也许你可以发电子邮件给我?:)是此类测试用例的完美场所。我还想看看/研究Opera的局限性。以下是Opera施加的其他一些人为限制:注意:这没有得到很好的维护。因此,对于原始海报的具体解决方案:如果您只是从代码中删除“else”,它应该可以正常工作,并且在您返回时,它不应该真的对性能产生任何影响:)。请注意,使用switch语句可能会提供更好的性能,但您应该对此进行测试和基准测试,而不是相信我的话。。