返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何优化Ajax中无刷新分页的性能
  • 423
分享到

如何优化Ajax中无刷新分页的性能

2024-04-02 19:04:59 423人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关如何优化ajax中无刷新分页的性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ajax无刷新分页,已经是一个大家比较熟悉的事物了,大概就是web前端页

这篇文章给大家分享的是有关如何优化ajax中无刷新分页的性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Ajax无刷新分页,已经是一个大家比较熟悉的事物了,大概就是web前端页面上有一个js的方法,通过Ajax去请求服务器端的分页数据接口,拿到数据后再在页面上创建html结构,展现给用户,类似于下面这样:

<script type=”text/javascript”>
function getPage(pageIndex){
ajax({
url:” RemoteInterface.cgi”,
method:”get”,
data:{pageIndex:pageIndex},
callback:callback
});
}
function callback(datalist){
//todo:根据返回的datalist数据创建html结构展现给用户。
}
</script>

其中,RemoteInterface.cgi是一个服务器端的接口。我们这里限于篇幅,涉及的实例代码可能都不是完整的,只为了把意思表达明白。

UI上,可能会有各种款式的分页控件,大家也都比较熟悉,比如:

如何优化Ajax中无刷新分页的性能

如何优化Ajax中无刷新分页的性能

如何优化Ajax中无刷新分页的性能

如何优化Ajax中无刷新分页的性能

但无非都是用户点击控件触发这里的getPage(pageIndex)方法,这个getPage方法可能不是那么简单。

如果按照代码片段1的写法,我们可以想象,用户每次点击翻页的时候,都会请求一次RemoteInterface.cgi,在忽略数据可能有更新的情况下,除了第一次,后面每次getPage(1) 、getPage(2)、getPage(3)等等所触发的远程接口请求以及在网络上往返的数据流量,其实都是重复的、不必要的。每页第一次请求的时候都可以把这些数据以某种形式缓存在页面上,用户如果有兴趣回头来看之前翻过的页,getPage方法应该先检查本地缓存当中是否包含该页数据,如果有,则直接重新展现给用户,而不是去调用远程接口。按照这个想法,我们可以把代码片段1修改一下,如下:

<script type=”text/javascript”>
var pageDatalist={};
function getPage(pageIndex){
if(pageDatalist[pageIndex]){ //如果本地的数据列表中包含当前请求页码的数据
showPage(pageDatalist[pageIndex])//直接展现当前数据
}
else
{
ajax({
url:” RemoteInterface.cgi”,
method:”get”,
data:{pageIndex:pageIndex},
callback:callback
});
}
}
function callback(pageIndex,datalist){
pageDatalist[pageIndex]= datalist; //缓存数据
showPage(datalist);//展现数据
}
function showPage(datalist){
//todo:根据返回的datalist数据创建html结构展现给用户。
}

</script>

这样做一来节约网络请求往返的时间,更重要的是节约宝贵的网络流量和减轻接口服务器的负担。在低网速环境下或者接口服务器运行压力已经比较大的情况下,这种必要的改进更能显现明显的优化效果。大名鼎鼎的yahoo 34条,第一条就是尽量减少Http请求次数。Ajax的异步请求,毫无疑问也是在http请求的范畴内。访问量小的WEB应用或许感觉没有必要,但是想象一下,如果有一个这样的页面:每天访问量1000万次,用户平均翻5页,其中有一页为重复查看。那么这样一个页面,按照代码片段1的写法,平均每天将触发5000万次的数据请求,而按照代码片段2的写法,则平均每天至少可减少1000万次请求。如果每次请求的数据量是20kb,则可以节约1000万*20kb=200,000,000kb 约合190G的网络流量。这样看节约的资源是相当可观的。

如果要继续深究的话,代码片段2当中数据缓存方法还值得讨论一下。我们前面假定可以忽略分页数据的时效性,但实际应用里面时效性却是个不能回避的问题。缓存毫无疑问会导致时效性的降低,真正的缓存方案应该还要依赖对应用时效性要求的分析和取舍。

对于一般不是特别强调时效性的内容,页面上的缓存应该还是可以接受的,一来用户不会一直停留在一个页面上,页面之间有跳转造成重新加载时,可以获得更新后的数据。另外如果用户有刷新页面的习惯的话,当他特别想看列表是否有数据更新的时候,可以选择刷新页面。如果追求完美的话,还可以考虑设定一个时间范围,比如5分钟。如果用户一直停留在当前页面超过5分钟,那么5分钟内他的翻页都是先读取页面上的缓存,5分钟以后的翻页才再次请求服务器的数据。

有些情况,如果我们可以预知数据的更新频率,比如多少天才可能会有一次数据更新,甚至可以考虑使用本地存储,隔一定时间才触发一次对服务器数据的请求,这样对请求数和流量的节约就更加彻底了。当然最终什么样的缓存方法适用,归根结底还取决于产品对时效性的要求,但原则还是能节约的请求和流量,尽量节约,对于访问量超大的页面尤其如此。

对于时效性要求高的一类数据,缓存就完全不适用么?当然不是的,只不过整体的思路还得再变一变。一般所谓变化,可能主要是列表当中的数据有增、减或者改动,但是绝大多数的数据还是保持不变的。大多数情况下,前面讲的设定在一段时间范围内做缓存还是适用的。

如果有接近于要求实时更新数据的需求,大家可能很容易想到使用定时器的方法,比如每20秒执行一次getPage(pageIndex)方法并重绘列表。但大家只要联想到前面1000万次页面访问的假设,就会发现这无疑是一件超级恐怖的事情,按照这种访问量和重试的频率,服务器压力山大呀。关于这种情况怎么处理,我想请大家去看一看Gmail、163邮箱和新浪邮箱等对邮件列表页的处理方式。它们几乎同时满足了我们之前的假设:超级大的日访问量,对数据要求实时更新等。用网络抓包工具分析一下不难发现,它们在用户重复请求同一个页码的数据时,都不会向服务器发出请求。为了保证有消息更新时能够及时通知用户并且更新邮件列表,可以使用一个定时、重复进行的异步请求,但是这个请求只是做一个状态查询,而不是刷新列表。只有获取到有消息更新的状态时才会发起请求去获取更新的数据,或者状态查询的接口在发现有更新时会直接把更新的数据返回。事实上,163邮箱这个定时的状态查询,间隔时间都是设的比较长的,大概两分钟一次,新浪邮箱这个时间间隔更长一些,大概5分钟一次,可以了解它们都在尽力减少请求数量。但是这种处理方式,可能就不是仅前端单方面就能做的,实现方案需要和后台接口整体考虑才行。

现在我们再回过头来看一下代码片段2当中的数据缓存方法。现在不再讨论请求数量和流量的节约,我们来看一下前端的实现上还有没有什么值得深究一下的。按照代码片段2示意的处理方式,原始数据被储存起来,当再次被调用时,showPage(datalist)需要再次根据数据去重建html结构展现给用户,但是之前这个创建结构的过程我们是有做过的,是不是可以考虑在第一次创建结构的时候,直接把这个结构存起来呢?这样可以减少js重复的计算,特别当结构比较复杂时更值得考虑。再想一下,这个结构之前在页面上创建过了,翻页的时候销毁并再次创建新的结构,也是耗费资源的,能不能第一次创建好了之后,翻页的时候不销毁,只是通过控制CSS样式给它隐藏起来,重复翻页的时候也只是在这些创建好的结构之间控制彼此显示或者隐藏?

感谢各位的阅读!关于“如何优化Ajax中无刷新分页的性能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何优化Ajax中无刷新分页的性能

本文链接: https://lsjlt.com/news/81090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何优化Ajax中无刷新分页的性能
    这篇文章给大家分享的是有关如何优化Ajax中无刷新分页的性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ajax无刷新分页,已经是一个大家比较熟悉的事物了,大概就是web前端页...
    99+
    2024-04-02
  • ajax如何实现无刷新分页
    这篇文章主要介绍ajax如何实现无刷新分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:在普通的分页中,一旦页码改变,则url改变,整个页面都会刷新,如果我们希望页码的改变...
    99+
    2024-04-02
  • ajax中怎么实现无刷新分页功能
    本篇文章给大家分享的是有关ajax中怎么实现无刷新分页功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。html页<html> &...
    99+
    2024-04-02
  • 如何实现Ajax无刷新分页效果
    这篇文章给大家分享的是有关如何实现Ajax无刷新分页效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ajax无刷新分页效果,如下代码实现<!doctype ht...
    99+
    2024-04-02
  • web开发中如何实现无刷新的Ajax分页技术
    这篇文章主要介绍web开发中如何实现无刷新的Ajax分页技术,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:<!DOCTYPE html PUBLI...
    99+
    2024-04-02
  • 如何使用AJAX实现无刷新数据分页
    这篇文章将为大家详细讲解有关如何使用AJAX实现无刷新数据分页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、实现过程注意:一下的内容都是在服务器内使用的。首先要在服务器的路径下建立几个文件,比如,pa...
    99+
    2023-06-08
  • Ajax如何无刷新Url提交页面
    这篇文章将为大家详细讲解有关Ajax如何无刷新Url提交页面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Jquery,porotype,Ext等框架流行之后,大量简化...
    99+
    2024-04-02
  • 使用AJAX怎么实现无刷新分页功能
    使用AJAX怎么实现无刷新分页功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  首先讲一下原理:分页有两个要点:1.有多少页,2.每页有多...
    99+
    2024-04-02
  • ajax实现无刷新分页的示例分析
    这篇文章给大家分享的是有关ajax实现无刷新分页的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ajax 无刷新页面的好处:提供良好的客户体验,通过 Ajax 在后台从数据库中取得数据并展示,取缔了等待加...
    99+
    2023-06-08
  • Ajax中怎么利用smarty实现无刷新分页功能
    这篇文章将为大家详细讲解有关Ajax中怎么利用smarty实现无刷新分页功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。类:  (function(){ ...
    99+
    2024-04-02
  • Ajax中怎么实现页面无刷新功能
    Ajax中怎么实现页面无刷新功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ajax (ajax开发)AJAX即“Asynchronous ...
    99+
    2024-04-02
  • 怎么用Flash和Ajax实现无刷新分页功能
    这篇文章主要讲解了“怎么用Flash和Ajax实现无刷新分页功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Flash和Ajax实现无刷新分页功能”...
    99+
    2024-04-02
  • php中怎么利用ajax实现无刷新分页
    本篇文章为大家展示了php中怎么利用ajax实现无刷新分页,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<php Header("Cont...
    99+
    2024-04-02
  • jQuery的ajax中如何使用FormData实现页面无刷新上传功能
    小编给大家分享一下jQuery的ajax中如何使用FormData实现页面无刷新上传功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1,先看效果图期望的功能和效果很简单:点击页面中的上传...
    99+
    2024-04-02
  • ajax如何实现无刷新评论功能
    小编给大家分享一下ajax如何实现无刷新评论功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这是留言板的界面,当用户点击提交留...
    99+
    2024-04-02
  • mysql limit分页性能如何优化
    MySQL的LIMIT子句用于限制查询结果集的数量。在使用LIMIT进行分页时,可以通过一些优化技巧提高性能。 以下是一些优化LIM...
    99+
    2024-04-09
    mysql
  • thinkphp下部分内容的ajax无刷新分页怎么办
    这篇文章主要介绍了thinkphp下部分内容的ajax无刷新分页怎么办的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇thinkphp下部分内容的ajax无刷新分页怎么办文章都会有所收获,下面我们一起来看看吧。t...
    99+
    2023-06-29
  • 怎么用smarty+php+ajax实现简单无刷新分页功能
    这篇文章主要介绍“怎么用smarty+php+ajax实现简单无刷新分页功能”,在日常操作中,相信很多人在怎么用smarty+php+ajax实现简单无刷新分页功能问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2024-04-02
  • Ajax如何实现页面无刷新留言效果
    这篇文章将为大家详细讲解有关Ajax如何实现页面无刷新留言效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用Ajax实现页面无刷新留言效果实现效果前言:在百度贴吧,以及一些论坛中,当你回复或者评论完毕...
    99+
    2023-06-08
  • Ajax如何实现无闪烁定时刷新页面
    这篇文章主要介绍Ajax如何实现无闪烁定时刷新页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Web开发中我们经常需要实现定时刷新某个页面:来保持session的值或者检查session的值是否为空(比如说防止同...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作