Jquery主要是做什么的?
jQuery-是轻量级的js库 , (IE 60+, FF 15+, Safari 20+, Opera 90+), jQuery20及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用的标记语言 下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件 可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需要定义id即可
jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。
jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。
jQuery,顾名思议,也就是JavaScript和查询(Query),即是辅助JavaScript开发的库。
jquery中cache:true和false的区别是:true的话会读缓存而且真的到服务器上;alse的话会在url后面加一个时间缀,而是让它跑到服务器获取结果。
cache
cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。
当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。
使用缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多次重复。
尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持 还是有必要了解一下如何高效地使用协议
首先要做的事情是在服务器端支持HTTP GET 定义不同的URL输出不同的数据(MVC里对应的就是action) 如果要使用同一个地址获取不同的数据 那就不对了 一个HTTP POST也不行因为POST不能被缓存 许多开发人员使用POST主要有 个原因 明确了数据不能被缓存 或者是避免JSON攻击(JSON返回数组的时候可以被入侵)
缓存解释
jQuery全局对象里的ajax方法提供了一些options来支持缓存和Conditional GETs功能
$ ajax({
ifModified: [true|false]
cache: [true|false]
})
ifModified选项定义的是在ajax调用的时候是否支持Conditional GETs功能 jQuery会自动帮我们处理服务器端返回的名为Last Modified的header值 然后在随后的请求里的header里发送If Modified Since 这需要我们的MVC Controller要实现Conditional GETs功能才能用 Conditional GETs功能在缓存上下文中用于重新验证缓存中过期的条目 如果jQuery认为一个条目已经过期了 它首先会请求服务器使用Conditional GETs功能重新验证该条目 如果服务器返回状态码 (Not modified) jQuery会重新使用缓存里的该项目 这样的话 我们可以节约很多流量去下载页面内容
cache选项基本上是覆盖服务器端返回的 header里的所有关于缓存的设置 如果设置cache选项为false的话 jQuery会在请求的URL后面附件一个时间戳 以便区分之前的URL地址 这样没错请求的内容都是最新的 也就是说浏览器每次接收的都是新地址 自然返回的都是最新数据
让我们来看几个场景
服务器端响应里设置No Cache
服务器端为王 如果服务器端明确定义了response响应不能被缓存的话 jQuery也无能为力 ajax里的cache选项将被忽略
JS代码
$( #nocache ) click(function () {
$ ajax({
url: /Home/NoCache
ifModified: false
cache: true
success: function (data status xhr) {
$( #content ) (unt)
}
})
})
C#代码
public ActionResult NoCache()
{
// 禁用缓存
Response Cache SetCacheability(HttpCacheability NoCache)
return Json(new { count = Count++ } JsonRequestBehavior AllowGet)
}
服务器端响应里设置过期时间
服务器端设置过期时间用于缓存数据 该条目在客户端将依据过期时间被缓存
JS代码
$( #expires ) click(function () {
$ ajax({
url: /Home/Expires
ifModified: false
cache: true
success: function (data status xhr) {
$( #content ) (unt)
}
})
})
C#代码
public ActionResult Expires()
{
Response Cache SetExpires(DateTime Now AddSeconds( ))
return Json(new { count = Count++ } JsonRequestBehavior AllowGet)
}
客户端从来不缓存数据
客户端决定每次都要最新的数据(不能使用缓存) 也就是说ajax里的cache选项设置为false 不管服务器端如何定义 jQuery每次请求的URL地址都是唯一不同的 目的是每次都获取最新的内容
JS代码
$( #expires_nocache ) click(function () {
$ ajax({
url: /Home/Expires
ifModified: false
cache: false // 这里是关键
success: function (data status xhr) {
$( #content ) (unt)
}
})
})
C#代码
public ActionResult Expires()
{
// 不管服务器端怎么设置都没用
Response Cache SetExpires(DateTime Now AddSeconds( ))
return Json(new { count = Count++ } JsonRequestBehavior AllowGet)
}
服务器端和客户端使用Conditional Gets功能验证缓存数据
客户端将条目放在缓存里 在过期之后重新验证 服务器端必须实现Conditional GET功能(使用ETags或者last modified的header)
JS代码
$( #expires_conditional ) click(function () {
$ ajax({
url: /Home/ExpiresWithConditional
ifModified: true // 这里是关键
cache: true
success: function (data status xhr) {
$( #content ) (unt)
}
})
})
C#代码
public ActionResult ExpiresWithConditional()
{
if (Request Headers[ If Modified Since ] != null && Count % == )
{
return new HttpStatusCodeResult((int)HttpStatusCode NotModified)
}
Response Cache SetExpires(DateTime Now AddSeconds( ))
Response Cache SetLastModified(DateTime Now)
return Json(new { count = Count++ } JsonRequestBehavior AllowGet)
}
上述MVC action中的代码只是一个例子(非真实代码) 在真实的实现中 服务器端应该能否知道数据自从上次响应以后是否被修改过
总结
lishixinzhi/Article/program/net/201311/11886
0条评论