除了安装W3 Total Cache或其他缓存插件外,我还可以采取哪些步骤来确保我的主题和网站尽快运行。

评论

如果您在vps上运行站点,则应尝试使用redis缓存。

#1 楼

您可以在Nginx上安装WordPress。有很多资源可以帮助您:


nginx兼容性插件
如何:在WordPress上安装WordPress
Nginx-
Slicehost讨论
使用Nginx和WP Super Cache加快WordPress
nginx + lighttpd + FastCGI + php上的WordPress
Nginx作为WordPress的前端代理缓存

一些性能信息最后一个链接(设置似乎与其他链接略有不同):


因此,我决定在wordpress的前面放置一个代理,以尽可能多地将静态缓存添加到

/>尽可能。所有未经身份验证的
流量都直接从
nginx文件缓存提供服务,并从6
页/秒到7000+页/秒接收一些请求
(例如RSS feed生成)第二。
Nginx还处理日志记录和
gzipping处理,而使后端的重载
保持其最佳状态:仅在需要
时提供动态WordPress页面。

> ...

在nginx上–它是如此高效以至于令人恐惧。我从未见过即使在我们最重的负载下,它使用的内存也不会超过10至15兆兆RAM和CPU的故障。我们的
神经节图不说谎:我们将内存需求减半了,将我们的
传出网络吞吐量提高了一倍,并且完全均衡了我们的负载。自
自设置以来,我们
基本上没有问题。


评论


是否有人在使用Nginx方面节省了速度?

–李M
2010年8月18日在15:07

迈克,我添加了另一个链接,以及该帖子中的一些信息。

–特拉维斯·诺斯库特(Travis Northcutt)
2010年8月18日在15:14

我将主博客从运行Apache的1G服务器迁移到运行Nginx的512M服务器。尽管RAM减少,但运行更平稳。诚然,我还有其他服务正在1G服务器上运行(电子邮件,imap,mailman以及其他一些低流量网站)。

–道格拉斯·坎贝尔
2012年6月7日在20:26

在nginx上运行WordPress的NB与将nginx用作Wordpress前面的代理缓存不同。

–山姆
13年5月2日在21:08

#2 楼

设置客户端有效期,例如css,图像,JavaScript等,无需为每个页面视图重新下载。到目前为止,这对我的网站加载时间影响最大​​。最快的下载是从未发生过的下载...

# BEGIN Expire headers
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 7200 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/javascript "access plus 2592000 seconds"
  ExpiresByType application/x-javascript "access plus 2592000 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType application/xhtml+xml "access plus 7200 seconds"
</IfModule>
# END Expire headers

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
  <FilesMatch "\.(ico|jpe?g|png|gif|swf|gz)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\.(js)$">
    Header set Cache-Control "max-age=2592000, private"
  </FilesMatch>
<filesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, public"
</filesMatch>
# Disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
# END Cache-Control Headers


您可以预压缩所有您可以合理使用的文件(7-zip是一个很好的工具)&将其上传到与刚刚压缩的文件相同的位置。更改.htaccess以提供预压缩的文件,如下所示。需要注意的是,如果/当您更新内容时,您需要记住将其重新压缩。除了解析.htaccess之外,这还减少了CPU开销。

RewriteEngine on
#Check to see if browser can accept gzip files. If so and we have it - serve it!
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) .gz [QSA,L]


这仅仅是一个原始答案。这个主题有很多变化。我在此发布了博客,并在http://icanhazdot.net/2010/03/23/some-wordpress-stuff/中添加了许多参考,以介绍更深入的文章。阅读并且更重要的是,我指向的参考文献-它们是很好的资源。

请注意,如果您经常修改,则用户将需要刷新其缓存。

我发现非常有用的插件也是wp-minify。需要注意的是,您应该排除特定于页面的项目(联系表格,首页滑块等),这样您就不必为每个页面重新下载整套CSS,JS等。这是最小化,组合和压缩基准CSS,JS等的好方法。它大大减少了HTTP请求。 Wp-minify可以很好地与超级缓存以及我上面详细介绍的到期标头一起使用。

在Firebug(Firefox)或类似工具中使用Yslow监视您的http请求以及压缩的内容和未压缩的内容。也可以查看其中的到期标头。您很快就会看到可以改进的地方。

评论


如果有人计划复制/粘贴您的重写,则存在一个“ ReWrite”实例应予以纠正。

–Jeremy L
2010-12-12 23:13

哪个实例?

– CAD bloke
2010-12-19 6:52

@Nerdling您能否指出哪个实例需要修复?我想使用上面的代码。

–helgatheviking
2012-12-28 15:38

它可能与Apache的更高版本中弃用的mod gzip有关。最近,我不得不将其更改为mod deflate。

– CAD bloke
2012-12-28 21:36

对于.htaccess的一组默认值,HTML5 Boilerplate项目提供了一个模板。 github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess

– Paul Sheldrake
2014年11月18日在17:48

#3 楼

将您运行的插件数量减少到仅实际需要的数量。特别要注意的是,即使页面上没有使用该代码,插件也会在每次页面加载时添加javascript和CSS代码。

如果您是从头开始创建自己的主题,请分解CSS,以便仅在特定页面模板或视图类型(单个帖子,档案,类别等)需要的功能才会加载需要。

配置W3TC以使用CDN(例如Amazon CloudFront或W3TC支持的其他任何CDN)。

查看“缩小”选项是否对您有用(某些插件生成的js / css无法很好地缩小,因此请确保在激活“缩小”功能后测试您的网站)。

如果您完全控制MySQL服务器,请确保已打开query_cache。使用MySQL调整脚本找到优化数据库配置的其他方法。

如果由于某些原因使用CDN造成问题,请在apache设置中配置mod_expires。对于图像,CSS,JavaScript,视频,音频等静态类型,请设置合理的到期时间。

#4 楼

运行memcached并使用对象缓存来减少数据库查询的数量。这将从数据库而不是页面缓存数据。不确定w3-total-cache是​​否已执行此操作。

请确保您正在运行诸如APC之类的操作码缓存。 (还有其他几种可用。)

评论


APC确实使wordpress的响应速度更快,尤其是管理页面。但是,WP-SuperCache和APC之间存在一些潜在的配置冲突。这些似乎不会影响W3缓存。

– WhieSidE
2010年8月12日15:50

Mark Jaquith发表了一篇很棒的文章:WordPress的APC对象缓存后端。您可以在APC上愉快地使用batcache。

–icc97
2014年10月21日14:26

#5 楼

除了使用磁盘缓存插件(如wp-cache)之外,还可以将博客放在具有“ noatime”属性设置的主机卷上。否则,通过SSH进入您的主机(如果您的网络主机提供了此功能),并每隔几天对文件执行一次常规命令:

chattr -R +A ~/*


〜/ *表示“我的文件”在我的主目录下”。您可以根据需要更改该路径。如果您的网络主机提供了此功能,也可以在cpanel的cron作业中进行设置。

有关atime属性的更多信息,请参见此。它极大地提高了Linux磁盘读取性能。

有时您的网站会受到蜘蛛的打击。您可以使用SpyderSpanker或Chennai Central之类的工具过滤掉无用的蜘蛛,这些蜘蛛无助于将更多网页排名带到您的网站上,而只是放慢速度,然后通过随机发送蜘蛛来抑制好蜘蛛(例如Google,Bing等) HTTP 304未修改的消息。

我看到的另一件事就是插件编写得不好。如果您学习如何制作插件,就会开始看到一些插件的编码效率低下,甚至发现定时炸弹,例如填充和填充但永远不会清除的数据库表,用于存储诸如传入的连接数据之类的东西。 >
除了这里的所有其他解决方案之外,您还可以通过将博客托管在几台Web节点PC上来创建博客的WordPress Web场,这些PC全部连接回一个数据库和一个文件的单个磁盘卷(例如通过NFS挂载的卷)。查看Ultra Monkey,了解如何进行所有操作。

#6 楼

我想出了几个答案:

1)通过在可能的情况下/可行的方式将JavaScript和CSS串联起来,以最小化浏览器必须向主机发出的HTTP请求的数量。

2)尽可能将服务于第三方CDN的图像/媒体卸载到第三方CDN,尤其是在使用共享托管的情况下。

3)尝试减少要在其上显示的帖子数量

3a)尝试使用一个主题,该主题在首页上完整显示一些精选帖子,并摘录所有其他较旧的帖子。

评论


+1减少了帖子数量,这极大地提高了成本。人们真的不需要看到10个旧帖子,我只需将conf设置为8个即可。

–ripper234
2011年4月23日在14:25

#7 楼

缓存WordPress菜单还可以提高性能。特别是如果您有很多页面或庞大的菜单结构,则应考虑这一点。

只需两个简单的步骤即可。首先,创建一个获取或创建菜单的函数,而不是直接调用wp_nav_menu

function get_cached_menu( $menuargs ) {

    if ( !isset( $menuargs['menu'] ) ) {

        $theme_locations = get_nav_menu_locations();
        $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']];
        $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );
        $transient = 'menu_' . $termslug->slug . '_transient';

    } else {

        $transient = 'menu_' . $menuargs['menu'] . '_transient';

    }


    if ( !get_transient( $transient ) ) { // check if the menu is already cached

        $menuargs['echo'] = '0'; // set the output to return
        $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs
        echo $this_menu; // output the menu for this run
        set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved

    } else {

        echo get_transient( $transient ); // just output the cached version

    }

}


在您的主题中,将wp_nav_menu替换为get_cached_menu。现在,每次调用菜单时,您都有一个Databasequery而不是整个Menubuilding。

菜单不会经常更改-但您还必须加入wp_update_nav_menu动作才能删除旧的瞬态。 br />
这样做:

add_action('wp_update_nav_menu', 'my_delete_menu_transients');

function my_delete_menu_transients($nav_menu_selected_id) {

    $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );

    $transient = 'menu_' . $termslug->slug . '_transient';

    delete_transient( $transient ); 

}


下次调用该页面时将生成菜单-并使用缓存的版本,直到有人更新为止

更新版本

感谢@helgatheviking指出了and和ID之间的错误。我更新了功能,使其可以与theme_positionmenu(用于直接调用菜单)一起使用。

菜单始终以菜单名称而不是主题位置保存。

评论


这似乎是一个很酷的主意。我的代码有问题。当我们清除瞬态时,$ nav_menu_selected_id是一个数字,而在调用get_cached_menu()时,menu_id是一个字符串变量,因为该参数成为
    元素的CSS ID。

    –helgatheviking
    2012年12月28日15:40

#8 楼

使用为优化而修剪的数据库类。我们在编写自己的代码方面有很好的经验,可以减少内存使用量和数据库访问速度。紧接着,您也可以通过做一些很小的更改来优化数据库结构本身。

数据库类代码的一部分可以在wordpress trac中找到,但并没有使其成为核心(票号11799及相关)。

评论


有趣的解决方案。如果有人也有兴趣,这是Trac Ticket的URL:core.trac.wordpress.org/ticket/11799

–李M
2010年8月18日在15:06

#9 楼

对于一个人流量大的站点,您应该针对当前内容调整所有MySQL缓冲区。不管WordPress的版本如何,MySQL层都可以计算其配置。

实际上,如果您具有InnoDB数据而未启用innodb_file_per_table,则需要通过将每个表分段到其自己的物理表空间中来清理InnoDB。 。即使您的硬件有限,也可以进行适当的MySQL调整。进行InnoDB优化的方案很多。

恕我直言,您无法在不知道要配置的数据量的情况下为my.cnf规划良好的设置。您将必须定期将生产中的当前数据集加载到暂存环境中,执行优化,并忽略要在生产服务器的my.cnf中配置的数字。

#10 楼

您可以启用全局输出压缩。如果浏览器支持的话,这将自动压缩所有输出的内容。这样可以大大减少传输文件的大小,但会增加CPU负载。

评论


这将使您的网站“感觉”变慢得多。雅虎!技术文档建议您在头尾之后和主体开始之前冲洗代码,以便脚本和样式可以开始加载。通过缓冲整个页面,可以防止这种情况的发生,因此页面“感觉”很慢,因为用户必须等待WordPress呈现整个页面,然后用户才能看到任何内容。

– WhieSidE
10年8月12日在15:53

Scott并不是在谈论缓冲整个页面,而是在使用apache输出压缩。那是不同的,只有当您通过输出缓冲区使用PHP输出压缩时,这才具有您模糊描述的缺陷。但是总之,并不是总之,因为最后,缓冲输出可以使事情变得更快。这与服务器上的I / O有关。

– hakre
2010年8月18日在8:51



#11 楼

我最近在休斯顿WordCamp上谈到了这个主题。以上所有建议都是非常重要的,重要的是要确保所有前端材料都得到充分优化,然后您才能开始处理缓存和服务器性能问题。

渐进式渲染将使您的页面感觉更快,因为用户将在页面内容完全加载之前看到它们。为此,请确保任何阻塞的js位于页面的最底部,而css位于顶部。

此外,如果您使用许多社交媒体按钮,则可以自定义脚本,以使其在页面完全加载后加载到iframe中。我写了一个有关如何使用TweetMeMe re tweet按钮(自从Twitter发布自己的reweet按钮以来已作废)的教程,但是仍然可以应用于其他共享按钮。作为静态内容的前端代理,Apache处理繁重的PHP和MySQL工作。

#12 楼

既然没有人提及,与任何LAMP设置一起提高服务器性能的最重要步骤之一就是切换到apache worker thread和mod_fcgid。

这释放了我的虚拟专用服务器上的500MB内存。

评论


我以前曾尝试过此方法,但从未能够运行稳定的apache worker + fcgi环境。如果有人知道在Ubuntu下对此有一些好的设置说明,请发布它们。对于那些详细介绍了一些会影响FCGI行为的Apache配置指令以及说明如何对其进行调整可能会影响内存使用量,性能等的说明,我尤其感激不尽。目前,我正在使用带有Nginx前端的分叉apache-在代理缓存服务器中。

–道格拉斯·坎贝尔
2011-2-28 14:51



定义稳定。我的安装运行非常稳定,但是您的配置中需要2GB的RAM。您只需要阅读和调整即可。 apache关于fcgi的文档相当丰富。

–超场
2011年3月9日10:50

尝试检查virtualmin.com其非常稳定和免费

–Ünsal Korkmaz
2011年9月11日下午5:41

#13 楼

检查插件速度减慢的指南

有一个非常漂亮的简单插件,称为Page Load Time,它为页面页脚添加了计时器。它实际上只有四行代码:

<?php
function ur_pageload_footer() {
    printf(__('Page in %s seconds', 'pageload'), timer_stop());
}
add_action('wp_footer', 'ur_pageload_footer')


然后:


创建电子表格
列出所有活动的插件并将其放在其中
刷新页面三遍,注意每转页面的加载时间
逐个浏览插件以停用它们
重复步骤3
注意顺序您停用了插件

您的电子表格应如下图所示:

+-------+-------+-------+-------+--------+
| Run 1 | Run 2 | Run 3 | Order | Plugin |


因此,如果停用插件后页面响应时间显着增加,那么您可以看到您是否可以避免使用该插件。

我发现两个插件导致mqtranslate的“显着”速度下降和(相当古老但不错的)多层导航插件。

评论


phantomjs和selenium(或类似的东西)自动执行此过程真的很酷,因此它会自动运行并在最后吐出一些报告。

– Paul Sheldrake
2014年11月18日在17:44

#14 楼

坚持使用W3 Total Cache插件来实现WordPress中的缓存功能。从插件的设置页面启用页面缓存和数据库缓存。确保选择“备用PHP缓存(APC / APCu)”作为缓存机制。不要在W3 Total Cache中启用任何缩小功能,因为您有很多机会破坏站点的外观和/或功能。我们将其留给Cloudflare。

配置完其余插件功能后,请为您的网站设置Cloudflare。确保在“扩展”下的W3总缓存设置中也启用了Cloudflare。

Cloudflare是一个内容交付网络,它缓存您站点中的所有静态内容(图像文件,CSS,JS,文档等),并将其从其全局服务器提供给访问者。这可以帮助加快页面加载时间并减少服务器上的负载。有关Cloudlfare缓存的文件类型的列表,请签出此列表。此外,Cloudflare有免费计划。

在Cloudflare中,将缓存级别设置为标准,并将浏览器缓存过期时间设置为至少20小时以上。启用Always Online™,以便即使您的服务器出现故障,Cloudflare也会从其缓存中提供网站的静态页面。同时启用其自动缩小功能(记住为什么我要求您不启用缩小功能是W3 Total Cache?因为Cloudflare会更好!)然后将Rocket Loader™设置为自动。

以下是Rocket Loader的摘要:


通过捆绑JavaScript文件甚至第三方资源来减少网络请求的数量避免减慢页面的渲染速度。
异步加载脚本,包括第三方脚本,因此
它们不会阻止页面内容立即加载

在本地缓存脚本(使用LocalStorage,在大多数
浏览器和智能手机上都可用),因此除非有必要,否则不会重新获取它们。

在此处可以找到更多信息。

如果可能,请切换到WordPress的Genesis框架,因为它们干净无without肿。创世纪的创建考虑了速度和SEO。我本人已经对其进行了测试,并且我的PageSpeed得分很好。另外,如果您使用的是Genesis,那么不要忘记在W3的Total Cache设置中启用片段缓存。

由于现在您将Cloudlfare用作CDN,因此可以使用像TingPNG的“放大”或“压缩JPEG和PNG图像”以压缩图像。两者都是WordPress.org插件存储库中提供的免费插件。此外,Imagify还支持强大的有损压缩算法。最后,从WordPress存储库安装“从静态资源中删除查询字符串”插件,以便从CSS和JS文件等静态资源中删除查询字符串。这是因为资源带有“?”某些代理缓存服务器(请记住,Cloudflare也是代理缓存服务器)未缓存URL中的“或”。

然后安装“使用Google库”插件。此插件允许您的WordPress网站使用Google的AJAX库API CDN,而不是直接从WordPress安装中提供这些文件。

其中的一些好处是:


增加了用户已经缓存这些文件的机会。
减轻了服务器的负担。
使用库的压缩版本(如果可用)。
Google的服务器已设置为与请求浏览器的HTTP压缩进行协商。

最后但并非最不重要的一点是,使用Ruhani Rabin的'WP-Optimize'插件来清理和优化您的数据库。

希望这可以回答有关优化WordPress的问题。减少服务器负载。