WordPress文章过多导致网站慢卡顿优化方法
当我们使用WordPress作为程序时,如果WordPress网站的文章数量超过10万,即使网站服务器的配置很强大,网站的打开速度基本上也会很慢。这时我们就需要对网站进行优化。
这是因为 WordPress 在查询文章列表时,默认也会查询文章数。这对于少量的网站数据应该不会造成任何问题,但是对于大量的文章是不可避免的。慢查询。主机引用的一位用户告诉我们,他的网站有40万篇文章,打开首页需要一两分钟,甚至首页或文章页也经常打不开。
WordPress网站查询慢的原因:WordPress在查询帖子列表时,默认也会查询帖子数。使用此方法:get_posts、query_posts 和 WP_Query。get_posts在4.6.1+中没有使用SQL_CALC_FOUND_ROWS,但是query_posts和WP_Query仍然使用,所以需要优化。
那么如何解决WordPress文章过多导致网站慢的问题呢?
方法一:完全禁用SQL_CALC_FOUND_ROWS,将以下的代码放到functions.php文件中:
1 |
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;width:100%;"><div class="php codecolorer" style="white-space:nowrap">add_action<span style="color: #009900;">(</span><span style="color: #0000ff;">'pre_get_posts'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wndt_post_filter'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><span style="color: #000000; font-weight: bold;">function</span> wndt_post_filter<span style="color: #009900;">(</span><span style="color: #000088;">$query</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><br><span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span>is_admin<span style="color: #009900;">(</span><span style="color: #009900;">)</span> or <span style="color: #339933;">!</span><span style="color: #000088;">$query</span><span style="color: #339933;">-></span><span style="color: #004000;">is_main_query</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><br><span style="color: #b1b100;">return</span> <span style="color: #000088;">$query</span><span style="color: #339933;">;</span><br><span style="color: #009900;">}</span><br><br><span style="color: #666666; font-style: italic;">// 禁止查询 SQL_CALC_FOUND_ROWS</span><br><span style="color: #000088;">$query</span><span style="color: #339933;">-></span><span style="color: #004000;">set</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'no_found_rows'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><span style="color: #009900;">}</span></div></div> |
方法二、如果您还需要查询文章数,请使用更高效的EXPLAIN方法代替SQL_CALC_FOUND_ROWS,以更高效的方式禁用SQL_CALC_FOUND_ROWS。这里我们使用 EXPLAIN 方法。
具体代码如下,将以下的代码放在functions.php文件中。
1 2 3 4 5 6 7 8 9 10 |
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;width:100%;"><div class="php codecolorer" style="white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span> <span style="color: #339933;">!</span> <span style="color: #990000;">function_exists</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">'zjck_set_no_found_rows'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span><br><span style="color: #009933; font-style: italic;">/**<br> * 设置WP_Query的 'no_found_rows' 属性为true,禁用SQL_CALC_FOUND_ROWS<br> *<br> * @param WP_Query $wp_query WP_Query实例<br> * @return void<br> */</span><br><span style="color: #000000; font-weight: bold;">function</span> zjck_set_no_found_rows<span style="color: #009900;">(</span>WP_Query <span style="color: #000088;">$wp_query</span><span style="color: #009900;">)</span><br><span style="color: #009900;">{</span><br><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">set</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'no_found_rows'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><span style="color: #009900;">}</span><br><span style="color: #009900;">}</span><br> add_filter<span style="color: #009900;">(</span> <span style="color: #0000ff;">'pre_get_posts'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'zjck_set_no_found_rows'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><br><span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span> <span style="color: #339933;">!</span> <span style="color: #990000;">function_exists</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">'zjck_set_found_posts'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">{</span><br><span style="color: #009933; font-style: italic;">/**<br> * 使用 EXPLAIN 方式重构<br> */</span><br><span style="color: #000000; font-weight: bold;">function</span> zjck_set_found_posts<span style="color: #009900;">(</span><span style="color: #000088;">$clauses</span><span style="color: #339933;">,</span> WP_Query <span style="color: #000088;">$wp_query</span><span style="color: #009900;">)</span><br><span style="color: #009900;">{</span><br><span style="color: #666666; font-style: italic;">// Don't proceed if it's a singular page.</span><br><span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">is_singular</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><br><span style="color: #b1b100;">return</span> <span style="color: #000088;">$clauses</span><span style="color: #339933;">;</span><br><span style="color: #009900;">}</span><br><br><span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span><br><br><span style="color: #000088;">$where</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">(</span><span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'where'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> ? <span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'where'</span><span style="color: #009900;">]</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br><span style="color: #000088;">$join</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">(</span><span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'join'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> ? <span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'join'</span><span style="color: #009900;">]</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br><span style="color: #000088;">$distinct</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">(</span><span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'distinct'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> ? <span style="color: #000088;">$clauses</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'distinct'</span><span style="color: #009900;">]</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br><br><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">found_posts</span> <span style="color: #339933;">=</span> <span style="color: #009900;">(</span>int<span style="color: #009900;">)</span><span style="color: #000088;">$wpdb</span><span style="color: #339933;">-></span><span style="color: #004000;">get_row</span><span style="color: #009900;">(</span><span style="color: #0000ff;">"EXPLAIN SELECT <span style="color: #006699; font-weight: bold;">$distinct</span> * FROM <span style="color: #006699; font-weight: bold;">{$wpdb->posts}</span> <span style="color: #006699; font-weight: bold;">$join</span> WHERE 1=1 <span style="color: #006699; font-weight: bold;">$where</span>"</span><span style="color: #009900;">)</span><span style="color: #339933;">-></span><span style="color: #004000;">rows</span><span style="color: #339933;">;</span><br><br><span style="color: #000088;">$posts_per_page</span> <span style="color: #339933;">=</span> <span style="color: #009900;">(</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">(</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">query_vars</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> ? absint<span style="color: #009900;">(</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">query_vars</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> <span style="color: #339933;">:</span> absint<span style="color: #009900;">(</span>get_option<span style="color: #009900;">(</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><br><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">max_num_pages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">(</span><span style="color: #000088;">$wp_query</span><span style="color: #339933;">-></span><span style="color: #004000;">found_posts</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$posts_per_page</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><br><br><span style="color: #b1b100;">return</span> <span style="color: #000088;">$clauses</span><span style="color: #339933;">;</span><br><span style="color: #009900;">}</span><br><span style="color: #009900;">}</span><br> add_filter<span style="color: #009900;">(</span> <span style="color: #0000ff;">'posts_clauses'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'zjck_set_found_posts'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span></div></div> |
由于网站搬家,部分链接失效,如无法下载,请联系站长!谢谢支持!
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » WordPress文章过多导致网站慢卡顿优化方法
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » WordPress文章过多导致网站慢卡顿优化方法