wordpress速度慢,cpu 100%,内存爆,优化教程2

1年前 (2023-01-03)阅读815回复0
翱翔MJ
翱翔MJ
  • 管理员
  • 注册排名1
  • 经验值3379
  • 级别管理员
  • 主题545
  • 回复327
楼主

1.scripts.js?ver=xxx

wordpress 网站源码里面Js,Css?ver=xxx, 这些都需要从服务器重新获取,极大增加我们服务器的带宽压力,而且增加了加载时间,所以,禁止了他

function _remove_script_version ( $src ){ $parts = explode( '?', $src ); return $parts[0];}add_filter( 'script_loader_src', '_remove_script_version', 15, 1 );add_filter( 'style_loader_src', '_remove_script_version', 15, 1 );

将以上代码填入functions.php即可


2.禁用Pingback

Pingback是链接到任何其他WordPress博客时创建的一种WordPress评论。如果启用此功能,则只要有任何其他博客链接到你的站点,你就会收到Pingback通知

要在WordPress中禁用Pingback,打开WordPress后台的“设置”>“讨论”,然后取消选中以下设置。

顺便把底部:头像显示,这个功能也取消


3.删除RSD链接

删除RSD链接

RSD是一种发现服务,主要用于检测博客上的Pingback和XML-RPC(xml类文件格式,没啥用),如果之前禁用掉Pingback和XML-RPC的话,ESD直接删除即可。

remove_action( 'wp_head', 'rsd_link' ) ;

RSD连接标记如果还存在每个网页上,我们删除它即可。

同样是将代码填入functions.php然后保存即可。


4.禁用自我Pingbacks

自己文章里调用了自己的某个文章链接时候wordpress会创建一个自我Pingbacks,这个东西没有什么价值。可以禁用。

function no_self_ping( &$links ) {$home = get_option( 'home' );foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]);}add_action( 'pre_ping', 'no_self_ping' );


5.删除REST API链接

网站每个页面都有一个这个API的链接。

WordPress REST API是用来跟其他应用程序通信的。一般用来自己开发一些小工具之类,大多数网站都不会使用到。可以禁用他。代码如下

add_action('after_setup_theme', function(){ remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );});

写入functions.php保存即可


6.禁用心跳连接Heartbeat API

wordpress使用Heartbeat API来维护浏览器和服务器之间的链接。当你写帖子时候他会自动存储草稿就是这个原因。

从表面上看Heartbeat API是一个有用的功能,但是从性能的角度来看wordpress每隔15秒向服务器发送ajax调用,这会使一些代码在服务器上执行会占用CPU等资源。

add_action( 'init', 'stop_heartbeat', 1 );function stop_heartbeat() {wp_deregister_script('heartbeat');}

写入functions.php文件保存即可。

警告:Heartbeat API还用于一些基本功能,例如在管理员编辑时锁定帖子,禁用API也会禁用该功能。

如果您的网站上有多位作者或在禁用Heartbeat后遇到问题,请删除您添加的代码并使用Heartbeat Control Plugin来管理API,而不是完全禁用它。


7.禁用WooCommerce样式表等优化

当您安装WooCommerce时,它会为您的网站添加一些样式表,这些样式表随页面一起加载。如果您使用自定义主题(可能),则可以停止加载这些样式表。

add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );

写入functions.php保存即可。

如果要将自己的样式表排入队列,使用下方代码

/** Enqueue your own stylesheet */function wp_enqueue_woocommerce_style(){ wp_register_style( 'mytheme-woocommerce', get_template_directory_uri().'/css/woocommerce.css' ); if ( class_exists( 'woocommerce' ) ) { wp_enqueue_style( 'mytheme-woocommerce' ); }}add_action( 'wp_enqueue_scripts', 'wp_enqueue_woocommerce_style' );

写入functions.php保存即可。


购物车刷新

WooCommerce内置功能可以在不刷新页面的情况下用户添加了新的商品后自动刷新购物车。

这个体验不错,但是加载的时间比较长。所以说各有利弊。在大型网站上,WooCommerce的购物车刷新可能需要好几秒钟。这个功能不是必要的,我们可以禁用他。

add_action( 'wp_print_scripts', 'nuke_cart_fragments', 100 );function nuke_cart_fragments() { wp_dequeue_script( 'wc-cart-fragments' ); return true;}add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);function dequeue_woocommerce_cart_fragments() { if (is_front_page()) wp_dequeue_script('wc-cart-fragments');}

写入functions.php保存即可。

注意:禁用后购物车不会自动刷新,但是刷新页面时购物车会自动更新到最新的商品列表。


WooCommerce小部件

WooCommerce默认预先加载了许多小部件。大多数主题都有自己的功能来替换这些小部件,并且保持它们的启用会增加加载时间,同时不提供任何其他价值。使用下方代码来禁用

add_action( 'widgets_init', 'remove_woo_widgets' );function remove_woo_widgets() { unregister_widget( 'WC_Widget_Recent_Products' ); unregister_widget( 'WC_Widget_Featured_Products' ); unregister_widget( 'WC_Widget_Product_Categories' ); unregister_widget( 'WC_Widget_Product_Tag_Cloud' ); unregister_widget( 'WC_Widget_Cart' ); unregister_widget( 'WC_Widget_Layered_Nav' ); unregister_widget( 'WC_Widget_Layered_Nav_Filters' ); unregister_widget( 'WC_Widget_Price_Filter' ); unregister_widget( 'WC_Widget_Product_Search' ); unregister_widget( 'WC_Widget_Top_Rated_Products' ); unregister_widget( 'WC_Widget_Recent_Reviews' ); unregister_widget( 'WC_Widget_Recently_Viewed' ); unregister_widget( 'WC_Widget_Best_Sellers' ); unregister_widget( 'WC_Widget_Onsale' ); unregister_widget( 'WC_Widget_Random_Products' );}

写入functions.php保存即可。

删除WooCommerce Meta Boxes

当您安装WooCommerce时,它会在您网站的后端添加许多元框。这些元框用途很少,您可以禁用它们以改善后端加载时间。否则的话我们后台页面大概时间将会较长

add_action('edit_form_after_title', 'my_custom_post_edit_form', 100);/*** remove all meta boxes, and display the form*/function my_custom_post_edit_form($post) { global $wp_meta_boxes; // remove all meta boxes $wp_meta_boxes = array('my_custom_post_type' => array( 'advanced' => array(), 'side' => array(), 'normal' => array(), )); // show my admin form require dirname(__FILE__) . '/views/my-custom-post-edit-form.php';}

写入functions.php保存即可。


8.强制SSL/https

安装好SSL证书后并不是访客就会访问到https的网站链接,我们还需要对他进行强制ssl方可。

使用宝塔面板的,在网站SSL设置界面右上角可以一键开启强制SSL。

强制SSL后,访客访问http://链接会自动跳转到https://链接。


9.使用webp格式图片

webp格式图片的优势就不多说了,主要就是图片清晰度高,体积小。推荐使用 qqworld 插件


10.关闭日志修订记录

每次在wordpress网站修改文章的时候都会产生一个修订版本,wp_posts会产生一个post_type为“REVISIONS”的记录,修改次数一多的话,那修订版本就有几万条记录了

在function.php里加入如下代码关闭日志修订:

define('WP_POST_REVISIONS', false);


11手工优化数据库

优化之前切记先备份下数据删除所有日志修订 影响wordpress运行速度的根源在于日志的修订记录,一百多篇文章会有一千多条的日志修订的记录,所以此步优化必须做,提速效果非常明显。执行以下SQL语句:

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision';


优化 wp_posts 表 写文章的时候进行的插入、更新或删除等都会产生不同大小的记录碎片,整理碎片这步要做。执行以下SQL语句:

OPTIMIZE TABLE wp_posts;


删除所有垃圾留言 这个可以在后台一条一条的删除,也可以到MySQL执行下也行:

DELETE FROM wp_comments WHERE comment_approved != '1';

删除没有的标签 有些文章删除了,但标签还在,WordPress不会自动删除的,我们手动清理下吧, 执行以下SQL语句:

DELETE a,b,cFROMwp_terms AS aLEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_idLEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_idWHERE (c.taxonomy = 'post_tag' ANDc.count = 0);


删除没用的 postmeta 记录 当文章的记录删除后,还有日志扩展表postmeta的数据还没有删除,也人工清理下吧,执行以下SQL语句:

DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL


通过以上数据库命令优化,你的数据库已经很小了,网站速度得到提升。

0
回帖

wordpress速度慢,cpu 100%,内存爆,优化教程2 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息