javaweb开发优化

做了一个个人博客的项目,首页需要展示很多内容,有网站的基本信息,罗列最新的博客,个人介绍,最新评论,推荐文章,热门文章,热门文章标签等。这些都需要查询数据库。
我使用的是springmvc,当访问首页时,首先访问一个Controller然后把所有这些信息全部通过数据库查出来,然后放到model里再展示出来,但是感觉这样做的效率太低,展示一个首页需要访问接近10次数据库。用腾讯云1M带宽的服务器,访问首页需要等待5s才能显示完所有信息,实在是太慢了,请问一般这种首页是怎么实现的?是怎么去访问数据库的呢?如何去优化?

阅读 3.3k
5 个回答

建议先在本机测试一下访问速度,以明确问题:
1、如果瓶颈在数据库访问多,那么和1M带宽就没什么关系。可以考虑采用ajax的方式,先加载主要的内容,其他内容异步加载。
2、如果是返回数据库多,造成网络传输慢,才和带宽有关系,这时候一般是做分页查询降低数据量,另外就是服务器上启动gzip压缩,会大大降低网络传输量。

理论上一个业务动作中,访问10次数据库不算什么,如果少量数据的查询,单次数据库的查询处理时间一般在几十毫秒,整体算下来总时间应该在1秒以内。

还有一个思路就是静态化处理,因为博客类的站点内变更不频繁,在内容发布的时候可以生成静态页面,用户访问的时候只显示生成好的静态问题,这样速度回快很多。

用腾讯云1M带宽的服务器,访问首页需要等待5s才能显示完所有信息

1M的带宽其实只有128kb/s,如果需要加载的资源比较多,慢是当然的

首先访问一个Controller然后把所有这些信息全部通过数据库查出来

如果有信心可以试试并行这些查询,更稳妥的方式是ajax,把多个查询分解成(部分)并行的多个请求

有两个方法:
1.二级缓存,在服务器启动的时候,把这些数据都加载到缓存当中,就不用每次向数据库发请求了;
2.在页面使用ajax异步加载,使用异步并发获取服务器数据.
这应该是最简单的两种实现方式了,如果没有的话可以试一下,也可以两种同时使用.

这种我觉得应该用ajax请求比较好,单页面路由

1:最新评论,推荐文章,热门文章,标签等等放到缓存(redis或者ehcache等缓存)中去,没有必要每次都从数据库中获取。
2:文章列表页面也可以做缓存,做好缓存更新策略即可。
3:文章详情页面可以静态化处理,侧栏数据使用ajax获取。
4:css和js等资源使用CDN,免费的CDN一大堆。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题