2011-12-31 3 views
0

나는 사용자가 JSON 형식으로 5000 개 기록을 다운로드하는 센차 터치 응용 프로그램을 쓰고 있어요 그리고 그들과 함께 Ext.List 제어를 populte됩니다 충돌합니다. JSON.parse (...)를 사용하고 있기 때문에 앱이 레코드를 정상적으로 다운로드 한 다음 로컬 스토리지 저장소를 사용하여이 데이터를 목록에 추가합니다. 자바 스크립트 코드는 iOS의 사파리

나는 목록을 보려고

는 응용 프로그램 충돌 및 크롬에 많이 떨어진다. 나는이 코드를 엉망으로하고 뭔가가있을 수 있습니다 생각하지만이 바이올린 http://jsfiddle.net/Z8GVm/1/와 iOS의 사파리에서 테스트를 시도 할 때, 그것은 사파리가 응답하지 던지고있다. 자바 스크립트로 iOS 사파리에서 많은 데이터를 보관해야하지 않습니까? 이것이 사실이라면, 웹이 네이티브 앱이 할 수있는 모든 것을 할 수 있다고 가정하기 때문에 여전히 성숙하지 않다는 논쟁이 있습니다. 가능성이 너무 많은 데이터가 브라우저가 어떤주기와 모바일 브라우저가 아무 말도없이 연속적으로 처리 할 수있어 iOS의 사파리 http://jsfiddle.net/Z8GVm/1/

+1

나는 내 휴대 전화에서 5000 것들의 목록을 통해 플립 싶어 모르겠어요. – Pointy

+0

그것은 단지 사파리를 무의미하게 던지고 강제로 닫을 수 있습니다. – Neutralizer

+0

네이티브 대 웹 성능의 증거로 이것을 사용하는 것은 조금 우스꽝 스럽습니다. – sciritai

답변

2

에 시도 크롬 http://senchafiddle.com/#gxtZ9

봅니다 자바 스크립트가 응답하지 간 생각한다. 내 쿼드 코어 데스크톱에서 처리하는 데 몇 초가 걸립니다.

당신은 덩어리로 그것을 깰 브라우저이 같은 각 청크 사이의 (a setTimeout와) 호흡을 줄 수 있습니다. 데모 위치 : http://jsfiddle.net/jfriend00/XFgAa/. 이것은 모든 행에 document.write()을 사용하는 이전 버전보다 몇 배 더 빠릅니다. 객체의 데이터를 누적하고 한 번에 하나의 DOM 작업에 모두 추가하므로이 새로운 버전의 DOM 작업 수가 1/27이되기 때문입니다.

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("&nbsp;&nbsp;&nbsp;"); 
       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(); 

참고로, 모바일 브라우저에서 사용 가능한 메모리 나 더 빨리 당신이 정말로 페이지 또는에 데이터의 거대한 양을 넣어해서는 안 있도록 데스크톱 브라우저로보다 로컬 스토리지 몇 가지 한계를 명중합니다 로컬 저장소에 저장합니다.

+0

대기,하지 5메가바이트 로컬 스토리지에 HTML5 표준 기본을 기리는 모든 장치 (적어도)? –

+0

@ JeffreySweeney - HTML5에는 5MB가 필요하다고 말하는 실제 표준은 없지만 대부분의 구현에서는 최대 5MB까지 허용하는 것으로 보이며 이는 iOS에서 기본으로 표시됩니다. 모바일 장치는 전체 저장 용량이 훨씬 적기 때문에 로컬 저장소를 "오래 사용"하고 데스크톱 브라우저보다 빨리 제거해야 할 수 있습니다. 쿠키와 마찬가지로 로컬 저장소가 영원히 유지된다는 보장은 없습니다. – jfriend00

+0

당신 말이 맞아요 ... – Neutralizer

관련 문제