TOGOUTECH

javascript - 当我多次调用 requestAnimationFrame 时会发生什么

coder 2024-05-16 原文

我的意思是一次性调用多个具有相同功能的requestAnimationFrame

function Draw() { /* DoSomething */ }
function AFunc() {
    /* prepare something */
    requestAnimationFrame(Draw);
}
function BFunc() {
    /* prepare something */
    requestAnimationFrame(Draw);
}

window.onload(function(){
   AFunc();
   BFunc();
});

会发生什么?会复制吗?它会在同一帧中被调用 2 次吗?或者它会被堆叠并在不同的框架上调用?

最佳答案

来自 the MDN documentation :

The callback method is passed a single argument, a DOMHighResTimeStamp, which indicates the current time when callbacks queued by requestAnimationFrame begin to fire. Multiple callbacks in a single frame, therefore, each receive the same timestamp even though time has passed during the computation of every previous callback's workload. This timestamp is a decimal number, in milliseconds, but with a minimal precision of 1ms (1000 µs).

(强调我的)

此外,from the spec :

When the requestAnimationFrame() method is called, the user agent must run the following steps:

...

  1. Append the method's argument to document's list of animation frame callbacks

When the user agent is to run the animation frame callbacks for a Document doc with a timestamp now, it must run the following steps:

...

  1. For each entry in callbacks, in order: invoke the callback

所以对于你的问题:

What will happen? Will it duplicated? Would it be called 2 times in the same frame? Or it would be stacked and called on difference frame?

上面的所有内容表明,连续的调用将被添加到回调列表中,当浏览器将要运行它们时,这些调用将按照添加的顺序一个接一个地执行,本质上是重复调用Draw 在您的代码中。

关于javascript - 当我多次调用 requestAnimationFrame 时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37673711/

有关javascript - 当我多次调用 requestAnimationFrame 时会发生什么的更多相关文章

  1. 百万赞同:网络安全为什么缺人? 缺什么样的人? - 2

    1.网络安全为什么缺人?缺人的原因是有了新的需求以前的时候,所有企业是以产品为核心的,管你有啥漏洞,管你用户信息泄露不泄露,我只要做出来的产品火爆就行。这一切随着《网络安全法》、《数据安全法》、《网络安全审查办法》等一系列有关网络安全的法律法规出台戛然而止,上到国家下到个人都开始重视网络安全,你看最近的国家对滴滴进行网络安全审查就引发的大家的强烈关注就能感受到。按照新的网络安全法律法规要求,你的企业出了网络安全问题,不仅要处罚企业,还要连带处罚企业负责人,

  2. c# - 为什么在实现接口(interface)方法时允许虚拟? - 2

    我对接口(interface)有一个特定的查询。默认情况下,接口(interface)方法是抽象的和虚拟的,所以如果我们实现该接口(interface)并在类中给出定义,我们实际上会重写该方法,但是当我们在实现类中再次将方法标记为虚拟时,为什么编译器不考虑我们实际上是想隐藏原来的接口(interface)虚方法。如果我们在基类中有一个虚方法并且派生类再次将该方法标记为虚方法,在这种情况下编译器会警告您隐藏了基类方法,因此如果您有意隐藏基类方法,请使用new.publicinterfaceITestInterface{voidvirtualmethod();//thismethodisb

  3. c# - 什么是 |和 ^ 运算符用于什么? - 2

    这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatarebitwiseoperators?最近我发现了一些使用|和^运算符。我猜这些是or和negation运算符。那么这些运算符实际上代表什么?

  4. c# - 为什么 'using' 提高了 C# 性能 - 2

    在大多数情况下,C#编译器似乎可以自动调用Dispose()。像大多数using模式的情况一样:publicvoidSomeMethod(){...using(varfoo=newFoo()){...}//Fooisn'tuseafterhere(obviously)....}因为foo没有被使用(这是一个非常简单的检测)并且因为它没有作为参数提供给另一个方法(这是一个适用于许多用例并且可以扩展的假设),编译器可以自动并立即调用Dispose(),而无需开发人员要求。这意味着在大多数情况下,如果编译器做了一些聪明的工作,using就毫无用处。IDisposable对我来说似乎低

  5. c# - 为什么 C# 使用 implicit void Main? - 2

    我不明白为什么C#的Main函数在默认情况下是无效的(例如在控制台项目中)。在C和C++中,标准明确规定main必须返回int,使用返回值是有意义的,因为我们可以检查来自外部程序的返回值,并查看C/C++应用程序是成功完成还是遇到错误。所以我的问题是:为什么VisualStudio将Main声明为void?一旦C#控制台应用程序执行完毕,向操作系统返回值的最佳方式是什么? 最佳答案 您可以使用int或void作为返回类型。因此,只需更改它并像在C++中那样返回一个值。为了不让新手迷惑,可能默认为void。

  6. c# - C# 的最佳替代 "On Error Resume Next"是什么? - 2

    如果我为我的C#代码放置空的catchblock,它是否等同于VB.NET的“OnErrorResumeNext”语句。try{C#code;}catch(exception){}我问这个的原因是因为我必须将VB.NET代码转换为C#,旧代码有大约200个“OnErrorResumeNext”语句,尽管我使用的是正确的try{}catch{}在我的新代码中,但是否有更好的选择? 最佳答案 我发现VB程序员经常出于(坏)习惯在代码中乱扔许多OnErrorResumeNext语句。我的建议是从没有抑制的异常开始,然后看看到底是什么破坏了

  7. c# - C#关键字fixed/unsafe有什么用? - 2

    这个问题在这里已经有了答案:C#Unsafe/FixedCode(7个答案)关闭8年前。C#关键字fixed/unsafe有什么用?例如,C#fixedKeyword(unsafe)usingSystem;classProgram{unsafestaticvoidMain(){fixed(char*value="sam"){char*ptr=value;while(*ptr!='\0'){Console.WriteLine(*ptr);++ptr;}}}}为什么我首先需要修复它?

  8. c# - 为什么我们要实现接口(interface)? - 2

    我们为什么要实现,例如ICloneable或IDisposable。我不是在问ICloneable或IDisposable做什么,但我想了解实现这些接口(interface)的充分理由是什么,而不是仅仅编写一个处理或克隆我们的对象的方法? 最佳答案 使用接口(interface)可以使这些功能的使用保持一致。这样,当另一个类想要/需要使用您的类时,它可以将其作为可克隆的一次性对象来使用,而无需担心您的特定实现细节。 关于c#-为什么我们要实现接口(interface)?,我们在Stack

  9. c# - 在 if() 中调用方法 - C# - 2

    我有几个方法会根据它们的成功返回bool值,在IF()内部调用这些方法有什么问题吗?//&&makessurethatMethod2()willonlygetcalledifMethod1()returnedtrue,use&tocallbothmethodsif(Method1()&&Method2()){//dostuffifbothmethodsreturnedTRUE}如果Method1()返回FALSE,Method2()不需要触发。如果上面的代码有任何问题,请告诉我。谢谢。编辑:由于代码没有任何问题,我会接受最有信息的答案...添加评

  10. c# - 在 C# 中维护 "clean"using 指令列表有什么好处? - 2

    我知道VS2008和Resharper一样有用于清除using指令的remove和sort功能。除了您的代码“干净”并消除引用将来可能不存在的namespace的问题之外,维护一个“干净”的using指令列表有什么好处?更少的代码?更快的编译时间? 最佳答案 如果您总是只有您需要的using指令,并且总是对它们进行适当的排序,那么当您比较两个版本的代码时,您永远不会看到不相关的更改。此外,如果您有一组简洁的using指令,那么任何查看代码的人都可以通过查看using指令来粗略了解将要使用的内容。

随机推荐

  1. c# - 在 if() 中调用方法 - C# - 2

    我有几个方法会根据它们的成功返回bool值,在IF()内部调用这些方法有什么问题吗?//&&makessurethatMethod2()willonlygetcalledifMethod1()returnedtrue,use&tocallbothmethodsif(Method1()&&Method2()){//dostuffifbothmethodsreturnedTRUE}如果Method1()返回FALSE,Method2()不需要触发。如果上面的代码有任何问题,请告诉我。谢谢。编辑:由于代码没有任何问题,我会接受最有信息的答案...添加评

  2. c# - 在 C# 中维护 "clean"using 指令列表有什么好处? - 2

    我知道VS2008和Resharper一样有用于清除using指令的remove和sort功能。除了您的代码“干净”并消除引用将来可能不存在的namespace的问题之外,维护一个“干净”的using指令列表有什么好处?更少的代码?更快的编译时间? 最佳答案 如果您总是只有您需要的using指令,并且总是对它们进行适当的排序,那么当您比较两个版本的代码时,您永远不会看到不相关的更改。此外,如果您有一组简洁的using指令,那么任何查看代码的人都可以通过查看using指令来粗略了解将要使用的内容。

  3. c# - XMLDocument.Load(url) 通过代理 - 2

    我有一些代码基本上使用XMLDocument.Load(uri)方法读取XML文档,该方法工作正常,但如果通过代理进行调用则效果不佳。我想知道是否有人知道通过代理进行此调用(或达到相同效果)的方法? 最佳答案 这是我最终使用的代码:WebProxywp=newWebProxy(Settings.Default.ProxyAddress);wp.Credentials=newNetworkCredential(Settings.Default.ProxyUsername,Settings.Default.ProxyPassword);

  4. C# HttpWebRequest命令获取目录列表 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我需要一个简短的代码片段来从HTTP服务器获取目录列表。谢谢

  5. c# - 在 MVC 上执行编辑时如何保留某些字段的原始值? - 2

    如您所知,当我们要修改数据时,我们将进入编辑页面:publicActionResultEditAdmin(intUserId){Useruser=persons.Users.Find(id);returnView(user);}然后我们在编辑页面提交,它会修改:publicActionResultEditAdmin(Useruser){persons.Entry(user).State=EntityState.Modified;persons.SaveChanges();}但问题是,我有很多字段不需要修改:publicclassUser{publicintUserId{get;set;

  6. c# - 使用 linq 查询和 lambda 表达式选择多列 - 2

    我是C#ASP.NET的新手,正在开发我的第一个应用程序。我正在尝试创建一个返回数组的linq语句。我有一张产品表。我希望能够为状态==1的每个产品选择名称、ID和价格。我正在努力寻找一种方法来做到这一点。我只能退回单个项目/列。我一直坚持这种方式很长时间。这是我目前所拥有的:try{using(UserDataDataContextdb=newUserDataDataContext()){returndb.mrobProducts.Select(x=>x.Name).OrderBy(x=>x).ToArray();}}如果您查看下面的屏幕截图,您会发现我有2个错误,Sel

  7. c# - 局部 View 和布局有什么区别? - 2

    我在我的项目中同时使用了局部View和布局概念,但我无法区分。但我的感觉是两者都在做同样的工作。任何人都可以通过示例说出有关局部View和布局的简要概念以及区别吗? 最佳答案 除了Josh的回答,我的aweeeesomeee绘画技巧还想给你画一张图来解释所有......承认吧...你很敬畏...您会看到页眉和页脚……您甚至可以在那里看到部分View。编辑...布局举一个不同的例子来说明为什么要使用每个组件(布局/View/局部View),假设您拥有一个总共有100个页面的网站,假设您想要更新网站的设计,你打算怎么做?单独更新每个页面

  8. c# - 'if' 语句条件中的 Lambda 表达式 - 2

    我是C#的新手,但根据我的理解,这段代码应该可以工作。为什么它不起作用?这是我的代码示例。List<Car>cars//Thishasmanycarsinitializedinitalreadyif(()=>{foreach(Carcarincars){if(car.door==null)returntrue;}}){then.......}简单地说,我想让代码做的就是在任何汽车没有门的情况下运行if语句。尝试编译后出现此错误:Cannotconvertlambdaexpressiontotype'bool'becauseitisnotadelegat

  9. c# - 使用 LINQ 查找具有特定属性名称和值的 XElement - 2

    XDocumentxDocument=XDocument.Load("...");IEnumerable<XElement>elements=xDocument.Element("lfm").Element("events").Elements("event");try{foreach(XElementelminelements){comm.Parameters.AddWithValue("extID",elm.Element("id").Value??"");c

  10. C# 在 lambda 表达式中声明变量 - 2

    我想像这样做一个简单的lambda表达式:IList<MyEntity1>list=GetSomeList();MyEntity1result=list.SingleOrDefault<MyEntityList>(e=>GetMyEntity2(e)!=null&&GetMyEntity2(e).Id!=null&&GetMyEntity2(e).Id>0);这很完美,但是从MyEntity1获取MyEntity2并不是那么简单,所以我想在lambda表达式中声明一个变量来保存MyEntity2并使用它,而不是一次又一