征集网锐志网络淘途找素材上91
创意在线首页
平面设计交互设计CG动漫工业设计建筑环境数码影像创意搜
 首页大赛征集资讯教程画廊访谈作品集创企同盟设计招聘人才专区竞赛台专题论吧 找素材看酷站设计网址库
教程网 Illustrator、Photoshop、CoreaDreaw、AI教程、PS教程
当前位置:首页 > 教程 > 程序相关 > 正文
在ASP中使用均速分页法提高分页速度
作者: 来源:52design.com 发表时间:2007-8-30 17:11:16 浏览:
    一、适用范围

  均速分页法主要适用于文章系统,新闻系统等排序方法固定的ASP+ACCESS应用 

·设计师个人作品集火热申请中!
·查询网站排名推荐您用Chianz排名查询
·“论吧”正式上线 欢迎参与主题讨论
·全球经典酷站推荐欣赏
·矢量素材 给设计师提供强大后盾
·加入设计师论坛,精彩无限
·设计网址大全,免费收录所有设计站点

  
  二、特点说明

  很多用过一些文章系统或是新闻系统的朋友知道,一般的文章系统或是新闻系统,在分类分页时,通常是通过读取数据库中满足条件的排序后数据,然后根据请求页号,通过定位操作,指向某条数据,并且开始读取这条数据后面的若干条数据作为一页。这种分页方法,原理简单,但是存在的问题是每次都需要把数据库中满足条件的排序后数据都读取出来,如果有两千条数据,这个还好,如果有两万条呢?显示,这会占用大量的内存,浪费很多服务器资源。当然,如果有条件的,可以用SQL数据库,这样就好办多了,用一点存储过程就全部解决了。不过可能很多朋友还是在用ACCESS数据库,这样就没有办法了。当然,还有一些程序是把分页生成HTML,就像不少下载站点一样,大家有没有想过,这样会出现什么问题?如果我在后台一次添加一条记录,那么我得把这个分类中所有的分页都重新生成一次HTML,这是肯定的,想想吧,这样效率是不是很差。

   均速分页法就是为了解决在ACCESS数据库中,大量数据的分页而想出来的。它兼有HTML分页和传统ADO分页的优点。一是速度快,占用资源少,不管你是第一页还是第一百页,程序速度都是相同的。而且在数据添加时,不必把所有分页都重新生成。下面我把原理介绍一下
  
  三、分页原理

   数据库中有一个article表,一个class表,我们不考虑是不是无限级分类还是两级分类,这个与我们无关。
   [article] id int IDENTITY (1, 1) NOT NULL, classid int default 0, title varchar(100), addtime datetime
   [class] id int IDENTITY (1, 1) NOT NULL, classname varchar(20)
  
   1、生成分页

   如果class表中有一行数据是id为1,classname为“ASP分类”,我们先把所有article中所有classid=1的数据都取出来,(www.china-u.com)然后按addtime升序排列,这个与普通的ADO分面是一样的,但是,下面我们要进行一些处理。

   我们动态的在数据库里生成一个表,名字叫[page_1],1就是对应的classname为“ASP分类”的ID自动编号。

   [page_1] pagenum int, pagestr text
  
   我们先每20条数据生成一个str,每个str实际就是显示时这20条数据库的列表,然后为这个str编个号XXX,如果是0-19条记录,那么XXX就是001,如果是20-39,XXX就是002,以此类推。把str和它的编号加入page_1中。我们这里假设最大的是84
  
   大家肯定会想到,数据不可能总是整除19(20个数据应该是mod 19)呀,当然,我们要处理一下零头,这些零头应该是最新的数据(我们是按addtime)排列的。我们再动态的建立一个表,[aritcle_1]
   [article_1] id int IDENTITY (1, 1) NOT NULL, artid int, classid int default 0, title varchar(100), addtime datetime
   把多出来的零头数据加入这个表中。
   
   2、数据的显示

   定义pagecount是[page_1]的记录数
  
   我们分两种情况来
   (1)如果article_1没有记录(没有零头数据)
   第一页是84,83
   第二页是82,81
   第三页是80,79
   ……
   第N页是 : pagecount-(2*N-2), pagecount-(2*N-2)-1
  
   (2)如果article_1有记录(有零头数据)

   第一页,调用article_1的数据,84
   第二页,83,82
   ……
   第N页是 : pagecount-(2*N-3), pagecount-(2*N-3)-1
  
   说明一下:其中84,83等等这些数字,就是在page_1中,你对应的str编号XXX
  
   说到这里可能大家就比较明白了,均速分页法的原理实际是原来把页面分好,在分页的时候直接用页面进行拼接。这比每次分页的时候从数据库里直接调用数据再进行分页要来得省资源。
   同时,还可以说明一点的是,你完全可以不建立page_1表,而把这些str保存为HTML,然后在分页的时候读取出HTML页面进行拼接。
  
   3、数据的添加

   在传统的HTML分页中,添加新数据后,要把所有的HTML分页重新生成一次,在均速分页法中,就无需这样。我们前面已经设定了每个小页面只显示20条记录,那么article_1表中,也只保存最多19条记录。我们新添加一条记录,那么同时把这条记录加入到article_1中,如果article_1中的数据已经超19,那么就把这里面的数据生成一个str,加上编号后保存在[page_1]里,当然,如果你是用生成HTML的,你可以直接生成一个HTML。如果article_1中的数据已经没有超19,那么就不用管它了。
  
  四、均速分页法和传统分页的比较

   我用了两千条数据的一个数据库进行测试,在XP系统下,P3 1G,256M内存的硬件条件下,用均速分页法平均速度在50MS,正负不超过10MS,用普通ADO分页,速度在85MS,正负在20-35MS之间,可见用均速分页法,在速度和稳定性上都是不错的。
  
   当然,对于数据库小的情况下,这样的优势可能并不明显,或者可能用ADO分页来的更快,但是如果在两万条数据的分页中,均速分页法的平均速度是普通ADO分页法的一半。
  
   当然,均速分页法也有自己的不足,比如程序复杂度比传统分页来的高,在数据库少的时候性能不如ADO。 
   
  
  五、最后一点说明:

   本文主要介绍的是均速分页法的一个原理,我花了一个晚上用程序进行了实践,是可行的。但我主要是把str生成HTML后读取,与本文介绍的数据库保存str有点不同,不过原理是一样的。
  
   如果您有条件使用SQL数据库,那么我建议您还是使用存储过程来实现分页的提速。


在线编辑:morion
本文链接:


推荐阅读:
·2021第十五届“创意中国”设计大奖 征稿章程
·2021第七届“学院派奖”全国艺术与设计大赛征集公告
·青春唯美插画培训网络远程班正在招生
·第八届中国高等院校设计作品大赛启动
·第十二届中国高校美术作品学年展获奖名单公布
·2021第七届“学院派奖”全国艺术与设计大赛征集公告
·第六届“包豪斯奖”国际设计大赛获奖名单揭晓
免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息。对本文有异议,请联络本站!
转载要求:文章作者及来源信息必需保留。转载之图片、文件请不要盗链本站地址,且不准打上各自站点的水印!

近期推荐报道 返回首页更多精彩等着你!

Photoshop| Photoshop快速调出情侣图片柔美的插画艺术| 绝望的小熊—美国插画师Luke
网页设计| 波兰Tiquet网站设计作品欣赏插画艺术| Nanami Cowdroy灵动黑白插画
Photoshop| Photoshop调出美女图片绚丽的橙红HTML/CSS| 实现DIV透明而里面的文字不透明
平面设计| 世界杯之平面广告欣赏插画艺术| Alberto Cerrite&ntil
平面设计| Havaianas人字拖最新平面广告系列网页设计| 英国madefavourite简洁细腻型
关于本站 | 联系方式 | 商业服务 | 合作伙伴 | 站点地图 | 免责声明 | 版权声明 | 在线投稿