仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 450|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网页设计在Asp中怎样疾速优化分页的技能

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
asp,你就只能等着微软给你解决,它不乐意你就只好悲催。而且asp跑在windows服务器上,windows服务器跟linux比起来简直弱爆了!foxty[原作]
克日一向在研讨怎样才干写出高小的分页算法,也许收拾了一下,思绪以下:

起首数据库里必要有一个主动编号字段(ID)。然后第一次会见的时分,掏出一切纪录,定制好每页的纪录数PageSize,盘算出页数,然后依据页数创建一个一维数组PageId(PageCount),PageId(0)保留纪录初试前提,然后对应每一个元素保留每页对应的ID界限码

1,ID界限码:假如数据库纪录ID纪录序列以下1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
假定必要依照ID按次排序的话,PageSize=5,Pagecount=4,PageId(4)
数组PageId的值分离为PageId(0)=1,PageId(1)=5,PageId(2)=10,PageId(3)=15,PageId(4)=16
当会见第i页的时分就间接找[PageId(i-1),PageId(i))之间的纪录,如许能够包管每次取的纪录都只是PageSize笔记录。
假定必要依照ID倒序分列的话,
数组PageId的值分离为PageId(0)=16,PageId(1)=12,PageId(2)=7,PageId(3)=2,PageId(4)=1,当会见第i页的时分就间接查找ID属于[PageId(i-1),PageId(i))

将数组PageId()保留在Application()中,以便会见,如许,只是第一次会见分页程序的时分便初始化Application()。代码部分以下:(上面称为新程序)
<%
Time1=Timer()
DimConn
SetConn=Server.CreateObject("Adodb.Connection")
Conn.open"Driver={MicroSoftAccessDriver(*.mdb)};Dbq="&Server.MapPath("db.mdb")
www.ckuyun.com
DimPage,PageCounts,PageId,PageList
DimRs,Sql
DimIsInit,i

IsInit=False标记为,用来判别Application("PageId")是不是初始化
PageList=20设置每页显现20条数据
SetRs=Server.CreateObject("Adodb.Recordset")
Page=Request.QueryString("Page")注重页码必要反省范例

IfIsEmpty(Application("PageId"))Then假如Application("PageId")还未初始化,则先辈行初始化
Response.Write("Initapp!<br>")
Sql="Select*FromtestOrderByIdDesc"假定这里是依照ID倒序分列
Rs.openSql,Conn,1,1失掉纪录集工具

IfNot(Rs.EoforRs.Bof)Then
Rs.PageSize=PageList设置每页纪录数
PageCounts=Rs.PageCount
ReDimPageId(PageCounts)从头界说数组PageId
Fori=0ToPageCounts入手下手给数组PageId()赋值
IfRs.eofThenExitFor
PageId(i)=Rs("ID")
Rs.Move(PageList)
Next
Rs.MoveLast
PageId(PageCounts)=Rs("ID")
Application.Lock()
Application("PageId")=PageId
Application.UnLock()
EndIf
Rs.Close
EndIf
IdStart=Clng(Application("PageId")(Page-1))
IdEnd=Clng(Application("PageId")(Page))
Sql="Select*fromtestwhereid<="&IdStart&"andid>"&IdEnd&""
Rs.openSql,Conn,1,1
WhileNotRs.eof
Response.Write(rs(0)&"--"&rs(1))
Rs.MoveNext
Wend
Rs.Close
SetRs=Nothing
Conn.Close
SetConn=Nothing


Fori=1ToUbound(Application("PageId"))
Response.Write("<ahref=Test1.asp?Page="&i&">"&i&"</a> ")
Next
Time2=Timer()

Response.Write("<br>"&(Time2-Time1)*1000)
Application.Contents.Remove("PageId")
%>
传统分页代码以下:(上面称为旧程序)
<%
Time1=Timer()
DimConn
SetConn=Server.CreateObject("Adodb.Connection")
Conn.open"Driver={MicroSoftAccessDriver(*.mdb)};Dbq="&Server.MapPath("db.mdb")

DimPage,PageCounts,PageList
DimRs,Sql

PageList=20
Page=Request.QueryString("Page")
SetRs=Server.CreateObject("Adodb.Recordset")
Sql="Select*fromtestorderbyiddesc"
Rs.OpenSql,Conn,1,1

IfPage=""ThenPage=1
IfNot(Rs.eofOrRs.Bof)Then
Rs.PageSize=PageList
PageCounts=Rs.PageCount
Rs.AbsolutePage=Page
EndIf

Fori=1toPageList
IfRs.eofThenExitFor
Response.Write(Rs(0)&"-----"&Rs(1)&"<br>")
Rs.MoveNext
next

Fori=1ToPageCounts
Response.Write("<ahref=Test.asp?Page="&i&">"&i&"</a> ")
Next
Time2=Timer()

Response.Write("<br>"&(Time2-Time1)*1000)
%>

实在,整体的头脑就是,创建一个Application("PageId")全局数组,每一个元素都保留页面所区纪录的ID区间,好比,Application("PageId")(0)保留第一个元素的ID,然后Application("PageId")(1)保留下一页的第一个ID…………顺次类推,当必要会见第i页的时分,就间接查找ID在[Application("PageId")(i-1),Application("i"))内里的纪录集,如许,每次只用查找必要的纪录数,而不必要每次都把一切纪录都查找一遍,可是,这个办法是在第一次会见的时分,即必要创立数组Application("PageId")的时分对照慢一点,当第N次会见的时分(N>1)速率就快快要10倍,我接纳下面2个程序测试:
1,数据库纪录有32000笔记录,旧程序会见一页必要500毫秒摆布,新程序只是第一次会见的时分到达这个工夫,然后每次都只必要55毫秒摆布。
2,将数据增添到64000笔记录,旧程序会见一页必要1000毫秒摆布,新程序也是第一次会见的时分到达这个仿佛件,前面每次仍旧仍是坚持在55毫秒摆布。
3,将数据增添到128000笔记录,旧程序会见一页必要1900毫秒摆布,新程序第一次会见必要2300毫秒摆布,然后每次会见只必要70毫秒摆布。
这里必要注重的是数据库每修改一次,Application("PageId")就必要从头赋值!
研讨心得:(起首感谢叶子(DVBBS)的心得)只管不要用自带的分页程序,Rs.RecordCount很耗资本。顺次,估量Rs.PageCount……也耗资本,并且用Rs.GetRows()效果也很分明进步。

经由对照,叶子的算法在纪录对照靠前的时分速率和效力是对照高的。可是不太不乱,偶然(很少)会从30毫秒摆布跳到1-200毫秒。到了前面效力就分明下落到50-80毫秒,越后效力越低。新算法第一次效力对照低下,约莫在500毫秒摆布,可是对照不乱,前面一样平常哦度是50毫秒摆布,并且跟着库的纪录数变更,这个速率仍然云云。不会有甚么变更。下次就把叶子和我的算法分离起来尝尝,不外叶子的算法的确是很不错D,具有通用性。我这个只能拿来聊聊了。
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-19 17:52:04 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-25 18:39:08 | 只看该作者
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
再见西城 该用户已被删除
地板
发表于 2015-2-3 13:09:58 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
小妖女 该用户已被删除
5#
发表于 2015-2-9 02:00:05 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
再现理想 该用户已被删除
6#
发表于 2015-2-26 18:24:05 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
深爱那片海 该用户已被删除
7#
发表于 2015-3-8 16:30:34 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
不帅 该用户已被删除
8#
 楼主| 发表于 2015-3-16 05:37:33 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
海妖 该用户已被删除
9#
发表于 2015-3-22 20:13:42 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表