2011-09-06 20 views
13

Facebook: http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/u2OL99TwlfU.css
Google: http://ssl.gstatic.com/gb/js/sem_cf9545d69b4bd3d22ed10206010c8b23.jsFacebook, Google và các ứng dụng lớn khác thực hiện các tệp CSS và JavaScript của họ như thế nào?

Có các trang web khác, như Tagged mà còn sử dụng loại phương pháp.

Làm cách nào để các trang web này và các ứng dụng lớn khác thực hiện các tệp này? Tôi giả sử khi họ cập nhật tệp của họ, URL thực sự thay đổi để bộ nhớ cache không nhận ra URL và tải lại tệp mới.

Tôi thực sự bối rối hơn về rsrc.php của Facebook, nhưng tôi vẫn không hiểu phần còn lại. Nó xuất hiện chuỗi ngẫu nhiên của Google là một MD5 của một cái gì đó.

Tôi muốn một cái gì đó như thế này trên trang web của tôi, các ứng dụng lớn sử dụng nó để nó phải hữu ích để sử dụng - ngay cả khi tôi không quyết định sử dụng, kiến ​​thức về nó có thể có lợi trong tương lai gần.

Trả lời

27

(Tôi là tác giả ban đầu của rsrc.php và Haste hệ thống quản lý tài nguyên tĩnh của Facebook.)

Bạn có thể tìm thấy một mô tả của một số thách thức Facebook gặp phải với quản lý tài nguyên tĩnh và làm thế nào nó giải quyết chúng ở đây, trong tài liệu Phabricator:

https://secure.phabricator.com/book/phabflavor/article/soon_static_resources/

Để các câu hỏi cụ thể, các URI rsrc.php là như thế (với "rsrc.php" trong họ) đặc biệt vì chúng tôi không có một quy tắc viết lại Apache toàn cầu trong 2007 khi tôi viết rsrc.php và thêm, triển khai và thử nghiệm một cho một số URI thanh lịch hơn dường như không đáng làm phiền (bằng PHP, bạn có thể đọc phần còn lại của URI sau phần tệp "x.php" trong thời gian chạy). Vì vậy, phần đó chỉ là một tạo phẩm thực thi PHP.

Các thành phần đường dẫn khác đã được sử dụng cho nhiều thứ trong nhiều năm, như số phiên bản khẩn cấp mà chúng tôi có thể vượt qua trên toàn cầu để phá vỡ bộ nhớ cache của mọi người nếu xảy ra sự cố với đường dẫn bộ nhớ cache. yêu cầu rác để ghi nhật ký, cờ nội bộ thay đổi chính sách bộ nhớ cache của tài nguyên trả về để phát triển và hương vị của tài nguyên (ví dụ: được điều chỉnh cho một trình duyệt cụ thể hoặc được bản địa hóa sang một ngôn ngữ cụ thể).

+0

Vâng, tôi đã giả định rằng những tên tệp ngẫu nhiên - cũng là của Facebook là một tổng kiểm tra với tên tệp gốc và ngày sửa đổi cuối cùng. Mặc dù tổng kiểm tra sẽ cần được đảo ngược để lấy tệp thực. Tại sao tôi hỏi về điều này là vì tôi muốn tạo ra một điều tương tự. Tôi biết hiệu ứng của nó với Cache. Ví dụ: nếu bạn đã có image.png - khi hình ảnh đó được cập nhật, bạn sẽ không thấy thay đổi cho đến khi bạn làm mới.Do đó, bạn cần phải sửa đổi url thực tế để nó duy nhất cho tệp đó và ngày sửa đổi lần cuối - vì vậy bạn có thể xem các cập nhật mà không cần làm mới. –

+0

Đó là một bài viết thú vị – dave

+0

Đối với Googles, nó trông giống như một MD5 của một số loại. Một lần nữa, có lẽ sẽ cần phải được đảo ngược. Tôi đang bối rối làm thế nào để làm của tôi. –

0

Cả Facebook và Google đều sử dụng hậu tố md5 trong tên tệp tài nguyên tĩnh của họ. Trước tiên, nó là một tối ưu hóa chung cho hiệu suất, chúng ta có thể phiên bản một tài nguyên tĩnh sử dụng md5 nội dung tập tin của nó (sau khi minification) và thiết lập bộ nhớ cache-control = 10 năm (nginx hoặc apache). Nếu bạn nhấn nút forward/back trên trình duyệt hoặc xem trang thứ hai, tập tin sẽ được lấy từ đĩa cục bộ của bạn, không phải qua mạng (ngoại trừ bạn nhấn nút tải lại, sẽ có 304).

Thứ hai, khi bạn xuất bản mã trực tuyến, trước tiên bạn có thể đẩy tất cả tài nguyên tĩnh, chúng sẽ không xung đột với các tài nguyên cũ. Và sau đó bạn đẩy tất cả mã phía máy chủ, tất cả người dùng sẽ không có quyền truy cập lỗi vào trang của bạn.

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