如何在开发过程中避免缓存?

时间:2012-01-30 作者:cboettig

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

10 个回复
最合适的回答,由SO网友:fuxia 整理而成

添加filemtime() 作为版本参数的样式表。比方说,您的默认样式表位于css/default.csscss/default.min.css (not style.css). 当我们在上注册样式表时wp_loaded (not 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 );
});
如果您使用的是节点。js和Grunt,我强烈推荐Browsersync. 它将监视您的文件,并在文件更改时立即更新。它还可以跨多个打开的浏览器同步滚动位置、表单提交等。非常酷。

SO网友:Sagive

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

所以经过思考,我找到了一种在开发新网站时覆盖缓存的好方法。。。(而且很简单)。

我们需要的是告诉wp这是一个像这样的新CSS版本。。。

Before changes:

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

After changes:

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

This is what we added:

?v=\'.time()
Explanation:
我们基本上是在css文件中添加一个动态版本号,这迫使浏览器在每次更新css时加载新的css。

不要忘记在完成开发后删除它,否则您的缓存将无法用于此文件,它将加载以一次又一次地返回用户。

此技术适用于css&;js文件-希望这有帮助;)

SO网友:mor7ifer

这可能看起来过于简单,但在完成站点的开发部分之前,如何禁用缓存?开启和关闭并不简单。

SO网友:Richard Neil Ilagan

我知道这个问题的答案已经被接受了,但我认为这个答案对于手头的问题来说仍然太复杂了,而且实际上可能是不正确的,这取决于用户(虽然不是冒犯),所以我想我还是要分享一下在我开发时如何绕过缓存(不仅仅是使用Wordpress)。

大多数现代浏览器都有一种称为incognito mode. 在这种模式下,计算机中的任何内容都不会被缓存,因此每次刷新都是从服务器上下载一个新的slate。在Internet Explorer中按Ctrl + Shift + P. 在Firefox和Chrome中,按Ctrl + Shift + N.

如果您的浏览器没有隐姓埋名模式,通常可以按强制重新加载Ctrl + F5 对于IE,或Ctrl + Shift + R 在Firefox和Chrome上。

至于您关于CSS文件(本质上是所有资产文件,如图像和Javascript文件)的问题,WP Super Cache不会以任何方式缓存这些文件。您的设置和/或此插件的使用does not 影响这些文件的服务方式。What\'s caching those files are your browser, 这就是为什么你要硬装弹。

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

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

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

最后(这是我个人的偏好,因为在编码方面我是一个非常固执的人),使用匿名或强制重载不会要求您在HTML页面上添加不必要的标记。当然,添加时间戳只会在每个请求的每个静态文件中添加大约13个字节,但是,正如我所说的,我对这类东西很挑剔。仍然不需要13个字节。

SO网友:Steve B

在Windows下在Bitnami堆栈上运行Wordpress对我有用的是编辑我的php。ini文件并重新启动我的服务器。

在[操作缓存]部分更改操作缓存。将revalidate\\U freq重新验证为1

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

SO网友:Matthew Boynes

天哪,有很多方法可以回答这个问题!首先,您询问了两件不同的事情:WP超级缓存和CSS文件。这些文件在不同的地方以不同的方式缓存,因此认识到问题所在很重要。

如果WP Super Cache,可以定义常量DONOTCACHEPAGE 在您的功能中。php在开发过程中防止WP超级缓存缓存任何内容。但别忘了在发布时删除它!

define(\'DONOTCACHEPAGE\', true);

每个站点还有一个唯一的键可以附加到URL以加载页面的新版本,我相信您可以在“高级”选项卡中找到。

将其分解为一个更好的解决方案,您应该考虑设置一个开发环境和一个生产环境,其中您的开发环境没有启用WP超级缓存(同样,假设这是您的问题)。

如果您的问题是CSS/JS文件,那么请参阅toscho的答案和上面m0r7if3r的后续评论。

SO网友:fxfuture

HyperCache在您以管理员身份登录时禁用缓存。不确定WP超级缓存是否具有相同的功能。

SO网友:moettinger

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

SO网友:wpcoder

如前所述,对于wp超级缓存,但对于wp-config.php更改为:

define( \'WP_CACHE\', false );
参考号:codex.wordpress.org

SO网友:Mark

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

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

结束

相关推荐

下拉菜单自定义菜单中的css

我已经创建了一些页面,一些页面有子页面。当我转到wp admin菜单时,我创建新菜单并拖动所有页面,包括带有子页面的页面。我注意到菜单都没有显示我希望看到的很酷的下拉列表。这是否意味着在wp admin中创建的菜单不能有下拉菜单?。