2015-11-27 22 views
5

Chúng tôi có một tiện ích JavaScript tải dữ liệu từ một URL.URL để giải quyết trong dữ liệu trang?

Để giảm các chuyến đi khứ hồi, tôi muốn tránh yêu cầu HTTP thứ hai và đưa dữ liệu vào trang HTML.

Sẽ thật tuyệt nếu tôi có thể để nguyên tiện ích JavaScript không thay đổi.

Có sơ đồ URL nào để đọc dữ liệu từ trang HTML hiện tại không?

Ví dụ: Thay vì https://.... này dom://....

+0

Một chiến thắng lớn với HTTP là bộ nhớ đệm nặng. Đây có phải là GET có thể được lưu trữ không? Nếu vậy, không cần phải "tránh yêu cầu HTTP thứ hai" vì nó sẽ được trình duyệt lưu vào bộ nhớ cache và quay lại ngay lập tức. – Clev3r

+0

Có, bạn nói đúng. Tôi thích caching cho bao giờ hết, kể từ khi xác nhận (ví dụ như e-Tags) sẽ làm một yêu cầu http thứ hai một lần nữa. Bình luận của bạn là tốt hing. Nếu bạn mã băm tổng hợp vào URL, tôi có thể lưu trữ dữ liệu cho bao giờ hết. – guettli

Trả lời

1

Tôi cũng là người ủng hộ dữ liệu vì chúng là cách minh bạch nhất (mã khách hàng) để triển khai nhúng dữ liệu trong các trang web.

Tuy nhiên, trước tiên chúng được sử dụng để nhúng hình ảnh nhỏ và các tài nguyên khác có thể cản trở hiệu suất do phí kết nối và cũng là parallel download limitations of HTTP/1. Sự cân bằng rất tinh tế vì mã hóa dữ liệu vì dữ liệu có thể gây ra (ước tính ballpark) là 30% increase in data size, tuy nhiên điểm quan trọng trong đó dataURIs ngừng hữu ích xung quanh kích thước của hình ảnh nhỏ, thường là các đơn đặt hàng có độ lớn trên dữ liệu tuần tự.

Điểm quan trọng ở đây đối với một trường hợp ứng dụng trang duy nhất là có nhiều hơn vòng lặp tìm nạp dữ liệu đơn lẻ để xem xét.

Nhúng dữ liệu để sử dụng bởi các script trang về HTML khác tĩnh có ý nghĩa sau đây:

  • HTML chính nó không thể được lưu trữ (chỉ với một bản sao lưu trữ cho mỗi bộ dữ liệu khác nhau nhúng và mỗi phiên bản của trang.)
  • Toàn bộ (nhiều phiên bản của) toàn bộ trang phải được tạo trên máy chủ cũng có kiến ​​thức về cách lấy dữ liệu.
  • Dữ liệu nội tuyến có thể chặn hiển thị trang cho đến thời gian người dùng hiểu được (điều này có thể được thực hiện bằng cách nhúng dữ liệu vào cuối HTML, nhưng thực thi tập lệnh của khách hàng có thể phải chờ hoàn toàn. hiển thị một chỉ số tải khó khăn hơn để thực hiện)

Mặt khác, giữ cho dữ liệu trên một chuyến đi vòng riêng biệt, mặc dù chuyến đi vòng chính nó, sẽ:.

  • lẽ giữ thực hiện đã làm việc của bạn như nó là
  • Cho phép clie nts để sử dụng HTML và tập lệnh được lưu trong bộ nhớ cache chỉ cần làm mới thay đổi phiên bản thực tế (có một đặc điểm không thành công được gọi là AppCache cho mục đích này, bây giờ được thay thế bằng thử nghiệm Service Workers)
  • Cho phép HTML và tập lệnh đó hoàn toàn tài sản tĩnh có thể được phân phát từ CDN 'câm' nhanh hơn và gần hơn với trình duyệt của khách hàng và không cần phải truy vấn cơ sở dữ liệu hoặc chạy bất kỳ mã phía máy chủ nào

Tất cả những thành công lớn trong quan điểm của tôi , vì vậy tôi khuyên bạn nên nghiêm túc xem xét sự cần thiết phải nhúng dữ liệu, bởi vì nó có thể là một tối ưu hóa sớm có thể dẫn đến rất nhiều đau đớn và giảm hiệu suất thực tế! Đặc biệt vì SPDY và ​​bây giờ HTTP/2 đã đến để giải quyết các vấn đề về số lượng chuyến đi khứ hồi và kết nối này.

2

Không, nhưng bạn có thể sử dụng data URIs, nếu đó là một cách tiếp cận khả thi cho bạn. Nó không phải là sự lựa chọn tốt nhất cho số lượng lớn dữ liệu mặc dù.

2

Tôi không chắc chắn đã đáp ứng hoàn toàn nhu cầu của bạn, câu trả lời zeroflagL có thể là câu trả lời đúng; có thể đọc thêm http://blog.teamtreehouse.com/using-data-uris-speed-website trước khi hủy tùy chọn.

Nếu không, mặc dù nó có thể mất một thích ứng ít để javascript của bạn, hãy xem xét rằng HTML5 có một tính năng gọi là data blocks đọc về nó trong https://developer.mozilla.org/en/docs/Using_XML_Data_Islands_in_Mozilla:

Tận dụng tính năng này bạn có thể giảm vòng-chuyến đi và đặt một hoặc nhiều bộ dữ liệu vào trang HTML, trong trường hợp thành không gian tên khối kịch bản như thế này:

<script id="purchase-order" type="application/xml"> 
<purchaseOrder xmlns="http://entities.your.own.domain/PurchaseOrderML"> 

hay này

<script id="another-set-of-data" type="application/xml"> 
<dataSet xmlns="http://entities.your.own.domain/DataSetML"> 

do đó, javascript của bạn có thể truy cập dữ liệu đọc chúng từ trang HTML hiện tại; .... ví dụ:

<script> 
function runDemo() { 
    var orderSource = document.getElementById("purchase-order").textContent; 
    var parser = new DOMParser(); 
    var doc = parser.parseFromString(orderSource, "application/xml"); 
    var lineItems = doc.getElementsByTagNameNS("http://entities.your.own.domain/PurchaseOrderML", "lineItem"); 
    var firstPrice = lineItems[0].getElementsByTagNameNS("http://entities.your.own.domain/PurchaseOrderML", "price")[0].textContent; 
    document.body.textContent = "The purchase order contains " + lineItems.length + " line items. The price of the first line item is " + firstPrice + "."; 
} 
</script> 
0

Bạn có thể đặt dữ liệu, bất kể dữ liệu trong đối tượng toàn cầu window và sử dụng sau này.

Nhưng điều đó yêu cầu bạn phải thay đổi mã.

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