Tại sao các trang web lớn lưu trữ hình ảnh / css của họ trên các tên miền bên ngoài?


43

Tại sao các trang web như Facebook, Twitter và Google lưu trữ hình ảnh và css của họ trên các tên miền bên ngoài như:

  • Facebook: static.ak.fbcdn.net
  • Twitter: a0.twimg.com
  • Google: ssl.gstatic.com

Câu hỏi):

  • Là hiệu suất? hay bảo mật?

Câu trả lời:


53

@toomanyairmiles đúng một phần - mục đích của kỹ thuật này là cho phép các kết nối song song từ trình duyệt web đến máy chủ. Các trình duyệt web nên cho phép tối thiểu hai kết nối đồng thời vào một máy chủ, nhưng nhiều trình duyệt mới có thể quản lý tới 60. Bất kể kết nối đồng thời, đồng thời giữa trình duyệt và máy chủ web là một nút cổ chai tốc độ lớn.

Từ tài nguyên của Google :

Đặc tả HTTP 1.1 (phần 8.1.4) nói rằng các trình duyệt nên cho phép tối đa hai kết nối đồng thời trên mỗi tên máy chủ (mặc dù các trình duyệt mới hơn cho phép nhiều hơn thế: xem Danh sách trình duyệt để biết danh sách). Nếu một tài liệu HTML chứa các tham chiếu đến nhiều tài nguyên hơn (ví dụ: CSS, JavaScript, hình ảnh, v.v.) so với mức tối đa được phép trên một máy chủ, thì trình duyệt sẽ yêu cầu số lượng tài nguyên đó và xếp hàng phần còn lại. Ngay sau khi một số yêu cầu kết thúc, trình duyệt sẽ đưa ra yêu cầu cho số lượng tài nguyên tiếp theo trong hàng đợi. Nó lặp lại quá trình cho đến khi nó đã tải xuống tất cả các tài nguyên. Nói cách khác, nếu một trang tham chiếu nhiều hơn X tài nguyên bên ngoài từ một máy chủ, trong đó X là kết nối tối đa được phép cho mỗi máy chủ, trình duyệt phải tải xuống chúng liên tục, X tại một thời điểm, phát sinh 1 RTT cho mỗi tài nguyên X. Tổng thời gian khứ hồi là N / X, trong đó N là số lượng tài nguyên để tìm nạp từ máy chủ. Ví dụ: nếu một trình duyệt cho phép 4 kết nối đồng thời trên mỗi tên máy chủ và một trang tham chiếu 100 tài nguyên trên cùng một tên miền, thì nó sẽ phải chịu 1 RTT cho mỗi 4 tài nguyên và tổng thời gian tải xuống là 25 RTT.

Vì vậy, cách để giải quyết vấn đề này là "loại bỏ" các yêu cầu đến các tên miền hoặc máy chủ khác nhau:

Một lần nữa, từ cùng một tài nguyên Google:

Cân bằng tài nguyên song song giữa các tên máy chủ. Yêu cầu cho hầu hết các tài nguyên tĩnh, bao gồm hình ảnh, CSS và các đối tượng nhị phân khác, có thể được song song. Số dư yêu cầu cho tất cả các đối tượng này càng nhiều càng tốt trên các tên máy chủ. Nếu điều đó là không thể, theo nguyên tắc thông thường, hãy cố gắng đảm bảo rằng không có máy chủ nào phục vụ nhiều hơn 50% so với mức trung bình trên tất cả các máy chủ. Vì vậy, ví dụ, nếu bạn có 40 tài nguyên và 4 máy chủ, mỗi máy chủ sẽ phục vụ lý tưởng 10 tài nguyên; trong trường hợp xấu nhất, không có máy chủ nào phục vụ nhiều hơn 15. Nếu bạn có 100 tài nguyên và 4 máy chủ, mỗi máy chủ sẽ phục vụ 25 tài nguyên; không một máy chủ nào phải phục vụ hơn 38.

Nhưng, có thêm một mảnh cho câu đố. Mỗi yêu cầu thường đi kèm với chi phí riêng, thông thường ở dạng cookie. Các yếu tố tĩnh như hình ảnh, CSS và JavaScript không cần truyền dữ liệu cookie, do đó, việc phục vụ chúng từ các miền khôngcookie (phụ) có thể dẫn đến các Chuyến đi khứ hồi nhanh hơn:

Nội dung tĩnh, chẳng hạn như hình ảnh, tệp JS và CSS, không cần phải đi kèm với cookie, vì không có tương tác của người dùng với các tài nguyên này. Bạn có thể giảm độ trễ yêu cầu bằng cách phục vụ tài nguyên tĩnh từ một miền không phục vụ cookie. Kỹ thuật này đặc biệt hữu ích cho các trang tham chiếu khối lượng lớn nội dung tĩnh hiếm khi được lưu trong bộ nhớ cache, chẳng hạn như hình thu nhỏ hình ảnh thường xuyên thay đổi hoặc lưu trữ hình ảnh truy cập không thường xuyên. Chúng tôi khuyên dùng kỹ thuật này cho bất kỳ trang nào phục vụ hơn 5 tài nguyên tĩnh. (Đối với các trang phục vụ ít tài nguyên hơn mức này, sẽ không đáng để bạn thiết lập một tên miền bổ sung.)

Để bảo lưu một tên miền không nấu ăn để phục vụ nội dung tĩnh, hãy đăng ký một tên miền mới và định cấu hình cơ sở dữ liệu DNS của bạn với một bản ghi CNAME trỏ tên miền mới vào bản ghi A miền hiện tại của bạn. Định cấu hình máy chủ web của bạn để phục vụ tài nguyên tĩnh từ tên miền mới và không cho phép bất kỳ cookie nào được đặt ở bất kỳ đâu trên miền này. Trong các trang web của bạn, hãy tham chiếu tên miền trong các URL cho tài nguyên tĩnh.


13

Trước đây, các trình duyệt Web chỉ có thể tải xuống hai mục cùng một lúc (bây giờ là 6 hoặc nhiều hơn), vì vậy việc tải xuống các tài nguyên từ nhiều miền khác nhau nhanh hơn một tên miền. Điều này áp dụng cho tất cả mọi thứ từ hình ảnh đến javascripts.

Nhiều công ty cũng sử dụng CDN , một công cụ đảm bảo người dùng cuối lấy dữ liệu của họ từ máy chủ gần với họ về mặt địa lý, điều này cũng làm tăng hiệu suất trang web bằng cách giảm thời gian khứ hồi cho các yêu cầu tài nguyên.


7

Các trang web lớn chuyển nội dung tĩnh của họ (hình ảnh, tệp JS & CSS) sang Mạng phân phối nội dung hoặc CDN khi triển khai nội dung của bạn trên nhiều máy chủ phân tán về mặt địa lý sẽ giúp trang của bạn tải nhanh hơn từ phối cảnh của người dùng.

Vì CDN có một tên miền khác, nó cũng cung cấp các lợi ích bảo vệ tên miền .


3

Hạn chế 2 mục không còn là vấn đề nữa. Mặc dù đó là khuyến nghị của thông số HTTP, tất cả các trình duyệt hiện đại cho phép ít nhất 6 kết nối đồng thời .


-1

Điều này vẫn cần thiết cho các cookie không mong muốn được gửi đến tiêu đề trong khi sử dụng tên miền bên ngoài không có bất kỳ cookie nào được đặt, vì vậy việc tải nội dung này nhanh hơn nhiều.

Vì vậy, có, nó vẫn cần thiết cho mục đích tốc độ.


Câu trả lời được chấp nhận đã nói rằng cookie không được gửi cho một tên miền bên ngoài. Câu trả lời này không nói bất cứ điều gì mà các câu trả lời khác chưa bao gồm.
Stephen Ostermiller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.