测试站点更改的外观时,是否有一种简单的方法可以防止所有缓存?我使用WP Super Cache。我可以使用提供的选项删除其缓存,删除浏览器的缓存,但对CSS或小部件的某些更改仍然不会刷新。我可以尝试其他解决方法,例如切换浏览器或计算机,但是必须有一个更加简化的工作流程,在此可以确保我正在查看所做的更改,而不是某些早期缓存的格式?最好的解决方案是什么?

评论

似乎也有几个插件专门用于CSS。真的有必要吗?这些插件是否可以执行清除浏览器缓存的操作?

就我而言,事实证明我必须清除DNS提供商(cloudflare)创建的缓存。感谢所有以下建议。

我使用Chrome浏览器;当我在开发过程中遇到浏览器级缓存问题时,它的隐身窗口会派上用场。

希望此插件可以为您提供帮助:wordpress.org/plugins/prevent-browser-caching

#1 楼

添加样式表的filemtime()作为版本参数。可以说,您的默认样式表位于css/default.csscss/default.min.css(不是style.css)中。当我们在wp_loaded(而不是init)上注册样式表时,我们可以将版本作为第四个参数传递。这将是最后一次修改的时间,因此每次更改文件时都会更改。

 $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 );
});
 


如果您使用的是Node.js和Grunt,强烈建议您使用Browsersync。它将监视您的文件并在文件更改时立即更新它们。它还可以在多个打开的浏览器中同步滚动位置,表单提交等等。很酷。

评论


非常感谢。看来这也是以上插件的方法。在我的情况下,它没有解决问题,因为我的DNS提供程序(CloudFlare)正在缓存css文件,所以我不得不在那儿清除缓存-猜想这没有简单的方法。总的来说,我认为这是对此类问题的最佳答案,因此我将标记为已接受。再次感谢。

–cboettig
2012年1月30日23:33

为什么在开发过程中不使用本地样式表?

– fuxia♦
2012年1月31日,0:59

某些云缓存服务会将文件硬缓存8小时以上,因此您必须要求它们实施更好的版本控制服务(有些这样做),更改服务或停止使用它们。

–维克
2012年1月31日在16:38

@cboettig CloudFlare具有开发模式设置,该设置将停止缓存3小时窗口。然后,它会在3小时后自动恢复缓存。

–吉尔伯特
2014年8月25日20:13



#2 楼

在寻找了简单的解决方案很多次后,我决定找到可行的方法!

所以...经过思考,我发现了一种开发新网站时覆盖缓存的好方法...(及其简单)。

我们需要告诉wp这是一个类似CSS的新版本...

更改之前:

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


更改后:

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


这就是我们添加的内容:

?v='.time()


说明:
我们基本上是在css文件中添加一个动态版本号,这迫使浏览器每次更新时都加载新的css。

开发完成后,别忘了将其删除,否则缓存将不适用于此文件,并且会加载该文件以供反复返回用户使用。

该技术适用于css和js文件-希望对您有所帮助;)

评论


很好,但更好的是,只需在版本的第4个参数中使用time()即可。这会给你:wp_enqueue_style('maincss',get_template_directory_uri()。'/css/style.css',array(),time(),'all');

–戴夫
18-09-13在1:41

使用时间作为第四个参数可能会导致chrome保留该版本。如果您在工作中的网站上缓存所有其他内容,则尤其如此。这样,您就向chrome提交了一个“新文件”,供他使用,而不是尝试将“旧”版本保留一段时间(与其他资源一样)。

–敏捷的SEO
18/09/13在9:24



不,在chrome上效果很好,我昨天用过。

–戴夫
18年9月14日下午3:34

这意味着您尚未在htaccess中或通过插件设置缓存/过期时间。但是,任何对您有用的;)

–敏捷的SEO
18/09/14在12:26

#3 楼

这看似过于简单,但是如何禁用缓存,直到您完成站点的开发部分为止?开启和关闭不仅简单。

评论


+1-我使用Firefox的“ Web Developer”工具栏,可让您非常快速地禁用缓存(以及其他功能)

– Shane
2012年1月30日17:44



谢谢-是否只需要禁用浏览器的缓存? WP superCache是​​否仍会提供缓存的内容?甚至我的DNS服务都缓存,因此我不确定是否需要分别禁用每个缓存(WP,浏览器,DNS等)。

–cboettig
2012年1月30日17:48

Sorta取决于您,您必须尝试使用​​它并弄清楚您需要进行的配置。

–mor7ifer
2012年1月30日18:23

我和他在一起,只是禁用它,这就是我要做的。

–马特
2012年1月30日23:07

#4 楼

我知道这个问题已经接受了一个答案,但是我认为该答案对于手头的问题仍然太复杂了,并且根据用户的实际情况可能是不正确的(虽然没有冒犯),所以我认为我仍然会分享如何在我进行开发时绕过缓存(不仅限于Wordpress)。

大多数现代浏览器都具有隐身模式。在这种模式下,您的计算机上没有任何内容被缓存,因此每次刷新都是从服务器上下载新文件。在Internet Explorer中,按Ctrl + Shift + P。在Firefox和Chrome中,请按Ctrl + Shift + N

如果浏览器没有隐身模式,通常可以通过按IE上的Ctrl + F5或在Firefox和Chrome上按Ctrl + Shift + R来强制进行硬重装。

关于CSS文件(实际上是您的所有资产文件,例如图像和Javascript文件)的问题,WP Super Cache不会以任何方式对其进行缓存。您对这个插件的设置和/或使用不会影响这些文件的投放方式。缓存这些文件的是您的浏览器,这就是您进行硬重装的原因。

该插件的作用是评估Wordpress(通过PHP)如何构建HTML文件并存储副本,以便下次有人请求相同的帖子,页面或其他内容时,它可以为复制,而不必再次重新评估由PHP生成的HTML,因此节省了一些计算时间,从而可以更快地加载页面。 (我希望这很清楚。)

问题是,如果您通过PHP函数在CSS文件的URL上放置时间戳,那是对HTML的PHP​​评估,并且将由WP Super Cache缓存。对同一帖子的每个请求都将具有相同的时间戳,因为向用户提供了原始时间戳评估的副本。 (如果我错了,请纠正我。)

绕过WP Super Cache缓存的正确方法是在插件的设置页面中将选项Don't cache for known users设置为true

最后(这是个人喜好,因为我在编码方面非常专横),诉诸隐身或强制硬重装将不需要您在HTML页面上添加不必要的标记。当然,添加时间戳仅会使每个请求的每个静态文件增加大约13个字节,但是,就像我说的那样,我很喜欢这种东西。仍然不需要13个字节。

评论


感谢您的有用提示。不幸的是,由于我的解决方案需要清除域网络服务提供商cloudflare的缓存,因此这里的答案都不是正确的,但是许多仍然是很好的信息。

–cboettig
2012年2月1日19:50

#5 楼

天哪,有很多方法可以回答这个问题!首先,您询问了两个不同的问题:WP Super Cache和CSS文件。这些文件在不同的地方以不同的方式进行缓存,因此重要的是要识别问题所在。

如果使用WP Super Cache,则可以在开发过程中在functions.php中定义常量DONOTCACHEPAGE以防止WP Super Cache从缓存任何东西。但是,请不要忘记在启动时删除它!我相信您可以在“高级”选项卡中找到。

将其分解为一个更好的解决方案,您应该考虑设置开发环境和生产环境,而您的开发环境不会启用WP Super Cache(同样,假设是您的问题)。

如果您的问题与CSS / JS文件有关,请参见上面toscho的回答以及上面m0r7if3r的后续评论。

#6 楼

对我来说,在Windows下在Bitnami堆栈上运行Wordpress的工作是编辑php.ini文件并重新启动服务器。
在[opcache]部分,将opcache.revalidate_freq更改为1
opcache.revalidate_freq=1

然后我重新启动了服务器,现在我的页面立即显示对插件所做的更改。

#7 楼

当您以管理员身份登录时,HyperCache会禁用缓存。不确定WP Super Cache是​​否具有相同的功能。

评论


有一个选项,是的。

–马修·博因斯(Matthew Boynes)
2012年1月30日21:53

#8 楼

如果您使用的是Chrome(我强烈建议),请打开Inspector,单击右下角的设置图标,然后在“网络”下选择“禁用缓存”。

#9 楼

如wp超级缓存所言,但对于wp-config.php中的常规WP缓存
更改为:

define( 'WP_CACHE', false );


参考:codex.wordpress.org

评论


这实际上是解决该问题的唯一方法。谢谢!

– CoppolaEmilio
20年4月8日在22:33

#10 楼

您可以使用此代码段https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1

每次加载页面时,它将生成活动主题css和js的新版本

评论


请在此处发布答案,包括所有相关代码。仅将外部站点用作参考。您的帖子应该提供完整的答案,而无需转到其他站点;如果第三方站点出现故障,您的答案将无用。

– cybmeta
17-10-20在8:22