在ASP中使用均速分页法提高分页速度

2016-01-29 18:43 17 1 收藏

在ASP中使用均速分页法提高分页速度,在ASP中使用均速分页法提高分页速度

【 tulaoshi.com - ASP 】

 

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

二、特点说明
    很多用过一些文章系统或是新闻系统的朋友知道,一般的文章系统或是新闻系统,在分类分页时,通常是通过读取数据库中满足条件的排序后数据,然后根据请求页号,通过定位操作,指向某条数据,并且开始读取这条数据后面的若干条数据作为一页。这种分页方法,原理简单,但是存在的问题是每次都需要把数据库中满足条件的排序后数据都读取出来,如果有两千条数据,这个还好,如果有两万条呢?显示,这会占用大量的内存,浪费很多服务器资源。当然,如果有条件的,可以用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.knowsky.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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/asp/)

     说明一下:其中84,83等等这些数字,就是在page_1中,你对应的str编号XXX

     说到这里可能大家就比较明白了,均速分页法的原理实际是原来把页面分好,在分页的时候直接用页面进行拼接。这比每次分页的时候从数据库里直接调用数据再进行分页要来得省资源。
     同时,还可以说明一点的是,你完全可以不建立page_1表,而把这些str保存为HTML,然后在分页的时候读取出HTML页面进行拼接。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/asp/)

     3、数据的添加
     在传统的HTML分页中,添加新数据后,要把所有的HTML分页重新生成一次,在均速分页法中,就无需这样。我们前面已经设定了每个小页面只显示20条记录,那么article_1表中,也只保存最多19条记录。我们新添加一条记录,那么同时把这条记录加入到article_1中,如果article_1中的数据已经超19,

来源:https://www.tulaoshi.com/n/20160129/1507003.html

延伸阅读
标签: ASP
  foxty [原作]     近日一直在研究如何才能写出高小的分页算法,大概整理了一下,思路如下:       首先数据库里需要有一个自动编号字段(ID)。然后第一次访问的时候,取出所有记录,定制好每页的记录数PageSize,计算出页数,然后根据页数建立一个一维数组PageId(PageCount),PageId(0)保存记录...
标签: ASP
  julyclyde(原作) 作者系2月份 微软社区之星Microsoft China Community Star     在编程中,经常需要使用事务。所谓事务,就是一系列必须都成功的操作,只要有一步操作失败,所有其他的步骤也必须撤销。比如用ASP开发一个网络硬盘系统,其用户注册部分要做的事有: 将用户信息记入数据库 为用户开个文件夹用于存...
标签: ASP
      ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起步的,同时,在你的机器上也许已经都装有Access了,所以,在下面的例子中,我们都将使用Access来做例子。一旦你学习了ASP和Access数据库连接的核心技术方法,当你开始使用SQL server...
标签: ASP
  方式一:把Java类注册成ActiveX组件 步骤一: 创建一个Java类,命名为Test.java public class Test {       public String getWord()       {           return "Hello World";       } } 步骤二: 编译成c...
标签: ASP
  在  网上 讨论 如何 实现 分页  有很多程序,我在这里向大家  介绍一种实现分页的新的方法,使用 存储过程 来实现分页    由于 这段程序写的 比较早,那个时候 还没有 SQL 7,每一个 Varchar 只能 支持 255 个字符,所以 采取了一种比较笨的办法,如果大家有兴趣,请去  http:/...

经验教程

962

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部