bone 的个人资料bone, My CC98.org照片日志列表 工具 帮助

日志


2006/4/28

定制排序

    这个学期开始以来今天算是第一次写代码到半夜了。快五一假期了,学习心思也没了,写代码灵感也有了一些,趁今天没别的事情做就把定制排序功能写好吧。
    定制版面如果在服务器端排序无遗会大量占用服务器资源,原先的显示定制版面的方案是这样的
    先从user表里面select出customboard那个字段,这个字段的格式类似于'16,21,1,109,15'也就是用逗号将定制版面的id隔开,然后在数据库查询 'select * from board where boardid in' & customboard
    然后再用rs一条一条的显示,显然,这样select出来的版面顺序是按照boardid的顺序排列的。
    以前有想过先吧customboard这个字符串分隔成数组,每个元素保存一个定制版面的id,再每个元素进行一个数据库查询,这样,显示出来的顺序就是按照customboard这个字符串里面id出现的顺序排序了。很显然,这样做对于服务器资源的开销是巨大的,有多少个定制版面就会有多少个查询。
    后来想到了改进方案。就是原先的方案,查询得到每个版面的数据,并不直接输出,而是存到数组里面,再把这个数组按照customboard的顺序排序,再输出就好了,资源开销比原来稍大,不过也应该在可以接受范围内吧。
    且慢,既然已经这样想了,那么为什么不能在客户端进行排序呢,占用客户端的资源。我们说,要假设客户端的运算能力无限,把不重要不机密的数据放到客户端运算。
    于是,就把每个版面的数据,在服务器端输出到构建好的javascript脚本中,因为javascript的数组还可以用字符串来作为索引,所以更方便了,排序都不需要,直接拿customboard里面分离得到的boardid把数组元素调用出来显示就好了。
    虽然说说简单,不过写asp和javascript杂糅在一起的程序却是很头痛的,很考验耐性和思路的清晰性,一不小心就会搞错到底这是在服务器端的输出还是在客户端的输出。调试了无数次终于正常了,不过代码上难看是难看了点。
    剩下一个小问题就是更改定制排序的功能,纯asp的,不用像上面那样思维在服务器和客户端直接切换来切换去了,倒也简单,十分钟就搞定了。
 
    javascript依然不是很熟,写的时候语法错误不断,有一段时间完全被语法卡牢了,不是忘记每行语句后面的分号就是括号用错,sigh……
 
    现在就剩下修改界面了,在定制版面附件加上提升和下沉的按钮。等明天找几个pp点的图标当按钮放上去。