网站响应时间过长的原因及解决方法(网站打开速度慢怎么优化)

网站优化 站长头条评论236阅读模式

建立了一个博客,发表了3.8万篇文章。

随着数据条数的增多,尤其是搜索的时候,发现搜索时灵时不灵,很久都没有反应。

后面在wordpress中footer.php页面下加入这一句,可以显示mysql加载的速度和耗时。

<?php echo get_num_queries();?>次加载共计耗时<?php timer_stop(1);?>

搜索关键词之后,发现用时居然快一分钟了,慢成蜗牛了,实在不能忍了。

18次加载共计耗时52.783

通过下面的方法,让网站变成兔子一样迅速。


架设个人博客网站、企业门户都可以使用ECS。如果其网站如个人博客主要面向国内用户访问,为加快速度还是建议选用国内的服务器商。

[阿里云域名] (
https://wanwang.aliyun.com/domain/com/?userCode=yos4xyvp)连接,

[阿里云服务器ECS] (
https://www.aliyun.com/minisite/goods?userCode=yos4xyvp) 链接

为什么选择阿里云

  1. 以前域名注册一般选老牌域名服务商,其中万网已经被阿里收购到旗下了。
  2. 提供域名备案服务。备案业务还是很贴心的。提交完备案信息之后,第二天阿里云小姐姐会帮你免费形式审查一下,还会主动打电话过来帮助校正。如果是自己动手提交备案信息给ICP备案机构,万一因为低级错误被驳回就浪费了十天左右时间。
  3. 域名ICP备案需要服务器,阿里云也提供服务器购买,一条龙服务嘛。服务器在阿里云毕竟服务器才是支出大头,域名什么的都是小意思了。而且购买完服务器之后,还会有客服主动打电话过来询问使用情况,需不需要技术支持,还是挺不错的。
  4. 阿里云服务器购买新用户有优惠,最基础的话一年下来不超过100元。如果是本科生的话免费使用的。
  5. 备案完成之前,服务器不算租赁时间。比如说3月1日我购买了一年的服务器,域名提交备案。18日域名备案审核通过。服务器租赁时间重新按18日算起,即可以用到第二年3月18日。相当于免费多用几天。占了一点小便宜。

限定搜索标题

搜索发现关键词发现返回一两万条结果。

才了解到搜索不仅仅是搜索标题,还包括正文内容。

其实我在这里并不需要搜索正文内容,修改PHP代码,限定只搜索标题,将下面的代码添加到主题的 functions.php 文件即可

/**
 * 让 WordPress 只搜索文章的标题
 * https://www.wpdaxue.com/search-by-title-only.html
 */
function __search_by_title_only( $search, &$wp_query )
{
    global $wpdb;
 
    if ( empty( $search ) )
        return $search; // skip processing - no search term in query
 
    $q = $wp_query->query_vars;    
    $n = ! empty( $q['exact'] ) ? '' : '%';
 
    $search =
    $searchand = '';
 
    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }
 
    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }
 
    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

对MySQL的wp_posts表中post_title增加索引

这样加快对标题搜索。

安装Memcached插件

在bt面板里勾选这个插件,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

清理WordPress中MySQL数据库垃圾数据

数据库的垃圾数据主要存在wp_posts、 wp_postmeta、 wp_commetns、 wp_commentmeta 和 wp_options

具体可以搜索”介绍使用WordPress时10个常用的MySQL查询“等内容。

关于Wordpress中数据表关系如下

数据表

存储的数据

关联到

wp_posts

文章、页面、附件、版本、导航菜单项目

wp_postmeta (通过post_id关联)

wp_postmeta

每个文章的元数据

wp_posts (通过 post_id关联)

wp_term_relationships

文章和自定义分类法之间的关系

wp_posts (通过 post_id 关联) wp_term_taxonomy (通过term_taxonomy_id 关联)

wp_term_taxonomy

自定义分类法(包括默认的分类目录和标签)

wp_term_relationships(通过 term_taxonomy_id关联)

wp_terms

关联到分类法中的分类目录,标签和自定义分类项目

wp_term_taxonomy (通过term_id 关联)

wp_posts

因为wp_posts会保留文章修订版本,即发布一篇文章,在数据库里是有两条的数据的。

删除文章修订版本

DELETE FROM wp_posts  WHERE post_type = 'revision';

wp 媒体管理器上传图片的时候同时会生成attachment 文章格式,如果你不需要根据这个检索图片的话也可以删掉。

DELETE FROM wp_posts  WHERE post_type = 'attachment';

wp_postmeta

这里是重灾区,可以执行以下命令

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';

如果你不需要管理你的多媒体文件可以使用下面这两句

DELETE FROM wp_postmeta WHERE meta_key = '_wp_attached_file';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata';

综合到一起可直接执行下面两句

DELETE FROM wp_postmeta WHERE meta_key in ('_edit_lock', '_edit_last', '_wp_old_slug', '_revision-control', '{{unknown}}', '_wp_attached_file', '_wp_attachment_metadata');
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);

wp_comments

删除所有垃圾评论

DELETE FROM wp_comments  WHERE comment_type = 'trash';

删除所有待审评论

DELETE FROM wp_comments  WHERE comment_approved = '0';

wp_commentmeta

一般来说直接删掉这个表就可以了,如果你使用了commentmeta存储信息请谨慎执行此句

 TRUNCATE TABLE `wp_commentmeta`;

wp_options

尤其是使用网易云音乐,都会在wp_options表中产生大量垃圾数据。

DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%';

这样会删除所有临时数据,包括未过期的,谨慎使用。

通过以上设置,现在几万条的搜索,不到1秒的响应,效率极大的提高。

懂站帝
  • 本文由 发表于 2022年3月26日 09:50:33
  • 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至395045033@qq.com举报,一经查实,本站将立刻删除。
广告也精彩
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定