web 页面显示大量数据

xiaoxiao2026-09-16  15

TechWeb-技术社区's Archiver TechWeb-技术社区 » 程序开发 » .NET » 如何提升大数据量页面的加载速度? 发表于 2008-4-3 12:09 我觉得客户无非就是要有一个良好的体验,既然有这样的要求,用Ajax就是较好的选择,这样就不会让界面堵死在那里,至于javascript的执行效率问题,相对于对数据库的查询时间来说,可以忽略。 发表于 2008-4-3 12:09 1.最好是写存储过程和索引 dY8O+|:P3`9? 2.全部一次性装载,放入缓存,只显示前n条,有事件触发,再载入下n条 M1gm1^4Wj 3.等待提示,友好性 发表于 2008-4-3 12:09 对于table有 j9M`w8bN3Z5VJ thead,tbody,tfoot这些个标签。table是数据加载完后整体显示的,用上tbody后就不一样了,它将会从上到下,一个一个tbody块来显示的,tbody可以有多个,其他两个最多只能有一个。 发表于 2008-4-3 12:09 10K行的话,如果页面又比较复杂,基本上ie会挂掉,别想追求性能了。 T8M)Q2l;~ ]-X 难道他以为ie可以当作SQL server用? 发表于 2008-4-3 12:10 1w行,估计是难为人吧! 发表于 2008-4-3 12:10 客户很洋很强大:(((( 发表于 2008-4-3 12:10 很难想象10k行 不分页如何去看... A~!~-_`-C RJQ !B;Sk.D}/nhw P 其实你给客户呈现1万行,他也未必能都用上吧。 :h;N"DY1P*m8M ftB-E&CQ4y 还是想办法按需呈现才好 发表于 2008-4-3 12:10 PS:没想到在这里能碰上jspadmin,很意外。 发表于 2008-4-3 12:10 一万行数据,就算用最简单的DIV+CSS,生成的HTML代码也要3M~5M吧,也就是说相当于下载一首MP3了,如果不用异步读取数据,只能一次性从服务器将这首Mp3下载下来,也就是说,只能靠服务器性能和网络传输速度了,很难很无奈 !i;] @H8t'z2zYgG| 1x)ucKw:UJA? 所以Ajax的确是个很不错的选择 9b8Z+AQm8x 2p7Ki9{8_0MJ 方案一:写一个分页存储过程,载入页面后,算好行数及页数,将10000行数据同时进行10~20个页数的异步读取,也就相当于多线程下载. wGIzplM o ,~`Y)z3J$ao%o 方案二:如楼主所说,利用滚动条动作window.onscroll,计算应该显示的行数,动态调用Ajax去取得当前页面应该显示的数据 4Qt"w)Z3[/~:n T&bPQX1Vo$gw 楼主可以比较一下两种方案的效率及实现难度再进行决择! 发表于 2008-4-3 12:10 估计客户的网络速度挺快的! 发表于 2008-4-3 12:10 无用功能,改一下:用户点击报表后,直接提示:“系统正在导出excel文件,需要花费一定时间” 给他倒个excel就可以了。剩下的交给客户对10k条数据 进行分析。否则谁有空 拖滚动条浏览10k条记录? 发表于 2008-4-3 12:10 BT的需求总会有的,就象有些需求是无聊的一样.但却给技术实现提出挑战. {3ZVq(@ wm 我最近也在琢磨一个大表的显示,但还没有BT到10K行.以下是我的实现思路,不知能否对楼主起点作用? A&?T3`Kf)pv(y lMRo�k6NIC Javascript+DHTML: 0n$o�Z&qHFBN &LRe'V#OIi F]nE 1,将表格中内容生成为Array数据; {4]p,T&n0n%N o(RL` 2,建立表格对象,将Array数据分布在表格中; rf.H.iC_)h 3,尽量用table的属性来风格化表格,不要用CSS; W?!Na*uK:~ 4,也许用户还有更BT的打印需求,用其它方式可能不能满足; +_?Kdk{ 0^8T1u3xM1bO!t /a;[-rn#U.K4b9j&B 告诉用户,10K行数据,不是1K行数据,总要花些时间的.将电脑的所有优势都挖掘出来还不能解决问题的话,只有从改善硬件上来想办法了. .x#P!L_ ~:j+g$g Yw%D(VZ�I-L 一头牛拉再轻的车也不会象飞一样, 除非你会吹! ^-^ 发表于 2008-4-3 12:10 此法可行 比如当前有8000条记录 约占有8000行 只在滚动条当前所在的屏幕区显示指定的一定数据量(如100条) 其它只是900行回车符" " 如果拖动鼠标后没有超过此100条的区域就正常显示 否则再重新通过ajax调用输出 取数据用分页存储过程其实是分页存储过程的变相实现 (即共有记录8000条 每页100条记录 共80页 由滚动条位置判断当前页) 当然这个"当前页"的判断要麻烦点表头和表尾部分处理费事些 但花些时间能够实现 发表于 2008-4-3 12:10 我记得好像在起点碰到过这个功能。 yAa!Z\ z 在阅读当前小说得时候有个 阅读全部的按钮。 K:];t0~N 应该是一样的功能 发表于 2008-4-3 12:10 这种用法是最快的: z y_0?/C Z7e�V5GB YX 1. #y7H%e yX3k 在工程中添加一个这个文件BaoBiaoHandler.ashx; Ft*S1_8a'V 然后把按钮的链接指向这个文件;在这个文件中你就可以随便的写了;这个文件之所以快的原因是因为它本身就是一个http处理程序,并且它不要状态保存等一些操作,是一个直接执行的文件,类似于java中的serlvet文件。 cD N*sc *x�\H0H~k3fy 它的写法和普通的cs文件没什么区别;一样的。 .N(bwmQ'y0i &qU}5cl 你要生成报表 %aHT^io3Orb context.Response.ContentType = "image/jpeg";这个属性是必须; [H2XW{Hv D FileStream fs = File.Open(context.Request.PhysicalApplicationPath + "d6dd57088b97b79e0b7b821e.gif", FileMode.Open); #c%rB;u:m.Z R9ESela;e6{5B byte[] fsBuffer = new byte[fs.Length]; H[:CH`t:F#or7\ int i = fs.Read(fsBuffer, 0, fsBuffer.Length); lxX-~[gA7~Gqkk fs.Close(); ,AH#Eo-]veSz K8zg1mq$r context.Response.WriteFile(context.Request.PhysicalApplicationPath + "d6dd57088b97b79e0b7b821e.gif"); //.BinaryWrite(fsBuffer); //.OutputStream.Write(fsBuffer, 0, count); +H1U!~4SP O9V%X(~ context.Response.Flush(); p~&N/Q2ZBD 这个是生成一个图片;你可以修改成你的需要。 HC/~.D#Sa%fB w ^,qOY(`7N 2. }]6G8k%y:P~ 你也可以这样,写一个cs文件继承自IHttpHandler接口,实现一个自己的Http处理程序, MN6K3f9Tw�sieoxu public class Httphandler : IHttpHandler k~2{;[9O-y { }5j/HJN&r public Httphandler() B9a/O:}p3|oEJ4TO4? { &?6CD-T;KOY;f;s 1u|G'|~1Q!? } (N[*hM5BEAS%G%m -M1z\{8dh #region IHttpHandler 成员 Sx PJ;[u(|$KE Uetv1o bool IHttpHandler.IsReusable ;k)Vh[RK9Z R { e&fH9H*dg:PX get { return true; } a�LrpB| } 9VIhD�J ~ 0DO5J(v~K!XU void IHttpHandler.ProcessRequest(HttpContext context) b'@ty"X-ra9Yd|;w { V)T&~Z\#s(XD3Z,H,xm G5M%rSS~@ 5BiGXG5W System.Data.SqlClient.SqlDataAdapter adp = new System.Data.SqlClient.SqlDataAdapter(SqlString,Conn); 1a0G7zwL`L DataSet ds = new DataSet(); ? I-X[W(m0G adp.Fill(ds); b g;w%Z!D`jU DataGrid dg = new DataGrid(); 9s }fW9O5z8P dg.DataSource = ds.Tables[0]; 0g\)P4e E1z.Ol dg.DataBind(); y p"{.}NH W StringWriter sw=new StringWriter (); 't�H&rfS R-p HtmlTextWriter htw=new HtmlTextWriter (sw); 2Bf8S5} zd dg .RenderControl (htw); a;@}L(`wl)w string html = sw.ToString(); f9KH&f? context.Response.Write(html); (n0Hj s7Fbh } f%N2AN&~a)n_ N7p Q�jKf5l9[8i #endregion @B~F.t U } 9y a@$spe } wmD^#wg(e 也可以,然后你要在web.config文件中注册以下这个 M b1k.ig1~ 6_[z ]a:M //这个cs文件放在App_Code中 7K H!M g)RoNj y+PZ)`GR,~iH{2a 然后再IIS中添加一个isapi映射,对这个sqlx的请求都会使用这个类来返回了,非常快; _T*_kj#Ys$d 扩展名可以随便定义的 发表于 2008-4-3 12:11 不考虑前后台种种优化,不用分页,如何实现 一点击报表加载按钮,报表逐(n)行显示出来?有没有好的解决方案? FjsTL] ^E0ua ?x 2v3BQ&_-uaY*yu 你都把"好的解决方案"统统否决了. xuO c/v .pc:ya!o1o9O8e�b 那就只能硬来了,你升级服务器,升级网络,升级客户机吧. 发表于 2008-4-3 12:11 这种数据量只能考虑数据库分页了 Zk(mSF9r\xt:k E 给你个提示,传入数据库页码和页面条数,数据库只返回相应条数的数据 koiJf 即传说中的后台分页,这样别管你数据nnnnk条,都很快。 Le+Xo&ACV 相应的控件网上有很多,开源的也有,可以自己看看。 发表于 2008-4-3 12:11 相关资源:javaweb_分页显示数据库内容
转载请注明原文地址: https://www.6miu.com/read-5052764.html

最新回复(0)