2010-09-26 38 views
5

Tôi nên sử dụng kết nối chrome ở điểm nào? Có bao giờ là một lý do chính đáng để sử dụng cả việc truyền thông điệp đơn giản và kết nối lâu dài không? Hai công cụ này có tác động hiệu suất riêng biệt không?Tiện ích mở rộng của Chrome: kết nối chrome đơn giản và kết nối chrome

Có tài liệu nào khác ngoài http://code.google.com/chrome/extensions/messaging.html so sánh hai phương pháp này không?

(chỉnh sửa: tài liệu chuyển đến https://developer.chrome.com/extensions/messaging)

+0

cho bất kỳ người xem nào trong tương lai, tôi tin rằng 'sendmessage' sử dụng' chrome.runtime.connection', mở cổng, sau đó đóng cổng sau khi một tin nhắn được gửi đi, do đó về hiệu suất, chúng phải giống nhau. Hãy thử 'console.log (sendResponse)'. –

Trả lời

7

Theo kinh nghiệm cá nhân của tôi với văn bản mở rộng, tôi có xu hướng sử dụng sendMessage để khởi tạo trạng thái, và kết nối với bất kỳ thời điểm mà tôi muốn gửi những điều lặp đi lặp lại.

Ví dụ: tiện ích mở rộng của tôi thường có tùy chọn có thể định cấu hình người dùng và tôi cần một cách để gửi các tùy chọn đó đến tập lệnh nội dung của mình. Tôi sử dụng sendMessageonMessage để chuyển đối tượng JSON đến tập lệnh nội dung của mình. Đối tượng này chứa nhiều cài đặt do người dùng điều khiển khác nhau và có thể cả trạng thái khác.

Tôi cũng đã tạo một thư viện nhỏ cho phép xác định phím tắt trong trang nền. Cách hoạt động đơn giản: một tập lệnh nội dung được chèn vào mỗi trang, sau đó nghe các sự kiện keydownkeyup.

Khi sự kiện xảy ra, nó sử dụng chrome.runtime.connect để liên lạc với trang nền. Tôi nghĩ đây là một ví dụ tuyệt vời về thời điểm kết nối lâu dài sẽ hữu ích hơn nhiều cuộc gọi sendMessage.

Tôi không nghĩ có bất cứ điều gì yêu cầu bạn sử dụng chúng theo cách này hay cách khác ... bạn có thể sử dụng nhiều sendMessage hoặc chỉ gửi một tin nhắn có kết nối. Tôi tin rằng đó là vấn đề ngữ nghĩa và lựa chọn công cụ nào có ý nghĩa nhất đối với công việc. Hãy nhớ rằng, việc sử dụng kết nối giúp dễ dàng lưu trữ trạng thái riêng biệt cho mỗi kết nối, trong khi đó có thể khó khăn hơn khi thực hiện với sendMessage.

Đối với hiệu suất ... Tôi thực sự không biết, nhưng tôi mong đợi ít nhất là tương tự, tức là gửi 5 sendMessage sẽ tương đương với việc gửi 5 tin nhắn có kết nối. Hãy nhớ rằng chúng không đồng bộ, do đó, thời gian có thể dao động tùy thuộc vào hoàn cảnh.

1

Để thêm vào câu trả lời khác, việc sử dụng cổng có lợi thế bổ sung ở dạng sự kiện onDisconnect.

Giả sử tập lệnh nội dung mở kết nối với trang nền. Trang nền sau đó sẽ được thông báo ngay lập tức về tập lệnh nội dung đang được tải xuống nếu tab bị đóng hoặc người dùng điều hướng đi.

Điều này cũng cho phép theo dõi các tab đang mở (với tập lệnh nội dung được tiêm) mà không cần sử dụng quyền tabs.

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