SORU
28 Ocak 2011, Cuma


Nesneleri tarayıcımda JavaScript boyutunu sınırlar işleyebilir ulaştı?

Benim HTML, bu şaşılacak bir şey yok) gibi <script> etiketleri büyük bir dizi gömme ediyorum:

<script>
    var largeArray = [/* lots of stuff in here */];
</script>

Bu örnekte, dizi 210,000 unsurlar var. İyi 2 teorik maksimum aşağıda31-Büyüklükte 4 emir. İşte eğlenceli kısmı: ben JS kaynak dosyası için dizisi için kaydederseniz, bu dosya >44 megabayt (46,573,399 bayt, tam olarak).

Eğer kendiniz için görmek isterseniz, 10**. (Orada bulunan tüm verileri konserve, çok tekrarlanır. Bu üretim içinde bu durum söz konusu değildir.)

Şimdi, hakkında gerçekten endişeleniyorumhizmeto kadar veri. Benim server gerçekten bu kadar uzun kablo üzerinden veri almak olmaz, yanıtları partimage ile yedeklerinizi, gzip,. Ancak, bu sayfa, bir kez yüklü, çok kötü bir eğilim vardırcrashtarayıcı. Hiç YANİ (bu dahili bir araçtır) test ediyorum. Benim birincil hedefleri ve Firefox 3.6 Krom 8.

Firefox, oldukça yararlı bir hata konsolu görebiliyorum:

Error: script stack space quota is exhausted

Krom, ben sadece üzgün-sekme sayfasını almak:

enter image description here

Konuya zaten

  • Bugerçektenbizim modern, "yüksek performans" tarayıcılar ele? çok fazla veri
  • * İncelikle bu kadar veriyi işlemek için yapabileceğim bir şey var mı?

Bu arada, Chrome, bu on-ve-off (okuma: sekme kazası) iş bulabildim. Gerçekten Chrome, en azından, zor bir şey olduğunu düşündüm, ama görünüşe göre yanılmışım...


1 düzenleyin

@Crayon: haklı olmak istemezdimnedenTarayıcıya bu kadar veriyi bir anda terk etmek istiyorum. Kısa versiyon: ya ben bu değil-kolay kuşkusuz () sorunu çözmek, ya da başka sorunlar bir sürü çözmek zorunda kalıyorum. Şimdilik daha basit bir yaklaşımı tercih ediyorum.

@çeşitli: şu anda, özellikle de aslında dizideki öğe sayısını azaltmanın yollarını arıyorum. Ajax belleği uygulamak veya ne varsa ben biliyorum, ama o başka benim için sorunları kendi belirledi konusunda tanıttı.

@Phrogz: her element bu gibi görünüyor

{dateTime:new Date(1296176400000),
 terminalId:'terminal999',
 'General___BuildVersion':'10.05a_V110119_Beta',
 'SSM___ExtId':26680,
 'MD_CDMA_NETLOADER_NO_BCAST___Valid':'false',
 'MD_CDMA_NETLOADER_NO_BCAST___PngAttempt':0}

@: Ama ben bir bilgisayar ile bir 4 çekirdekli işlemci, 6 GB RAM, yarım terabayt disk alanı ...ve ben bile sorduğum için tarayıcı bunu yapmak için hızlı bir şekilde - ben sadece sorduğun içinhiç!


2 düzenleyin

Görev tamamlandı!

Juan Guffa, spot-on önerileri ile çalışmak için bu almak mümkün oldu! Sorun sadece ettiği görülüyorayrıştırmakaynak kodu, bellek ile işiniz değil aslında.

Küçük olanları bir dizi büyük dizi ayrıldı, ve 7* *onlara sonra gerekti, ama yeterli değildi. Juan'ın cevap yorum bataklığına özetlemek gerekirse: Benayrıcavar ayrı tablolar içine koymak zorunda kaldı. Bu gibi:

var arr0 = [...];
var arr1 = [...];
var arr2 = [...];
/* ... */
var bigArray = arr0.concat(arr1, arr2, ...);

Bunu çözmek için, emeği geçen herkes için:teşekkür ederim.İlk içkiler benden!


*görünenden başka: tarayıcıya göndermek daha az veri

CEVAP
28 Ocak 2011, Cuma


Burada denemek istediğim de buydu: 44MB dosya demiştin. Kesinlikle bellek 44MB daha fazla, RAM, belki yarım bir konser çok 44MB alır tahminimce alır. Sadece tarayıcı ne kadar tarayıcı kullanır kaza ve görmediği kadar veri kısmak misiniz?

Sadece sunucu üzerinde çalışan uygulamalar bile 44MB dosya okuma ve hafızada tutmak için hizmet verilebilir. Tüm söyledikten, tarayıcı ele almak gerekir inanıyorum, bana bazı testler yapalım.

(Windows 7 bellek, 4GB kullanarak)

İlk Test Yarım dizisinde kestim ve sorun yok, 80 MB kullanır, kaza

İkinci Test İki ayrı dizi içinde dizi ayrıldım, ama hala tüm verileri içeren, 160 MB kullanır, kaza

Üçüncü Test Firefox yığın dışarı koştu söyledi, çünkü sorun dizi ayrıştırmak olmaz muhtemelen aynı anda. İki ayrı dizi arr3 = dizi1 yaptı, dizi1, arr2 yarattım.herhangi bir parametre arr2); iyi koştu ve sadece biraz daha fazla bellek kullanır, 165MB civarı.

Dördüncü TestBu dizi 7 (22 MB) oluşturma ve bunları tarayıcı sınırlarını test etmek concatting ediyorum. Sayfanın yüklenmesini tamamlamak için yaklaşık 10 saniye sürer. Hafıza 1.3 GB kadar gider, sonra geri 500 aşağı gidiyor. Evet krom işleyebilir. Sadece konsolun hata iletisi tarafından fark edilebilir olarak özyineleme bir tür kullanır, çünkü hepsini bir anda ayrıştırabilir.

CevapAyrı diziler (20 MB daha az) oluşturmak ve onları herhangi bir parametre.

Hala sadece gerekli bir parçasıdır getiriliyor düşünün, tarayıcı halsiz yapabilir. eğer dahili bir görev olduğunu, ancak bu iyi olmalı.

Son nokta: maksimum bellek düzeyde değilsin, sadece max ayrıştırma düzeyleri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007