2013-04-10 8 views
5

Tôi đang phát triển một ứng dụng web sử dụng Cache ứng dụng và mọi thứ đang hoạt động tốt trên các trình duyệt máy tính để bàn và trên Android (thậm chí là cả điện thoại di động Android chậm & chậm). Tuy nhiên việc tải xuống appcache đang mất nhiều thời gian hơn nhiều trên iOS 6 trong cả Safari và Chrome.AppCache rất chậm trên iOS

Bộ nhớ cache của ứng dụng của tôi tổng số kích thước chỉ là 2,1Mb và tôi có kết nối Internet 70Mbps (tải xuống) khá vững chắc. Tôi hy vọng bộ nhớ đệm sẽ khá nhanh.

Dưới đây là thời gian của tôi cho đến nay:

  • Desktop Chrome: < 1s(lần tương tự cho Safari & Firefox)
  • Android 2.3.3 Cổ Trình duyệt: ~ 4s(thời gian tương tự cho Chrome & Dolphin)
  • Android 4.2.2 (mô phỏng): ~ 7s (chạy bên trong ứng dụng PhoneGap)
  • iPhone 4S 6.0 Safari: 8 phút !!! (cũng tương tự trong iOS Chrome !!)
  • iPad 2 6.0 Safari: như trên !!!

Tất cả các thiết bị đang sử dụng wifi và kết nối internet giống nhau, và iPhone của tôi/iPad được bằng cách khác hoạt động tốt (không có ứng dụng bản địa trưng bày vấn đề tốc độ internet, và các trang web thường xuyên tải tốt). Có vẻ như có điều gì đó hoàn toàn làm giảm tốc độ tải xuống AppCache trong iOS.

window.applicationCache.status trong suốt thời gian này là appCache.DOWNLOADING và tôi có sự kiện progress đang đếm các tệp khi chúng được tải xuống, vì vậy tôi chắc chắn rằng nó không bị kẹt ở nơi khác. Điều này dường như là thời gian cần để tải xuống. Đưa cái gì?

Hợp đồng bổ sung: iPhone cũng chạy cực kỳ nóng, và pin sẽ giảm rất nhanh trong khi thao tác này. Có vẻ như một cái gì đó đang khiến CPU chạy phẳng trong khi tải xuống này.

(Lưu ý: Tôi không thể xuất bản liên kết tới ứng dụng web ở đây vì chúng tôi vẫn đang ở giai đoạn beta riêng tư, nhưng nếu bạn cần xem trước khi bạn nghĩ mình có thể giúp chẩn đoán nó, gửi email cho tôi theo địa chỉ trong tiểu sử của tôi và tôi sẽ gửi liên kết tới ứng dụng).

+2

Để bắt đầu, hãy ném một trình thám thính TCP vào nó (như [Wireshark] (http://www.wireshark.org/)) để biết ý tưởng về cuộc trò chuyện giữa thiết bị/máy chủ trông như thế nào trong khoảng thời gian 8 phút đó . –

Trả lời

2

OK, tôi đã tìm ra nó với sự trợ giúp của Trình giả lập iOS và Xcode Instruments để cấu hình nó. (Tôi không chắc mình có nên thêm giải pháp của mình vào câu hỏi chính hay câu trả lời, nhưng tôi nghĩ mình sẽ làm theo cách này vì câu hỏi của tôi đã hơi lộn xộn một chút).

Khi nó quay ra, nó thực sự là một số javascript sai gây ra vấn đề, nhưng dường như chỉ trên iOS.

Ứng dụng web được dự định chỉ là một trang cao (không có cuộn dọc, ngoại trừ trong DIV s) cụ thể, do đó, ngoài mã JS chuẩn thông thường để ẩn thanh địa chỉ ...

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

... Tôi cũng đã được thêm vào trong những điều sau đây:

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

Từ nhìn vào kết quả hồ sơ, tôi đã có thể thấy rằng rất nhiều thời gian đã được chi tiêu trong scrollTo, vì vậy nó ngay lập tức chỉ ra điều này là nguyên nhân. Tại sao sự kiện scroll đã được kích hoạt quá nhiều, tôi không có ý tưởng (điều này đã xảy ra mà không hề chạm vào màn hình).

Sửa lỗi ban đầu của tôi là điều tiết mã đó, nhưng bây giờ tôi đang đánh giá liệu tôi có cần nó hay không. Dưới đây là đoạn code tôi có mà sửa chữa nó cho bây giờ (sử dụng jquery-debounce, mà tôi đã được sử dụng cho cái gì khác):

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

Thời gian tải của bộ nhớ cache ứng dụng hiện nay là phù hợp với thời gian Android. Phew!

0

Mã này tự nhận được vào vòng lặp vô hạn , vì lệnh gọi hàm scrollTo ban đầu kích hoạt trình xử lý sự kiện cuộn, sau đó tự động kích hoạt lại chính nó! Dự đoán tốt nhất của tôi là công cụ JavaScript của iOS xử lý vòng lặp vô hạn này khác với các công cụ JavaScript của trình duyệt khác.