Buộc Google Chrome kiểm tra các tệp JavaScript mới mỗi khi tôi truy cập trang web


25

Vì vậy, nếu tôi đi đến các tùy chọn Internet trong Internet Explorer: nhập mô tả hình ảnh ở đây

Tôi có thể điều chỉnh cài đặt khi IE kiểm tra cập nhật: nhập mô tả hình ảnh ở đây

Tôi có thể làm điều gì đó tương tự trong Google Chrome không? Ngay bây giờ khi tôi thay đổi tệp JavaScript và gỡ lỗi từ Visual Studio, Chrome sẽ luôn sử dụng phiên bản được lưu trong bộ nhớ cache thay vì sử dụng phiên bản đã sửa đổi. Để có thể sử dụng phiên bản hiện tại, tôi phải xóa thủ công các tệp / bộ đệm tạm thời trên internet, điều này thực sự gây phiền nhiễu.


14
Tại sao bạn không tắt bộ nhớ đệm được thực hiện bởi Visual Studio? (Nghiêm túc mà nói, ai trong heck thiết kế một IDE với bộ nhớ đệm?)
jpmc26

2
@ jpmc26 Bộ nhớ đệm gì?
EJoshuaS - Phục hồi Monica

21
Tôi nói lời bình luận cuối cùng của tôi một cách lỏng lẻo; lời xin lỗi của tôi nếu điều đó làm cho nó không rõ ràng. Trình duyệt chỉ lưu tệp bộ đệm nếu máy chủ gửi lại các tiêu đề cụ thể. Theo mặc định, máy chủ phát triển của Visual Studio sẽ gửi lại các tiêu đề bộ đệm, vì những thay đổi đối với các tệp đó sẽ được mong đợi . Việc tải thêm một phần giây trang rất đáng để không xử lý các vấn đề từ các tệp CSS và CSS lỗi thời đang được lưu trong trình duyệt. Tôi chân thành hy vọng có một số cách để vô hiệu hóa nó.
jpmc26

1
Không thể tìm thấy bất kỳ tùy chọn Visual Studio nào nhưng thay đổi web.config phát triển có thể giải quyết bộ đệm trong visual studio. iis.net/configreference/system.webserver/staticcontent/ từ
GER

1
Tiện ích mở rộng Chrome "Cache Killer" đã giải quyết nó cho tôi, tôi không biết tại sao nhưng đôi khi ctrl + f5 không hoạt động với tôi
flagg19

Câu trả lời:


55

Tùy chọn 1: Tạm thời tắt bộ đệm

  1. Mở Công cụ dành cho nhà phát triển (Bấm F12hoặc Menu, Công cụ khác, Công cụ dành cho nhà phát triển)
  2. Mở Cài đặt công cụ dành cho nhà phát triển (Nhấn F1hoặc Menu DevTools, Cài đặt)
  3. Kiểm tra "Tắt bộ đệm (trong khi DevTools đang mở)" trong tiêu đề Mạng của ngăn Tùy chọn

Tùy chọn 2: Vô hiệu hóa bộ đệm cho phiên

Khởi động Chrome bằng các công tắc dòng lệnh --disk-cache-size=1 --media-cache-size=1sẽ giới hạn bộ đệm ở mức 1 byte, vô hiệu hóa bộ đệm.

Tùy chọn 3: Làm mới lực bằng tay

Tải lại trang hiện tại, bỏ qua nội dung được lưu trong bộ nhớ cache: Shift+ F5hoặc Ctrl+ Shift+r

Phím tắt Chrome - Trợ giúp Chrome (Trong "Phím tắt trang web")

Tùy chọn 4: Tùy chọn tải lại bổ sung ( Nguồn )

Khi Công cụ dành cho nhà phát triển mở, nhấp chuột phải vào nút Tải lại để hiển thị menu tải lại với các mục sau:

  • Tải lại bình thường (Ctrl + R)
  • Tải lại cứng (Ctrl + Shift + R)
  • Cache trống và tải lại cứng

1
@Bruno Odd, tôi cũng luôn sử dụng ctrl + f5. Chỉ cần thử nghiệm và cả hai dường như làm việc.
Jeroen

Tôi đề nghị sử dụng tùy chọn 2, với một twist. Tạo một lối tắt riêng cho Chrome bằng các công tắc và đặt tên khác. Đặt nó vào các đầu khác nhau của Thanh tác vụ Windows của bạn.
Con tin Christopher

8

Nó có thể không liên quan 100% đến việc làm mới chrome nhưng để phát triển hơn nữa. Giống như @Dom đã nói, bạn có thể thêm một? V = # sau khi nguồn tài nguyên của bạn. Một cách để tự động hóa quy trình là băm nội dung của tệp đã nói và sử dụng đó làm phiên bản.

Tôi có một đoạn mã về cách thực hiện điều này trong C # (Dao cạo để thực hiện) nếu điều này có thể giúp ích.

Người giúp đỡ:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }

Thực hiện:

<link rel="stylesheet" href=@Util.HashUrl("~/Controllers/Home/Views/Index.css") />

Hi vọng điêu nay co ich

EDIT --- Một số người đã yêu cầu một số thời gian chạy xây dựng và cho 1000 tài nguyên nhỏ, phải mất khoảng 11 ms.

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

nhập mô tả hình ảnh ở đây https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png


2
Phiên bản tài nguyên như thế này (hoặc bằng cách nhúng phiên bản / hàm băm vào tên tài nguyên) có thể rất hữu ích, đặc biệt là khi triển khai các bản cập nhật trong thế giới thực, trong đó - trái với quy tắc trên tiêu đề kiểm soát bộ đệm nói - tất cả đều theo cách của bộ nhớ đệm có thể xảy ra và nhiều người dùng sẽ không biết cách (hoặc nhu cầu) làm mới bộ đệm. Nếu bạn (làm cho ứng dụng của bạn) yêu cầu một tài nguyên mới được đặt tên, nó có thể không được lưu vào bộ nhớ cache.
TripeHound

1
Đây không phải là một mất hiệu suất lớn? Băm mỗi tệp css và js mỗi khi liên kết được chèn vào một trang ... Bạn đã chạy điểm chuẩn cho việc này chưa?
Raidri nói Phục hồi lại

2
@Raidri Hashing on the fly có lẽ không phải là một ý tưởng hay (tôi đã không nhận thấy nó đang làm điều này khi tôi nhận xét lần đầu tiên). Cập nhật tài liệu tham khảo để sử dụng hàm băm hoặc phiên bản trong quá trình xây dựng là.
TripeHound

@Raidri Tôi có một ứng dụng khá nhỏ với 20 nguồn tài nguyên mà tôi băm và tôi không thấy sự khác biệt trong thời gian xây dựng nên tôi đã không thực sự cố gắng đánh giá nó. Ngoài ra tôi không chắc chắn tôi hiểu câu thứ hai của bạn nhưng các nguồn tài nguyên được lưu trong bộ nhớ cache và trình duyệt chỉ thu lại chúng nếu hàm băm thay đổi => nếu bạn thay đổi chính nguồn gốc.
beauchamp fred

Giá trị băm không được tính tại thời điểm xây dựng mà ở mỗi thế hệ trang. Đó là sự cố máy chủ và không liên quan gì đến bộ nhớ đệm trong trình duyệt.
Raidri nói Phục hồi lại

5

Trong các trường hợp khác, nếu điều này có thể không thực hiện được, ví dụ muốn thực hiện làm mới trên máy tính của người dùng cuối mà bạn không có quyền truy cập, bạn có thể thêm số phiên bản vào tên tập lệnh làm tham số truy vấn để xác định trình duyệt nó như là một tập tin khác nhau . I E. example.js?v=1. Hãy nhớ rằng bạn cần thay đổi số trên mỗi lần tải lại để buộc nó.

Bạn cũng có thể làm điều này với sự phát triển cục bộ, nhưng phương pháp dev tools hiệu quả hơn nhiều.


3

ngoài của @Steven câu trả lời, khi bạn nhận được các công cụ phát triển điều khiển mở ra, bạn có thể Right Click vào nút refresh và sử dụng trình đơn thả xuống.

Trong menu này, bạn nhận được một tùy chọn cho "Bộ nhớ cache trống và tải lại cứng" .

Là những gì bạn đang tìm kiếm.


1
Tôi cho rằng bạn đang sử dụng phiên bản Chrome không phải tiếng Anh. Tôi sử dụng phiên bản tiếng Anh và được gọi là "Bộ nhớ cache rỗng và tải lại cứng".
Nzall

1

Nếu bạn đang phát triển trang web, thì bạn nên biết rằng Chrome yêu cầu must-revalidatecài Cache-Controlđặt để tìm nạp lại đúng cách các tệp khi chúng được thay đổi trên máy chủ.

Các câu trả lời khác cho bạn biết cách nhấn SHIFT-F5 để buộc phiên bản Chrome của riêng bạn tải lại tất cả các tệp. Nhưng nó có hợp lý để nói với tất cả người dùng của trang web để làm điều này mỗi khi trang web thay đổi? Nếu bạn đặt Cache-Controlthành bao gồm must-revalidatethì Chrome sẽ kiểm tra xem có tệp nào đã thay đổi không, sau đó tải xuống chúng đúng cách khi cần.

Xem chi tiết tại bài đăng trên blog này: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

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.