2010-07-11 21 views
9

Chẳng bao lâu nữa tôi sẽ cần phải xây dựng một tiện ích mà một số khách hàng của chúng tôi có thể nhúng vào các trang web của riêng họ.JSONP vs IFrame?

Để chứng minh tương lai của tôi phụ tùng mã nhúng sẽ là một cái gì đó như thế này:

<script type="text/javascript" src="path/to/remote/file.js"></script> 
<div id="my_widget"></div> 

những điểm mạnh và điểm yếu của iframe vs JSONP là gì?

Có bất kỳ vấn đề SEO phổ biến nào với iframe không?

Trả lời

9

Trước hết, iframe và jsonp không loại trừ lẫn nhau: một là phương tiện hiển thị, phương tiện kia là phương tiện giao tiếp.

Lựa chọn của bạn khá phù hợp giữa việc đưa vào tài liệu (tạo tiện ích trong DOM máy chủ) hoặc đưa vào iframe (có DOM mới, riêng biệt cho tiện ích con).

Lợi thế của khung nội tuyến là hộp cát: không có sự va chạm giữa tiện ích của bạn và javascript và css của máy chủ. Điều đó có nghĩa bạn có thể một cách an toàn:

  • sử dụng/xác định bất kỳ thư viện javascript bạn muốn
  • sử dụng đơn giản mã html cùng với quy tắc css đơn giản (đó là một phần thưởng rõ ràng để bảo trì)

Đối với nhược điểm:

  • một iframe là nặng trọng lượng và nghiêm túc có thể làm chậm trang chủ render
  • các iframe sẽ còn khuyết điểm ume nhiều bộ nhớ và tài nguyên hơn, có thể là vấn đề nếu trang chủ được nhắm mục tiêu theo số điện thoại di động

Vì vậy, nếu hợp lý để giả sử những người sử dụng tiện ích của bạn sẽ sẵn sàng "điều chỉnh" trang của họ cho nó, đi theo cách tài liệu. Nếu không, hãy sử dụng iframe nhưng hiểu các giới hạn.

Đối với các vấn đề về SEO, miễn là bạn tự động tạo tiện ích (cho dù đó là tài liệu hoặc với khung nội tuyến), công cụ tìm kiếm sẽ không nhìn thấy nó. Tôi không biết nếu đó là những gì bạn muốn, nhưng đó là những gì bạn sẽ nhận được;)

+0

Theo như hiệu suất, khung nội tuyến không nhất thiết cung cấp thêm chi phí tải hơn JSONp (và trên thực tế, nhiều chi phí cung cấp ít chi phí). Khung nội tuyến có thể tải không đồng bộ, trong khi tiện ích con do JSONp điều khiển có thể yêu cầu trang tải đầy đủ và sau đó thêm tham chiếu vào tài nguyên bên ngoài, mở rộng tải trang. – mattbasta

+4

Tôi đã làm việc với rất nhiều nhà cung cấp quảng cáo và tôi có thể đảm bảo với bạn rằng giải pháp liên quan đến iframe là kẻ giết người thực hiện. Có một sự khác biệt giữa thời gian nó sẽ đưa các widget để tải (ví dụ nếu nó cần tài liệu để sẵn sàng) và thời gian nó sẽ đưa cho trang chủ để render và có thể sử dụng được. Nếu những gì bạn ngụ ý về JSONP là đúng, thì không ai có thể tư vấn tải kịch bản động như một giải pháp để hiển thị trang nhanh. –

1

Heres một số slide từ một bài thuyết trình về scripting miền chéo bởi Alex Sexton

http://www.slideshare.net/SlexAxton/breaking-the-cross-domain-barrier

Đáng tiếc là nó chỉ là slide như vậy là thiếu các giải thích kèm theo nhưng có thể hữu ích

+0

Đây là màn hình diễn viên giống nhau. PHẢI XEM cho bất kỳ ai dùng loại nhiệm vụ này. http://alexsexton.com/?p=168 –

+0

Việc lấy từ bài thuyết trình này là nếu bạn đang làm công cụ trên nhiều trình duyệt hiện nay và KHÔNG sử dụng thư viện như EasyXDM, bạn đang làm sai. Bạn đang viết mã bạn không cần phải viết, và bạn có thể không làm điều đó đúng, và bạn có thể bỏ lỡ những thay đổi trong thông số kỹ thuật. Các thư viện sẽ được cập nhật với các thay đổi và sử dụng phương thức thích hợp và/hoặc tốt nhất cho bất kỳ trình duyệt nào mà người dùng của bạn đang sử dụng. –

+0

Thật tuyệt khi thấy một số tài liệu từ bản trình bày trong câu trả lời của bạn – Crowie

0

Nếu bạn đang thực hiện cuộc gọi API và chỉ tìm nạp dữ liệu, JSONP sẽ cho kết quả hoạt động tốt hơn. Nếu bạn đang hiển thị mọi thứ, thì bạn phải sử dụng iframe. Nếu bạn muốn ngăn không cho trang web lưu trữ truy cập vào dữ liệu tiện ích, iframe là cách để đi. Nhưng nếu dữ liệu của bạn là công khai, thì JSONP sẽ dẫn đến việc triển khai đơn giản hơn (vì iframe có nghĩa là bạn cần xử lý thay đổi kích thước). Mặt khác, iframe cung cấp hộp cát CSS tốt, vì vậy bạn sẽ không va chạm với CSS của trang chủ.

0

Tôi chọn sử dụng JSONP. Bạn có thể xem chi tiết về cách tôi triển khai tại đây: if I allow partner sites to republish my RSS feed, will that boost my SEO ranking?

Một số người đã đưa ra ý kiến ​​của họ về SEO.Tôi vẫn không chắc chắn, tuy nhiên, nếu nó giúp SEO. Tôi chỉ có một ý tưởng để kiểm tra nó mặc dù, và tôi sẽ mang nó ra ngay bây giờ! Tôi sẽ tạo một trang chỉ với JavaScript để hiển thị tiện ích (nguồn cấp dữ liệu trong trường hợp này). Sau đó, tôi sẽ sử dụng Công cụ quản trị trang web của Google để xem Google có chọn bất kỳ từ khóa nào trong nội dung nguồn cấp dữ liệu hay không. Tôi sẽ đăng câu trả lời cho liên kết ở trên sau khi tôi nhận được kết quả.

Chúc chúng tôi điều tốt nhất!

Matt