Re: [討論] JS 時間計算常見問題

看板Ajax作者 (seed)時間11年前 (2014/05/27 11:29), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串4/4 (看更多)
※ 引述《TonyQ (自立而後立人)》之銘言: : 簡易 js 考題(申論題) : http://jsfiddle.net/JR5Xk/1/ : 如果你看到這個範例跟這個程式碼, : 說不出為什麼這樣計算時間是「有嚴重問題的」, : 我會覺得你的 JS 基礎還有需要加強...... : 1.setInterval(or setTimeout) 跑的時間差不是精準的如你設定 : 2.browser focus 與否 可能會影響 setInterval 的行為 : 推薦解法是用先後時間的毫秒數差計算差異時間, : 而不是按照被跑幾次來推斷時間。 : 如此例 : http://jsfiddle.net/JR5Xk/3/ : 其實這是很基本的觀念, : 但普遍看到實作出來的碼表或倒數都常常有這個問題, : 所以只好再撰文呼籲一次... → s25g5d4:requestAnimationFrame 05/23 20:46 推 s25g5d4:最近剛好在看 canvas 如何做動畫 05/23 20:50 推 s25g5d4:http://tinyurl.com/JSTimers 05/23 20:53 → danny8376:那是給動畫用的 05/23 21:12 → danny8376:純計算時間的話 用performance 05/23 21:12 → danny8376:不過要是瀏覽器不支援還只是能用Date當fallback就是 05/23 21:14 推 s25g5d4:我就是剛好在做動畫阿 XD 05/23 21:19 → bndan:S大 那個東西跟時間有關的 只適算FPS = =" 要逆向過來會卡在 05/26 11:59 → bndan:你沒辦法肯定下一秒的FPS應該是多少...(雞生蛋蛋生雞問題) 05/26 11:59 → danny8376:樓上在說啥... 05/26 17:14 講東西就是要盡量講給人家懂...我回文解釋一下. 首先 T大提出timer(setinval or setTimeout)的runtime overlap所造成的問題 (單執行緒/PC效能所產生問題) 而S大則提 html5 的 requestAnimationFrame 以試圖解決問題... BUT~ 查一下相關API Document就可以知道其主要功能 這東西雖然可以解決上述問題. 但這東西的"執行啟動時間"是電腦依電腦狀態控制. 所以這時會卡在你沒辦法確定你的單一次"執行" 是代表多久的時間... (用這方法再玩下去玩起來.就輪到時間函式的出場了 科科~) 註解: requestAnimationFrame的功能 : http://ppt.cc/Cyhj (M$的..不喜勿入=_=) 使用模式: 比照setTimeout 參數: 比setTimeout少一個設定啟動時間的參數,也就是說這玩意的參數 只有function point(也就是你們說的 feedback) PS:至於T大原問題的解法就不需要我多話了.(茶) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.40.116 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1401161379.A.455.html

05/27 12:37, , 1F
就是說你的意思是要剛好 n 秒後執行 差幾毫秒都不行囉?
05/27 12:37, 1F

05/27 14:24, , 2F
記時要算的精準.自然是毫秒也要記阿 囧> 但我說只是要解釋我
05/27 14:24, 2F

05/27 14:24, , 3F
推文在說什麼...
05/27 14:24, 3F

05/27 16:54, , 4F
純推 講東西就是要盡量講給人家懂
05/27 16:54, 4F

05/27 18:44, , 5F
事實上唯一可能知道的是code執行時間,
05/27 18:44, 5F

05/27 18:45, , 6F
code何時執行是瀏覽器決定吧?只能給瀏覽器建議時間
05/27 18:45, 6F

05/27 18:46, , 7F
像chrome會把不在焦點的setInterval改成至少30秒防lag
05/27 18:46, 7F
文章代碼(AID): #1JX0QZHL (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1JX0QZHL (Ajax)