2014-06-26 18 views
5

Bây giờ điều này đã có một chút công bằng ở đây vì vậy tôi đoán tôi đang tìm một lời giải thích chứ không phải là sửa chữa (mặc dù đó sẽ là ace), nhưng bộ nhớ đệm ngược/chuyển tiếp của Safari rất ghê gớm .Safari và bộ nhớ cache tham lam tham lam

Tôi gặp sự cố khi biểu mẫu gửi, nhưng tải cửa sổ phương thức xen kẽ trước khi chuyển sang trang hành động biểu mẫu. Trên Safari, bộ nhớ đệm mạnh đến nỗi nút quay lại có phương thức mở vẫn khiến cho linh hồn tôi rất buồn.

Tôi đang hack xung quanh nó bằng cách loại bỏ phương thức và sau đó gửi biểu mẫu. Ngày trở lại trình duyệt có một nửa phương thức đóng (đó là Bootstrap để nó mất dần) mà sau đó chỉ mang về sa thải.

Bây giờ tôi biết về onunload = "" nhưng làm mới trang dường như có vẻ điên rồ. Bộ nhớ đệm là một điều tốt và một cái gì đó bạn muốn, đặc biệt là trên điện thoại di động.

Tôi đoán câu hỏi của tôi là:

Tại sao nó quá nhiều căng thẳng hơn nói Chrome và là có anyway buộc trình duyệt để cache một nhà nước thay vì chỉ các trạng thái cuối cùng?

Cảm ơn

+0

Bạn không thể tắt chức năng mờ dần trước khi loại bỏ phương thức và sau đó kích hoạt lại khi trang được hiển thị lại? – CupawnTae

+0

Vâng, đó là những gì đang xảy ra. Có một số biến chứng chỉ thị AngularJS. – SpaceBeers

Trả lời

3

Hah, tham lam là một cách nói quá! Thành thật mà nói, 99% thời gian, thiết kế caching đằng sau Safari là cách lý tưởng để xử lý các chuyển tiếp trang trên thiết bị di động.

Khi bạn đi từ Trang A đến Trang B, và sau đó quay lại Trang A, bạn không muốn gây gánh nặng cho thiết bị (băng thông, tuổi thọ pin) với tìm nạp tài nguyên và nội dung, khi bạn chỉ có thể "tạm dừng" trạng thái giữa các tương tác và sau đó "tiếp tục" khi bạn điều hướng trở lại.

Đó chính là những gì Safari Mobile thực hiện. Họ sử dụng khái niệm Page Cache, giúp giữ toàn bộ trang trực tiếp trong bộ nhớ khi bạn điều hướng từ trang này đến người khác. Điều này làm giảm nhu cầu tìm nạp các tài nguyên đó và cho phép tương tác linh hoạt khi nhấp lại.

Thật tuyệt vời và tất cả ... nhưng nó dẫn đến các sự cố (chẳng hạn như vấn đề bạn đã đưa ra) - Cụ thể, làm thế nào để bạn phân biệt giữa một trang bị tạm ngưng và trang nào đã bị hủy?

Rất may, WebKit cung cấp sự kiện pageshowpagehide nhấn vào Page Cache. Ngoài việc kích hoạt khi trang hiển thị hoặc ẩn (tương tự như onunload), nó có khả năng tiện lợi để cho biết liệu một trang có là persisted hay được đặt vào Bộ nhớ cache của Trang.

Mặc dù đây không phải là giải pháp hoàn hảo, bạn có thể kiểm tra sự kiện pageshow để kiên trì và sau đó xử lý trực tiếp phương thức (vì bạn biết nó đã được lưu trong bộ nhớ cache).

Nếu bạn chưa sẵn sàng, hãy nhìn vào hai liên kết này ở đây:

https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

Họ làm một công việc tuyệt vời giải thích Page Cache và bao gồm các mẫu mã của sự kiện pageshowpagehide Tôi đã tham khảo trước đó.

Hy vọng điều này sẽ hữu ích!

+0

Thực sự hữu ích. Cảm ơn. Giải quyết vấn đề của tôi nhưng trong một trang viên khó chịu. – SpaceBeers

Các vấn đề liên quan