我应该将关键的css存储在数据库中还是主题的文件系统中?

时间:2019-02-09 作者:James Hamann

我有一种方法,可以在请求页面时检测帖子的关键css,并将其排列以优化页面速度。我想缓存这个css,以避免为每个页面请求编译它。我正在使用file_get_contents 在多个css文件上连接css,我被告知这意味着每个请求都需要在文件系统中执行大量读取操作,这对于服务器负载来说不是最佳选择。

我正在尝试决定是将这个关键的css缓存在文件系统中还是数据库中,甚至可能是作为它自己的帖子类型。我知道我将使用css文件名的哈希来生成缓存文件,作为缓存文件的名称。在页面请求中,我将使用此哈希来检查它们是否是缓存文件,以及是否内联或排队缓存该文件。

我正在处理这个缓存的文件,而浏览器是否已经缓存了它的旧版本,这就是我需要决定是否file_get_contents 或者从数据库中获取。就像我之前说过的,我被告知要尽量减少服务器上的读取操作量,我可以通过将css存储到数据库中来减少这一点。

从数据库中获取帖子及其内容会比打电话更好吗file_get_contents()? 如果CSS相当大,也许会是,我知道MySQL有自己的内置缓存,这可能比我能写的任何缓存系统都要好。然而,读取磁盘上的一个文件似乎并没有那么糟糕,而且它不会在每个页面的每个请求上都发生,每个用户会话可能只会发生几次。

这是一篇冗长的文章。除了使用插件之外,还有其他人想出了这样的关键CSS的解决方案吗?

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

前言:最好看看您的主机提供了哪种缓存选项。如果可以使用对象缓存、CDN或类似的东西,则可以减少服务器上的负载。

如果您的数据库和Web服务器是同一主机,那么将其存储在数据库中并不一定意味着对磁盘的读取更少。数据库只是一种将数据从文件系统映射到合理查询的方式,在某种程度上需要对文件系统进行读/写操作(尽管它也会进行一些缓存)。

那么,该怎么办

我建议Object Cache. 安装如下内容Redis - Redis提供了means of persistence, 因此,不要让;内存数据结构“;部分愚弄你。

一旦您用WordPress设置了某种类型的对象缓存(有许多流行选项的插件,包括Redis),您就可以使用WordPress自己的内部方法与缓存进行交互。

设置缓存数据并使其无效

function get_cached_css( $post_id ) {
    $css_hash = generate_your_hash();
    $css      = wp_cache_get( $css_hash, \'css\' );

    if ( ! $css ) {
        $css = generate_css();

        // Purge any previous CSS.
        $old_css = get_post_meta( $post_id, \'custom-css-key\', true );

        if ( $old_css ) {
            wp_cache_delete( $old_css, \'css\' );
        }

        wp_cache_set( $css_hash, $css, \'css\' );
        update_post_meta( $post_id, \'custom-css-key\', $css_hash );
    }

    return $css;
}
填写适合生成CSS哈希和文件的方法。

然后,在模板中:

$css = get_cached_css( get_the_ID() );
// etc...

相关推荐

WordPress wp-admin css未加载

以前有SSL现在没有SSL我的word press管理仪表板css未加载,但主页和其他页面工作正常有人知道如何修复此问题吗?没有ssl,只是http已经有人问了同样的问题,但这些答案并不能解决我的问题Wordpress wp-admin suddenly lost its styleWordpress Admin Panel Completely Distorted, no css at all来自其他堆栈交换网络的相同问题Wordpress admin not loading css/jswordpre