ci框架加载页面加载速度过慢!

公司的网站使用ci3.0完成的,所有页面加载都挺快的,就是题库一块加载很慢很慢,每次加载页面都很慢,就是打开页面后,页面卡在那,一直在缓冲,因为题库的数据太多,请问我应该用什么方式可以提高加载速度?

阅读 4.1k
4 个回答

1、首先你要检查自己的sql语句是否还有优化的余地
2、其次用异步或者分页或其他方式有效解决一次性加载过多题库的问题
3、查看这块资源文件是否过多,尽可能压缩资源文件,如css,js 等

题主说的“题库的数据太多”没有理解,以下是不同情况对应的一些建议,希望对你有用。

  1. 如果是指页面需要展示很多数据的话,页面的显示需要重新规划,可以按需加载,或许没有必要一次性显示所有的数据。

  2. 如果是指的题库表数据量很大,可以首先使用explain命令对SQL语句进行分析,关注key和rows属性,检查索引的使用情况。在数据行数没有达到几十万时,一般都是可以通过索引优化的手段有效减少查询的时间的。

  3. 如果是对于多个表进行连表查询导致查询速度慢,可以拆分成多次查询,每次查出少部分数据,然后在后台代码中进行整合。

  4. 若索引的优化解决不了问题,可以引入Reids缓存,在项目投入使用之前进行初始化,将题目数据从MySQL中取出然后存储到Redis中,用户直接从Redis中读取数据。如果是所有用户看到的题目一样,则可以直接将从MySQL中取出的题目数组进行序列化然后存储为String类型。如果不同用户抽到的题目不一样,则可以在用户注册时,通过异步消息队列进行抽题过程,将题目从MySQL中抽出并存储到Redis,这样用户在登录时就可以直接从Redis取数据了。

  5. 对于抽题过程比较耗时的在线答题的站点,一般在抽题的过程中,前端都会有一个loading的提示,可以提供更好的体验。

  6. 对于数据表的设计上,没有必要将题目的所有信息存储到一个数据表中,可以使用一个主表存储题目的简单信息(编号,类型,分数等),然后分别用不同的表存储题目内容,正确答案等。这样在主表就会比较小,抽提过程通过主表得到题目的编号,然后根据编号查询其他表得到具体的题目信息。

你可以用ajax异步加载嘛,或者做个分页

把题库的数据都缓存到redis里,做个持久化,然后页面拉去数据直接从redis拉取,速度会快很多。

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