我正在创建一些使用ajax获取页面信息的插件。现在有不同的插件可以执行不同的功能。
所有插件都需要独立使用,但我还想添加它们可以很好地协同工作的功能。
所有不同的插件都有自己的JavaScript文件和功能。这在HTTP请求方面没有问题,因为大多数人都有插件,在网站被瘫痪时将所有文件合并为一个。
-
现在提出我的问题。正如我所说,不同的插件获得了网站的不同部分。例如,帖子计数,用户推文,用户统计信息,发表评论。
现在我可以指定从网站调用此信息的优先级。我想不能将它们全部合并到一个ajax调用中,因为它们都是单独的工作组件。
任何人都知道一个很好的解决方案,我可以首先得到评论,然后是统计数据等等。
我选择的JS框架是jQuery。
答案 0 :(得分:5)
一种通用方法是为挂起的AJAX调用实现优先级队列。每个插件都会将其调用放在队列中,并在调用时具有相关的优先级,并且AJAX队列处理器将按优先级顺序通过队列。
以下是jQuery优先级队列插件的示例:
http://benalman.com/code/projects/jquery-message-queuing/docs/files/jquery-ba-jqmq-js.html
此外,这里已经为AJAX请求实现了一个:
答案 1 :(得分:4)
仍然无法在XMLHttpRequest
或window.fetch
调用上设置明确的优先级,但是Google提出了一个新的API提案,称为“优先级提示”。
https://wicg.github.io/priority-hints/#examples
到目前为止,任何浏览器均不支持; Chrome 70 has shipped an experimental implementation behind the flag.
从非关键Fetch API请求中减少网络竞争
优先级提示可用于降低非关键性访存的优先级 API请求以避免它们与更重要的请求竞争。
新闻网站对文章内容提出了重要的Fetch API请求 可能最终会争夺对次要资源的请求 喜欢相关内容。
<script> // Critical Fetch request for article content fetch('/api/articles.json').then(/*...*/) // Request for related content contending with the above request fetch('/api/related.json').then(/*...*/) </script>
通过在第二个Fetch请求上使用重要性属性,我们可以 提示该请求的优先级较低,从而降低了 它与文章内容的提取请求竞争。我们也可以 明确指出第一个请求的优先级很高,因此 提取请求尚未具有较高优先级的浏览器 对页面很重要。
<script> // Critical Fetch request for article content fetch('/api/articles.json', { importance: 'high' }).then(/*...*/) // Request for related content now reduced in priority // reducing the opportunity for contention fetch('/api/related.json', { importance: 'low' }).then(/*...*/) </script>