2012-04-17 39 views
11

Tôi đang tạo trang web có cuộn vô hạn. Tức là, khi người dùng cuộn xuống cuối trang, một khối nội dung mới được thêm vào phía dưới. Nó rất giống với Facebook. Dưới đây là ví dụ về 3 trang được tải:Làm cách nào để lưu một chồng nội dung AJAX vô hạn khi người dùng rời khỏi trang?

_________ 
|   | 
| 0 | 
|_________| 
|   | 
| 1 | 
|_________| 
|   | 
| 2 | 
|_________| 

Khi người dùng nhấp vào một cái gì đó trên trang cuối cùng, tôi đưa họ đến trang chi tiết riêng. Nhưng nếu người dùng nhấp lại vào trang kết quả tìm kiếm, tôi không có bộ nhớ về vị trí trước đó của họ và phải tải lại trang 0.

_________ 
|   | 
| 0 | 
|_________| 

tôi biết một số phương pháp cũ-trường để giải quyết điều này, nhưng họ đều có một số vấn đề nghiêm trọng:

URL Hash

tôi có thể cập nhật URL mỗi khi một trang mới được tải. Ví dụ: www.website.com/page#2. Khi người dùng truy cập trang chi tiết và quay lại, URL cho tôi biết trang được tải cuối cùng, vì vậy tôi tải trang đó cho anh ấy:

_________ 
|   | 
| 2 | 
|_________| 

Nhưng đây là trải nghiệm người dùng kém. Chỉ trang 2 được tải. Người dùng không thể cuộn lên để xem nội dung cũ hơn. Tôi không thể tải các trang 0, 1 và 2 vì điều đó sẽ làm quá tải máy chủ, xem xét nút quay lại chiếm 50% lưu lượng truy cập web (nghiên cứu của Jacob Nielsen).

Bộ nhớ cục bộ

Cookie không có khả năng lưu trữ nhiều trang dữ liệu. Local Storage phải có đủ không gian. Một ý tưởng là lưu trữ tất cả các trang được tải vào Bộ nhớ cục bộ. Khi người dùng quay lại kết quả tìm kiếm, tôi tải từ bộ nhớ cục bộ thay vì nhấn vào máy chủ. Vấn đề với cách tiếp cận này là một phần lớn người dùng của tôi ở trên các trình duyệt không phải là support local storage (IE7).

+0

Tại sao tải tất cả các trang bạn đã hiển thị cùng một lúc quá tải máy chủ khi yêu cầu chúng 1 tại một thời điểm sẽ không? – Tejs

+2

… với bộ nhớ vô hạn. – Phrogz

+1

@Tejs: Tôi đã suy nghĩ không chính xác. Tôi có nghĩa là tải một trăm trang cùng một lúc là chậm cho người sử dụng và những nơi không cần thiết gánh nặng trên máy chủ. – JoJo

Trả lời

1

Với những hạn chế về vấn đề của bạn, giải pháp hợp lý duy nhất tôi có thể nghĩ là lưu vào bộ nhớ cache các trang trước và sau đó tải chúng nếu người dùng cuộn lên. Thao tác này sẽ cuộn thanh cuộn lên của bạn và cho phép bạn kích hoạt tải nếu người dùng tra cứu. Ngoài ra nếu bạn muốn có được một chút ưa thích hơn tôi sẽ cố gắng tìm ra một cách để đóng băng thanh cuộn để ngăn chặn người dùng di chuyển lên qua trang chưa tải trước đó. Bằng cách này, họ sẽ không thể kích hoạt nhiều lần tải trang cùng một lúc.

1

Thay vì đưa người dùng đến trang chi tiết riêng biệt hoàn toàn, thay vì sao không chỉ ẩn nội dung cuộn chính, tải nội dung chi tiết qua Ajax/XMLHttpRequest() và sau đó hiển thị nội dung đó? Nói cách khác, giống như Facebook làm thế nào. Tôi cho rằng bạn có thể làm điều này hay không phụ thuộc vào nội dung là gì và liệu đó có phải là thứ bạn đang thiết kế và kiểm soát hay không.

+1

Bạn thậm chí có thể thay đổi url và xử lý nút quay lại bằng cách sử dụng 'history.pushState' và' window.onpopstate' :-) –

+0

@Rocket: Điều đó rất thú vị và tôi không biết gì về điều đó. Đó là một cái gì đó mà một dự án của riêng tôi, mà hoàn toàn sử dụng Ajax để thao tác rất nhiều nội dung trong một trang duy nhất, thực sự sẽ được hưởng lợi từ. Rất cám ơn vì đã chia sẻ. – Trevor

+0

Trang chi tiết nằm ngoài tầm kiểm soát của tôi. Tôi phải đi đến một trang vật lý mới. – JoJo

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