我如何委托一些javascript(渲染页面)有更高的重要性,然后其他javascript(获取数据)

How do I delegate some javascript (rendering the page) to have higher importance then other javascript (fetching data)

本文关键字:javascript 数据 重要性 然后 获取 其他 何委托      更新时间:2023-09-26

现在我的移动web应用程序在启动时开始与几个api进行对话。这些都与渲染页面的javascript交织在一起。

当它们同时启动时,页面渲染会变得不稳定,可能是因为渲染使用了硬件加速,或者可能在移动设备(iphone)上运行太多JS时,这是正常的。

我想以这样一种方式构建应用程序:如果用户采取行动改变页面的呈现,或者与UI相关的任何事情被触发,它将优先于任何其他JS。

我希望体验是快速和活泼的,即使它使一些行动(与api交谈)比它应该花更长的时间。

你知道如何实现这样的东西吗?

谢谢! !

一个给定的javascript线程运行到完成没有中断,因为javascript是单线程的(除了Web Workers,但我不认为这是我们在这里谈论的)。

因此,确定工作优先级的唯一方法是创建待完成的工作队列。从队列中执行一个工作单元,然后决定下一步执行队列上的哪个工作单元。如果所有要完成的工作都在队列中,那么当需要从队列中获取下一个工作单元时,您可以决定应该先完成哪些任务。

工作单元越小/越短,任务之间的切换就越精细。如果你使用setTimeout(),在队列中每个项目之间的时间很短,这就给了任何UI事件(如点击或其他计时器)运行的机会。

您甚至可以发出一堆ajax请求,当响应进来时,您可以将响应放入队列中,以便在有时间时进行解析/处理。

出现这种不稳定的行为的原因是您对可以处理的Ajax请求数量有限制。

您可以编写一个javascript函数/对象来管理Ajax请求的优先级队列以及每个请求的回调。请求按优先级/队列中的位置顺序触发。具有高优先级的新请求在较不重要的请求之前执行,即使它们可能稍后被请求,类似于添加了jquery Ajax Manager插件+优先级。