日期:2014-05-17  浏览次数:20418 次

请问如何实现类似相册图片浏览的功能


我想做一个这样的功能,根据关键字或标题搜索出一些图片,如图1所示。点击其中一张图片,进入到如图2所示的页面,点击“上一张”,会显示搜索出来的图片列表中相对位置的上一张图片,同理点击“下一张”,会显示下一张。其他的都好说,现在问题是如何获取“上一张”和“下一张”图片的地址。也就是说如何判断当前图片的相邻图片是什么。如果是在数据库中连续排列的图片还好说,直接查询数据库就好了,可如果是通过关键字搜索出来的不连续的一系列数据,该如何解决呢?

我的想法是在页面建立一个hidden控件,把查询出来的图片id存放在里面。然后通过post提交。可是如果查出来的数据很多,假如说有2W条,每条数据的id是4位或者更多,那每次就需要额外传递80K的数据,是不是不好啊?而且post不知道数据大小限制是多少。


  图1




  图2




------解决方案--------------------
探讨
我的想法是在页面建立一个hidden控件,把查询出来的图片id存放在里面。然后通过post提交。可是如果查出来的数据很多,假如说有2W条,每条数据的id是4位或者更多,那每次就需要额外传递80K的数据,是不是不好啊?而且post不知道数据大小限制是多少。

------解决方案--------------------
可能你是考虑到个性化查询。这是对的!

但是个性化查询,对于后台来说就是查询条件的个性化,或者(如果你使用关系数据库的话)是sql查询语句的个性化。所以将sql查询语句作为索引key(或者通常是将sql语句的md5值作为索引key),将查询结果保存在cache对象实例中,设置cache对象的过期时间,甚至设置cache对象的Dependency为一个SqlCacheDependency(用于监视数据库表的修改动作)。这样,假设一段时间内有10万次查询,其中有99900次其查询条件都是一样的,那么这10万次前端访问中实际仅仅访问数据库100次,因此对于你担心的“数据排序经常变动问题、前后端通讯效率问题”等都是极大地缓解。

当数据库中的数据有所变化时,用户操作“前一个图片、后一个图片”的结果是有可能瞬间变化的。因此你查询时一定要给出查询结果排序条件。但是假设数据库中瞬间删除了记录,或者硬要在中间插入记录(而不符合你的查询排序结果所预想的排队次序),那也是“by design”的事情,不算是什么大事情。关键是用户的评价。只要是通过用户测试,就算一个程序员他自己觉得不完美,也不应该随便拿着老板的钱和时间去纠缠在这些细枝末节上面。
------解决方案--------------------
当下面的“上一张、下一张”功能执行时,除了返回新的图片url,还要能够返回一个标志(或者触发事件)来通知是否要刷新上面的列表。这样的业务逻辑设计就比较完善,同时你在选择数据处理机制时也就不用纠结了。