加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP和JQuery应用程序崩溃IE

发布时间:2020-12-13 21:46:15 所属栏目:PHP教程 来源:网络整理
导读:我已经在这个 PHP CPU和RAM监视器上工作了一段时间 – http://nereus.rikkuness.net/php-cpu-monitor/ 这一切都很有效,并做了它应该做的事情.但我使用Linux,因此没有太多能力在IE上进行测试.一些朋友说它适用于现代的一切但完全崩溃的IE. 只是想知道是否有人
我已经在这个 PHP CPU和RAM监视器上工作了一段时间 – http://nereus.rikkuness.net/php-cpu-monitor/

这一切都很有效,并做了它应该做的事情.但我使用Linux,因此没有太多能力在IE上进行测试.一些朋友说它适用于现代的一切但完全崩溃的IE.

只是想知道是否有人知道为什么会这样?

代码可在此处获取 – http://php-cpu-monitor.googlecode.com/files/php-cpu-monitor-1.0.tar.gz

解决方法

我在过去遇到了一些与此问题非常相似的问题,它们通常始终与 caching相关.由于您的AJAX请求被缓存,因此您的PHP脚本不再在用户给定的时间间隔内休眠,这就是为什么您我们看到请求的完成速度要快得多.

缓存的背景

您的Web服务器实际上只会发出三个响应标头来控制缓存AJAX资源的方式.这些适用于HTTP和AJAX请求.您并不需要为了您的目的而理解这些内容,但了解以下内容总是很好的信息:

> Expires – 此标头告诉浏览器何时需要检索新版本的资源.例如,照片或公司徽标可能将Expires标头设置为未来几个月,因为我们不希望这些图像经常更改.另一方面,AJAX请求检索对时间敏感的CPU使用率数据应该具有-1的过期值,以确保始终刷新此数据
> Last Modified – 浏览器可以使用它将条件GET请求发送到服务器.服务器检查资源是否已更改晚于给定值,如果是,则返回更新的内容
>高速缓存控制 – 这允许代理和其他高速缓存将此资源的副本存储在共享(或非共享)池中,以便更快地访问资源.

jQuery.load()如何工作

jQuery.load()通过在服务器上发送对html资源的简单GET请求来工作.请记住,jQuery load()函数是获取数据的最简单方法,并且通常不是最佳的数据检索方法.它旨在快速从服务器获取html,然后在您选择的jQuery DOM元素中填充html.这是docs的片段:

This method is the simplest way to fetch data from the server. It is
roughly equivalent to $.get(url,data,success) except that it is a
method rather than global function and it has an implicit callback
function. When a successful response is detected (i.e. when textStatus
is “success” or “notmodified”),.load() sets the HTML contents of the
matched element to the returned data. This means that most uses of the
method can be quite simple.

由于$.load()主要是将html插入jQuery元素的简单方法,因此jQuery库不提供确保不缓存请求的机制.这是合理的,因为如果您只是检索HTML,我们可以通过缓存这些响应来获得更高的性能,特别是如果它们没有更改并且经常被轮询.

在我测试的所有浏览器中,看起来IE(9)是唯一一个持续缓存AJAX请求的浏览器.看看Firefox与Internet Explorer中的请求之间的区别:

火狐:

IE浏览器:

注意来自IE的可疑< 1 ms响应时间. IE doesn’t ever refresh cached content before it’s expiration date,在缓存方面也没有区分HTTP和AJAX请求.我们需要尝试不同的解决方案,以确保每次调用您的AJAX URL时我们都会收到新数据.

阻止Internet Explorer缓存AJAX请求

我们可以通过几种不同的方式来解决IE的缓存限制:

>将随机标记(nonce值)添加到查询字符串,例如?token = [timestamp].通过更改每个请求的请求URL,浏览器将为每个请求存储资源的不同缓存副本,并确保从服务器获取最新数据. jQuery通过简单地获取时间戳来创建一个nonce值:var nonce =(new Date()).getTime();
>使用POST而不是GET请求.由于POST请求旨在发送修改服务器上资源的请求,因此浏览器永远不会缓存它们.
>发送HTTP响应标头,专门禁止浏览器缓存它 – 这将在您的cpu.php中实现.您可以通过更改$http_response_header数组轻松修改此内容(有关文档,请参阅here)
>使用jQuery.ajax()而不是jQuery.load():使用$.ajax(),您可以使用cache:false选项指定某些AJAX调用以强制刷新.或者甚至更多,您可以通过在ajaxSetup()中配置它来确保每次刷新所有AJAX调用:$.ajaxSetup({cache:false});.这与#1基本上是相同的解决方案,但无需在javascript代码中创建nonce值.

在所有备选方案中,#4是最好的保留您正在进行的请求类型,并且是最容易配置的.

另一个建议 – 使用window.setInterval()来调用replay()函数是一种在请求之间设置等待间隔的简单方法,通常在客户端上实现可变长度睡眠周期比服务器更好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读