2013-04-10 7 views
5

응용 프로그램 캐시를 사용하는 웹 응용 프로그램을 개발 중이며 모든 것이 데스크톱 브라우저와 Android에서 매우 잘 작동합니다 (심지어 매우 오래된 & 느린 안드로이드 핸드셋). 그러나 appcache를 다운로드하는 것은 Safari와 Chrome에서 iOS 6에 훨씬 더 오래 걸립니다.iOS에서 몹시 느리게 AppCache를 느리게

내 응용 프로그램 캐시 합계 크기는 2.1Mb에 불과하며 70Mbps (다운로드) 인터넷 연결이 있습니다. 나는 캐싱이 꽤 빠를 것이라고 기대한다.

여기 내 시간은 지금까지 있습니다 :

  • 데스크톱 크롬 : < 1 초(사파리 & 비슷한 시간 파이어 폭스)
  • 안드로이드 2.3.3 주식 브라우저 : ~ 정(비슷한 시간에 크롬 & 돌고래)
  • Android 4.2.2 (에뮬레이션 됨) : ~ 7s (PhoneGap 앱에서 실행 중)
  • iPhone 4S 6.0 Safari : 8 분 !!! (iOS Chrome에서도 거의 동일합니다.)
  • iPad 2 6.0 Safari : 위와 같이 !!!

이러한 장치의 모든는 같은 와이파이 및 인터넷 연결을 사용하고 있으며, 내 아이폰/아이 패드 그렇지 않으면 잘 작동하지 않습니다 (인터넷 속도 문제를 전시 네이티브 응용 프로그램을 정기적으로 웹 사이트 부하 잘). iOS에서 AppCache 다운로드 속도를 절대적으로 떨어 뜨리는 무언가가있는 것 같습니다.

이번에는 appCache.DOWNLOADING이고, 다운로드 할 때마다 파일 수를 계산하여 progress 이벤트가 발생했습니다. 그래서 다른 곳에서 멈추지 않을 것이라고 확신합니다. 이것은 다운로드하는 데 걸리는 시간과 같습니다. 뭐라 구요?

추가 정보 : iPhone도 터무니없이 뜨겁습니다.이 작업 중에 배터리가 매우 빠르게 작동합니다. 무언가가 일 경우 CPU가이 다운로드 중에 플랫 아웃으로 실행됩니다.

(참고 : 아직 비공개 베타 버전이므로 웹 앱에 대한 링크를 게시 할 수 없습니다. 그러나 진단을 돕기 위해서는 미리 확인해야합니다. 내 프로필의 주소로 이메일을 보내면 앱 링크가 전송됩니다.)

+2

시작하려면 [Wireshark] (http://www.wireshark.org/)와 같은 TCP 스니퍼를 시작하여 8 분 동안 장치/서버 간의 대화가 어떻게 생겼는지 생각해보십시오 . –

답변

2

좋아, iOS 에뮬레이터 및 Xcode Instruments의 도움을 받아 프로필을 작성했습니다. (내 질문을 내 질문에 이미 포함시키지 않았는지, 아니면 대답으로 대답해야하는지 잘 모르겠다.

실제로 밝혀졌지만 실제로는 문제가되는 잘못된 자바 스크립트 였지만 iOS에서만 발생했습니다.

web-app는 주소창을 숨기기위한 일반적인 표준 JS 코드 외에도 단일 페이지 높이 (특정 DIV 초를 제외하고는 수직 스크롤이 없음)로되어 있습니다 ...

 window.addEventListener("load",function() { 
      // Set a timeout... 
      setTimeout(function(){ 
       // Hide the address bar! 
       window.scrollTo(0, 1); 
      }, 0); 
     }); 

... 나는 또한 다음과 같은 추가했다 :

 $(document).scroll(
      function(e){ 
       window.scrollTo(0, 1); 
      }); 

을 프로파일 결과보고에서, 나는 시간의 많은scrollTo에 지출되는 것을 볼 수 있었다 그래서 즉시 원인으로 지적했다. scroll 이벤트가 너무 많이 발생하는 이유는 무엇입니까? (화면이 전혀 표시되지 않는 상태에서 발생했습니다.)

내 초기 수정 프로그램은 해당 코드를 조정하는 것이지만 지금은 필요가 없는지 여부를 평가 중입니다.

 $(document).scroll(
      $.throttle(function(e){ 
       window.scrollTo(0, 1); 
      }) 
     , 10); 

응용 프로그램 캐시의 다운로드 시간은 안드로이드 시대에 맞춰 지금 : 지금 여기 (나는 이미 다른 무언가를 위해 사용 된, jquery-debounce 사용)을 위해 그것을 수정 내가 가지고있는 코드입니다. 휴!

0

초기 scrollTo 함수 호출이 scroll 이벤트 핸들러를 트리거 한 후 코드 자체가 반복적으로 다시 트리거되므로 코드가 무한 루프이됩니다. 내 생각 엔 iOS 자바 스크립트 엔진이이 무한 루프를 다른 브라우저의 자바 스크립트 엔진과 다르게 처리한다는 것입니다.