Java之网站优化

本博客从今年年初开始,其实已经完成了基本功能。随着偶尔写两篇文章,本站访问速度越来越慢。最开始使用的是腾讯云的最基础云服务器,配置为:共享CPU、512M、Unbuntu服务器,每次打开服务器,发现CPU和内存使用率经常达到了100%,基本满载运行。还经常报内存溢出异常。

    后来,升级了服务器,内存变为了1G,CPU也变成了单核。但是网站的访问速度还是让人不能忍受。今天,博主终于不能忍了,仔细分析了下代码和服务器。主要从以下两个方面进行了优化,大大提高了网站访问速度:

   (1)坑爹的Hibernate,from查询。

    虽然博主早就明白数据库查询的时候,坚决避免select *。但是博主还是犯了迷信框架这个错误,Hibernate默认推荐的是 from 对象。这种处理方法无疑将所有查询默认为select *,这简直是一种愚蠢的做法。特别是当数据库中存储有大文本字段的时候。本博的文章才16篇的时候,已经慢的不行了。

     解决办法:查询部分字段

     这种方法需要在实体类中构造指定字段的构造方法,查询语句中使用:select new Blog(b.id,b.title,b.content2,b.author,b.pubDate,b.click) from Blog b。否则,查询出来的集合对象不能直接转换为List对象,Hibernate的面向对象功能将失去其优势。

   (2)对特殊字段进行处理。

     由于博客中的内容字段是longText类型,每次直接从数据库中取出来的时候,将大大降低数据库的IO。虽然Hql自带了许多函数,比如substring函数,可以直接操作数据库内容。但是,这样的结果是:直接导致查询出来的结果是Object数组。有意思吗?转换起来又麻烦得要死。没办法,只好,存储一个冗余字段content2,每次更新的时候,取content2=content.subString(0,300)。

   (3)网站图片的处理。

     对于图片,我们有两种处理方式,存储在数据库中,或者把链接地址存储在数据库中。前者,使用方便,我们可以直接把图片复制到博客中发表,非常简单,不用转换。缺点是:早期数据库不推荐,现在数据库性能还好,无所谓。后者方法,每次需要使用图片时,先上传到服务器上,拿到链接地址,数据库中只存储链接地址。这种方法麻烦了点,特别是图片多的时候。

     好吧。。博主不从使用的便捷性考虑问题,来点程序员的思路。图片存储在数据库中是二进制数据,并且这个量相对于文本还是相当大的。如果我们需要对数据库内容进行搜索、全文检索时,那么就非常不推荐把图片直接存储在数据库中,否则会严重影响文本检索结果。如果需要对图片进行特别处理的话,比如图片检索的话,那就需要提取出图片的关键性特征等信息,另外存储了,这样的信息存储在数据库中也比较好。

     从性能上来讲,大家可以比较下这相同的两篇文章:http://www.webank.pw/blog_show.action?blog.id=6和http://www.webank.pw/blog_show.action?blog.id=21的访问速度。这篇文章内容总共包含17张图片,共600KB大小。但是访问速度已经可以明显区分了。前面一篇文章的图片是存储在数据库中的,后面一篇是存储在服务器的。后者明显快于前者。至于原因,这里各种分析就略了,什么服务器性能啊、服务器带宽啊、客户端网速啊、图片传输速度啊、图片显示速度啊。。。。。大家感兴趣的可以进行专业分析的。

     经过以上处理后,本站的访问速度总算是正常了。不再半天没反应。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA中的加密算法之双向加密(一)

           加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。大体上分为双向加密...

    幽鸿
  • Spark DAGScheduler源码解读2-task创建

    在上一篇文章中,我们分析了DAGScheduler的代码,重点了解了stage的创建和划分,是重中之重。这篇文章重点分析下task的创建:

    幽鸿
  • DAGScheduler源码解读2-task创建

    在上一篇文章中,我们分析了DAGScheduler的代码,重点了解了stage的创建和划分,是重中之重。这篇文章重点分析下task的创建:

    幽鸿
  • 聚类分析算法在Netflix服务器异常自动侦测中的应用

    用户1737318
  • 图片服务架构演进及云存储的优势

    问题导读 1.构建独立的图片服务器有什么优势? 2.使用云存储服务有哪些优势? 3.图片如何防盗链? 现在几乎任何一个网站、Web App以及移动...

    用户1410343
  • MySQL数据库备份之主从同步配置

    导读:本文介绍MySQL数据库备份之主从同步配置,通过将腾讯云服务器上的MySQL备份到本地服务器中这个例子来做出展开解释。

    数据和云01
  • MySQL数据库备份之主从同步配置

    墨墨导读:本文介绍MySQL数据库备份之主从同步配置,通过将腾讯云服务器上的MySQL备份到本地服务器中这个例子来做出展开解释。

    数据和云
  • 创建Oracle数据库

    打开开始->程序,找到oracle的配置和移置工具,打开Database Configuration Assistance

    用户1208223
  • 速读原著-TCP/IP(客户-服务器模型)

    大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。

    cwl_java
  • 服务器中木马怎么处理

    近日,某一客户网站服务器被入侵,导致服务器被植入木马病毒,重做系统也于事无补,目前客户网站处于瘫痪状态,损失较大,通过朋友介绍找到我们SINE安全公司,我们立即...

    网站安全专家

扫码关注云+社区

领取腾讯云代金券