Tôi có câu hỏi dài hơn một chút cho bạn - nhưng câu trả lời hy vọng sẽ rất đơn giản :)Tại sao iframe lại chậm?
Giả sử tôi có trang rất đơn giản với liên kết và iframe (chỉ cho ví dụ đơn giản).
<body>
<a href="test.html" target="mframe">open link></a>
<iframe name="mframe" [params] />
</body>
Vì vậy, khi bạn nhấp vào liên kết, nó sẽ tải test.html trong khung.
Bây giờ tôi sẽ thay đổi iframe bằng lệnh gọi div và ajax.
<body>
<a href="doAjaxCall('test.html')">open link</a>
<div id="main-content"></div>
</body>
Các doAjaxCall sẽ chỉ cần sử dụng GET ajax requset để có được toàn bộ phản ứng, phân tích nó (sử dụng JavaScript) và nội dung lấy trong cơ thể < > thẻ và đặt nó vào chính-content.innerHTML.
test.html chứa nhiều html, cũng kiểu css (nhưng giống như trên trang gốc - vì vậy tôi không cần chúng khi tôi đang sử dụng giải pháp ajax).
Câu hỏi:
Tại sao là giải pháp ajax này SO nhanh hơn? Tôi vẫn đang tải xuống cùng một lượng dữ liệu (tải xuống toàn bộ test.html).
Tại sao giải pháp iframe quá chậm? Có phải vì trình duyệt phải phân tích cú pháp tất cả các kiểu có thể một lần nữa không? Hoặc có bất kỳ chi phí nào khác của iframe không?
Bạn có thấy hành vi tương tự trong nhiều trình duyệt không? – ChristianLinnell
Thực ra ví dụ của tôi rất đơn giản. :) Trong thực tế, tôi đã thử giải pháp này trên một trang web lớn hơn, nơi chúng tôi đang sử dụng iframes ngay bây giờ. Tôi đã gỡ bỏ chúng và thay thế chúng bằng giải pháp ajax đó. Như tôi đã viết, tôi chỉ thay thế các liên kết bằng các cuộc gọi ajax, nhưng lưu lượng truy cập vẫn như cũ. Và có, nó chắc chắn nhanh hơn trong mọi trình duyệt (IE/FF/CH/SAF). Lý do duy nhất tôi có thể thấy bây giờ là trình duyệt không cần phải tải kiểu một lần nữa và một lần nữa chỉ cần thay thế innerHTML của 'nội dung chính' div. Cảm ơn! Pavol. – palig
Nếu biểu định kiểu của bạn nằm trong tệp css chuyên dụng được gọi qua thẻ liên kết, thì trình duyệt sẽ tận dụng bộ nhớ đệm và chỉ tải nó một lần. btw Tôi tò mò xem iframe của bạn chậm hơn bao nhiêu - chúng ta đang nói mili giây, đúng không? – Christophe