Làm thế nào để bạn tránh bộ nhớ đệm trong quá trình phát triển?


31

Có cách nào đơn giản để ngăn chặn tất cả bộ nhớ đệm khi kiểm tra sự xuất hiện của các thay đổi đối với trang web không? Tôi sử dụng WP Super Cache. Tôi có thể xóa bộ đệm của nó bằng tùy chọn được cung cấp, xóa bộ đệm cho trình duyệt của tôi và vẫn còn một số thay đổi đối với css hoặc widget không làm mới. Tôi thử các công việc khác như chuyển đổi trình duyệt hoặc máy tính, nhưng phải có một quy trình làm việc hợp lý hơn, nơi tôi có thể đảm bảo tôi đang xem các thay đổi tôi đã thực hiện và không phải là một số định dạng được lưu trong bộ nhớ cache trước đó? Giải pháp tốt nhất cho việc này là gì?


Có vẻ như cũng có một số plugin chỉ để làm điều này cho CSS. Có thực sự cần thiết? Những plugin đó có làm gì mà xóa bộ nhớ cache của trình duyệt không?
cboettig

Trong trường hợp của tôi, hóa ra tôi phải xóa bộ nhớ cache được tạo bởi nhà cung cấp DNS (cloudflare). Cảm ơn tất cả những lời đề nghị dưới đây mặc dù.
cboettig

Tôi sử dụng trình duyệt Chrome; Cửa sổ ẩn danh của nó rất tiện dụng, khi tôi gặp các vấn đề về bộ đệm cấp trình duyệt trong quá trình phát triển.
Joseph Kulandai

Hy vọng plugin này sẽ giúp bạn: wordpress.org/plugins/prevent-browser-caching
Kostya Tereshchuk

Câu trả lời:


32

Thêm biểu filemtime()định kiểu của bạn làm tham số phiên bản. Hãy nói rằng, biểu định kiểu mặc định của bạn nằm trong css/default.csscss/default.min.css( khôngstyle.css ). Khi chúng tôi đăng ký biểu định kiểu trên wp_loaded( khônginit ), chúng tôi có thể chuyển phiên bản làm tham số thứ tư. Đó sẽ là lần sửa đổi cuối cùng và do đó thay đổi mỗi khi chúng tôi thay đổi tệp.

$min    = WP_DEBUG ? '': '.min';
$file   = "/css/default$min.css";
$url    = get_template_directory_uri() . $file;
$path   = get_template_directory() . $file;
$handle = get_stylesheet() . '-default';

// Overridden?
if ( is_child_theme() && is_readable( get_stylesheet_directory() . $file ) )
{
    $url  = get_stylesheet_directory_uri() . $file;
    $path = get_stylesheet_directory()     . $file;
}

$modified = filemtime( $path );

add_action( 'wp_loaded', function() use ( $handle, $url, $modified ) {
    wp_register_style( $handle, $url, [], $modified );
});

add_action( 'wp_enqueue_scripts', function() use ( $handle ) {
    wp_enqueue_style( $handle );
});

Nếu bạn đang sử dụng Node.js và Grunt, tôi thực sự khuyên dùng Browseersync . Nó sẽ xem các tập tin của bạn và cập nhật chúng ngay lập tức bất cứ khi nào chúng thay đổi. Nó cũng có thể đồng bộ hóa vị trí cuộn, gửi biểu mẫu và hơn thế nữa trên nhiều trình duyệt mở. Rất tuyệt.


Cảm ơn nhiều. Có vẻ như đây cũng là cách tiếp cận của plugin trên. Nó không giải quyết được vấn đề trong trường hợp của tôi vì nhà cung cấp DNS của tôi (CloudFlare) đang lưu trữ tệp css, vì vậy tôi phải xóa bộ đệm ở đó - đoán không có cách nào đơn giản xung quanh đó. Nói chung, tôi nghĩ rằng đây là câu trả lời tốt nhất cho loại vấn đề này vì vậy tôi sẽ đánh dấu chấp nhận. Cảm ơn một lần nữa.
cboettig

Tại sao bạn không sử dụng biểu định kiểu địa phương trong quá trình phát triển?
fuxia

Một số dịch vụ lưu trữ đám mây sẽ lưu trữ cứng tệp của bạn trong 8 + giờ, do đó bạn phải yêu cầu họ triển khai dịch vụ tốt hơn để tạo phiên bản (một số thực hiện việc này), thay đổi dịch vụ hoặc ngừng sử dụng chúng.
Wyck

@cboettig CloudFlare có cài đặt chế độ dev sẽ dừng bộ đệm trong cửa sổ 3 giờ. Sau đó, nó sẽ tự động tiếp tục bộ nhớ đệm sau 3 giờ.
Gilbert

7

Sau khi tìm kiếm một giải pháp đơn giản nhiều lần tôi quyết định tìm thứ gì đó hiệu quả!

vì vậy ... sau khi nghĩ về nó, tôi đã tìm thấy một cách tuyệt vời để ghi đè bộ đệm trong khi phát triển các trang web mới ... (và thật dễ dàng).

Điều chúng tôi cần là nói với wp đây là phiên bản CSS mới như thế này ...

Trước khi thay đổi:

wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), false, 'all' );

Sau khi thay đổi:

wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css?v='.time(), array(), false, 'all' );

Đây là những gì chúng tôi đã thêm:

?v='.time()

Giải thích:
Về cơ bản, chúng tôi đang thêm số phiên bản động vào tệp css để buộc trình duyệt tải css mới mỗi khi chúng tôi cập nhật.

Đừng quên xóa nó sau khi bạn phát triển xong nếu không bộ đệm của bạn sẽ không hoạt động cho tệp này và nó sẽ tải để trả lại người dùng nhiều lần.

Kỹ thuật này hoạt động cho các tệp css & js - hy vọng điều này sẽ giúp;)


Khá đẹp, nhưng vẫn tốt hơn, chỉ cần sử dụng time () trong tham số thứ 4 là phiên bản. Điều này sẽ cung cấp cho bạn:wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), time(), 'all' );
Dave

Sử dụng thời gian làm tham số thứ 4 có thể tạo ra chrome để giữ phiên bản đó. Điều này đặc biệt đúng nếu bộ nhớ đệm của bạn mọi thứ khác trong khi bạn làm việc trên một trang web trực tiếp. Bằng cách này, bạn đang gửi "tệp mới" tới chrome mà anh ấy sẽ sử dụng thay vì cố gắng giữ phiên bản "cũ" đó trong một khoảng thời gian (như được đặt cho các tài nguyên khác).
SEO Sagive

Không, hoạt động tốt trong chrome, tôi đã sử dụng nó ngày hôm qua.
Dave

điều đó có nghĩa là bạn chưa đặt bộ nhớ cache / thời gian hết hạn trong htaccess hoặc thông qua plugin. Nhưng, bất cứ điều gì phù hợp với bạn;)
SEO Sagive

6

Điều này có vẻ quá đơn giản, nhưng làm thế nào về việc vô hiệu hóa bộ nhớ đệm cho đến khi bạn hoàn thành phần phát triển của trang web? Nó đơn giản hơn để bật và tắt.


2
+1 - Tôi sử dụng thanh công cụ "Nhà phát triển web" cho Firefox, cho phép bạn nhanh chóng vô hiệu hóa bộ đệm (trong số những thứ khác)
Shane

Cảm ơn - chỉ cần tắt bộ nhớ cache của trình duyệt? WP superCache vẫn sẽ dẫn đến việc cung cấp nội dung được lưu trong bộ nhớ cache? Ngay cả dịch vụ DNS của tôi cũng lưu trữ, vì vậy tôi không chắc chắn liệu mình có cần tắt từng bộ đệm (WP, trình duyệt, DNS, v.v.) không.
cboettig

Sắp xếp tùy thuộc, bạn sẽ phải chơi xung quanh nó và tìm ra những gì bạn cần làm cho cấu hình của mình.
mor7ifer

Tôi với anh ta, chỉ cần vô hiệu hóa nó, đó là những gì tôi làm.
matt

4

Tôi biết rằng câu hỏi này đã có câu trả lời được chấp nhận, nhưng tôi nghĩ rằng câu trả lời đó vẫn còn quá phức tạp đối với vấn đề và thực sự có thể không chính xác tùy thuộc vào người dùng (mặc dù không vi phạm), vì vậy tôi nghĩ tôi vẫn chia sẻ Làm thế nào tôi bỏ qua bộ nhớ đệm khi tôi làm dev của tôi (không chỉ với Wordpress).

Hầu hết các trình duyệt hiện đại có một cái gì đó gọi là chế độ ẩn danh . Trong chế độ này, không có gì trong máy tính của bạn được lưu trong bộ nhớ cache, vì vậy mỗi lần làm mới là một bản tải xuống mới từ máy chủ. Trong Internet Explorer, bạn nhấn Ctrl + Shift + P. Trong Firefox và Chrome, bạn nhấn Ctrl + Shift + N.

Nếu trình duyệt của bạn không có chế độ ẩn danh, thông thường bạn có thể buộc tải lại cứng bằng cách nhấn Ctrl + F5IE hoặc Ctrl + Shift + Rtrên Firefox và Chrome.

Đối với câu hỏi của bạn liên quan đến các tệp CSS (và về cơ bản, tất cả các tệp tài sản của bạn, như hình ảnh và tệp Javascript), những tệp này không được lưu trong bộ nhớ cache của WP Super Cache. Cài đặt và / hoặc sử dụng plugin này của bạn không ảnh hưởng đến cách các tệp đó được phục vụ. Những gì lưu trữ các tập tin đó là trình duyệt của bạn và đó là lý do tại sao bạn thực hiện tải lại cứng.

Những gì plugin làm là nó đánh giá cách Wordpress xây dựng các tệp HTML của bạn (thông qua PHP) và lưu trữ một bản sao, để lần sau ai đó yêu cầu cùng một bài đăng, trang hoặc bất cứ điều gì, nó phục vụ bản sao và sẽ không phải đánh giá lại HTML do PHP tạo ra một lần nữa và do đó tiết kiệm thời gian tính toán, tải các trang của bạn nhanh hơn nhiều. (Tôi hy vọng điều đó rõ ràng.)

Vấn đề với điều đó là, nếu bạn tát vào dấu thời gian trên URL tệp CSS của bạn thông qua chức năng PHP, đó đánh giá PHP sang HTML và điều đó sẽ được lưu trữ bởi WP Super Cache. Mọi yêu cầu cho cùng một bài đăng sẽ có cùng dấu thời gian vì người dùng đang được cung cấp một bản sao của đánh giá dấu thời gian ban đầu. (Sửa tôi nếu tôi sai.)

Các cách chính xác để bộ nhớ đệm bypass WP Super Cache là để thiết lập các tùy chọn Don't cache for known usersđể truetrong trang thiết lập của plugin.

Cuối cùng (và đây là một sở thích cá nhân, vì tôi là một người gắn bó thực sự khi nói về mã hóa), nhờ sử dụng ẩn danh hoặc tải lại cứng buộc sẽ không yêu cầu bạn thêm đánh dấu không cần thiết trên các trang HTML của mình. Tất nhiên, việc thêm dấu thời gian chỉ thêm khoảng 13 byte cho mỗi tệp tĩnh cho mỗi yêu cầu, nhưng này, như tôi đã nói, tôi là người gắn bó với loại công cụ này. Nó vẫn còn 13 byte không cần thiết.


Cảm ơn những lời khuyên hữu ích. Thật không may, không có câu trả lời nào ở đây là chính xác trong trường hợp của tôi, vì giải pháp của tôi yêu cầu xóa bộ nhớ cache của nhà cung cấp dịch vụ mạng miền, đám mây, nhưng nhiều thông tin vẫn tốt.
cboettig

2

Trời ạ, nhiều cách để trả lời cái này! Đầu tiên và quan trọng nhất, bạn đã hỏi về hai điều khác nhau: tệp WP Super Cache và CSS. Chúng được lưu trữ khác nhau, ở những nơi khác nhau, vì vậy điều quan trọng là phải nhận ra vấn đề của bạn ở đâu.

Nếu WP Super Cache, bạn có thể xác định hằng số DONOTCACHEPAGEtrong hàm.php của mình trong quá trình phát triển để ngăn WP Super Cache lưu trữ mọi thứ. Đừng quên loại bỏ điều này khi khởi chạy!

define('DONOTCACHEPAGE', true);

Mỗi trang web cũng có một khóa duy nhất để thêm vào URL để tải phiên bản mới của trang mà bạn có thể tìm thấy trong tab "Nâng cao", tôi tin.

Phân tích nó thành một giải pháp thậm chí tốt hơn, bạn nên xem xét việc thiết lập môi trường phát triển và môi trường sản xuất, trong đó môi trường phát triển của bạn không kích hoạt WP Super Cache (một lần nữa, giả sử đó là vấn đề của bạn).

Nếu vấn đề của bạn là với các tệp CSS / JS, thì hãy xem câu trả lời của toscho và nhận xét tiếp theo của m0r7if3r ở trên.


1

HyperCache vô hiệu hóa bộ nhớ đệm khi bạn đăng nhập với tư cách quản trị viên. Không chắc chắn liệu WP Super Cache có chức năng tương tự.


Có một lựa chọn cho điều đó, vâng.
Matthew Boynes

1

Nếu bạn đang sử dụng Chrome (mà tôi rất khuyến nghị), hãy mở Thanh tra, nhấp vào biểu tượng cài đặt ở góc dưới bên phải và trong "Mạng", chọn "Tắt bộ nhớ cache".


0

Như đã nói với wp super cache, nhưng đối với bộ nhớ cache WP chung trong wp-config.php Thay đổi này:

define( 'WP_CACHE', false );

Tham khảo: codex.wordpress.org


-1

Bạn có thể sử dụng đoạn trích này https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1

Nó sẽ tạo phiên bản mới của css và js chủ đề hoạt động của bạn mỗi khi bạn tải trang


Xin vui lòng, gửi câu trả lời ở đây, bao gồm tất cả các mã có liên quan. Chỉ sử dụng các trang bên ngoài để tham khảo. Bài viết của bạn nên cung cấp một câu trả lời đầy đủ mà không cần phải đi đến trang web khác; nếu trang web của bên thứ ba ngừng hoạt động, câu trả lời của bạn sẽ không được tin
cậy
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.