MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-05, 04:07

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 22 篇文章 ]  前往頁數 上一頁  12
發表人 內容
 文章主題 :
文章發表於 : 2007-04-18, 14:07 
第一個修改版除了 mermory leak 的問題之外,
將幾個變數改於函數之外先行宣告,用意在於函數快數重複被叫用時,
這些變數無須不斷的被建立再釋放,此即所謂「降低損害」。


而之所以建議使用setInterval() 原因是:
setTiimeout() 多了些 overhead ,影響多嚴重取決於間隔時間有多短。

說明如下:

1.當使用 setInterval() 時:
一旦建立 listener 同時也載入startClock() ,而且只在此時被載入一次。
之後 startClock() 便等著固定間隔再次被執行。

2.若使用 setTimeout() 時,
startClock() 載入執行,
每個固定間隔載入執行 startClock(),
清除上殘留的 timer,然後再建立一個 timer,
然後這個 startClock() 結束執行、釋放所建立使用的資源,
而 setTimeout() 也已經忙著再載入一次 startClock() ,
這些動作可能在很短的間隔時間不斷重複。

如果這個被 triger 的函數不是簡單如 startClock(),而是更複雜的處理;
如果多用了幾個不同的 setTimeout() trigger 不同的處理函數 ...
這些影響就不是只要記得釋放清除 timer 可以避免的。

此例中 startClock() 每次被叫用時,並不需要傳進不同參數,因此建議使用 setInterval()。
不同應用中,若函數每次被叫用時須接收不同變數,則此時應使用 setTimeout()。


程式寫法通常不會只有一種,雖然最後結果可能也「看起來一樣」...


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-19, 19:25 
離線
頭像

註冊時間: 2005-02-24, 19:15
文章: 1037
來自: Taiwan
有點懂了,幸好我使用 setTimeout() 的時候,
通常都有點功能互斥,不致引發問題。

_________________
Amauds's Firefox
曾經妳以為最可靠的依賴;其實從未曾真實的存在過。
圖檔圖檔


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-22, 01:52 
Anonymous 寫:
Amauds 寫:
...
window.addEventListener("load", actionClock, false);
window.addEventListener("unload", clearClock, false);
...

如果在非使用 setInterval () 情況下,像是以自訂函數處理類似應用,建立「event listener」確屬高級技巧。

幸運的是, setInerval() 正是使用「建立 event listener」的方法,再加個 listerner 不免有畫蛇添足之疑。
而clearInterval() 則意在釋放 listener,更無須再為 clearInterval() 建立一個 listener。

一般程式員常無法適切辨別何時該使用 setTimeout() 或 setInterval() ,
也不敢放手使用 setInterva(),而常以 setTimeout() 取代之。
甚至,許多熟手也視 setInterval() 為「邪魔」,新手通常則敬而遠之。
的確,若未能正確認識 setInterval() 之前,奉勸還是少碰微妙。


您好,在下認為您的JavaScript功力相當精湛,不知是否有推薦閱讀的中文書籍或是網站?謝謝
倘若都沒有,英文網站也不介意


回頂端
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; KKman3.0; InfoPath.1; .NET CLR 2.0.50727)
  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-22, 12:56 
離線

註冊時間: 2007-04-22, 12:46
文章: 3
Anonymous 寫:
一般程式員常無法適切辨別何時該使用 setTimeout() 或 setInterval() ,
也不敢放手使用 setInterva(),而常以 setTimeout() 取代之。
甚至,許多熟手也視 setInterval() 為「邪魔」,新手通常則敬而遠之。
的確,若未能正確認識 setInterval() 之前,奉勸還是少碰微妙。

我的認知是 只做一次用setTimeout 重複執行用setInterval 中斷重複用clearInterval
且每個setInterval必指定handler並加中斷條件(即使用不到)
然後 製訂動作 obj.run() 和 起動停止 obj.start() / obj.stop()
亦即 仿造Java的Thread使用規則
醬還算正確嗎 ^^?


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-22, 17:39 
R-way 寫:
Anonymous 寫:
一般程式員常無法適切辨別何時該使用 setTimeout() 或 setInterval() ,
也不敢放手使用 setInterva(),而常以 setTimeout() 取代之。
甚至,許多熟手也視 setInterval() 為「邪魔」,新手通常則敬而遠之。
的確,若未能正確認識 setInterval() 之前,奉勸還是少碰微妙。

我的認知是 只做一次用setTimeout 重複執行用setInterval 中斷重複用clearInterval
且每個setInterval必指定handler並加中斷條件(即使用不到)
然後 製訂動作 obj.run() 和 起動停止 obj.start() / obj.stop()
亦即 仿造Java的Thread使用規則
醬還算正確嗎 ^^?

這是最基本的認識。
前面幾篇談的是應用面,重點在於欲重複叫用這兩個函數之一時,該如何作適當的選擇。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-22, 21:00 
Anonymous 寫:
R-way 寫:
我的認知是 只做一次用setTimeout 重複執行用setInterval 中斷重複用clearInterval
且每個setInterval必指定handler並加中斷條件(即使用不到)
然後 製訂動作 obj.run() 和 起動停止 obj.start() / obj.stop()
亦即 仿造Java的Thread使用規則
醬還算正確嗎 ^^?

這是最基本的認識。
前面幾篇談的是應用面,重點在於欲重複叫用這兩個函數之一時,該如何作適當的選擇。

咦 果真如此 又怎可以(語氣過重了但一時不知如何表達)重複叫用setTimeout呢 6^^?
除了向前相容的考量外 也許setTimeout就不太適合再被拿來用於重複之用吧(經驗太淺想不出例外情形^^;)
另外我在寫ActionScript2.0時一直找不到setTimeout
只好用setInterval代替 再於obj.run()結尾處clearInterval
有夠給他痛苦的說...


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
  
引用回覆  
 文章主題 :
文章發表於 : 2007-04-22, 21:03 
離線

註冊時間: 2007-04-22, 12:46
文章: 3
Anonymous 寫:
...有夠給他痛苦的說...

Sorry, it's me↑
因為實在有疑惑才一直貼^^;


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 22 篇文章 ]  前往頁數 上一頁  12

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群