這個問題相信困擾許多JS的開發者,
因為普遍認為JS的執行緒為單一Browser,
故在撰寫JS時常常會放心地不考慮多執行緒的問題,
但卻常常會有意想不到的問題出現,
問題總是摸不著頭緒。
的確,若以技術的角度來看,Javascript的確是單執行緒,
因為他依附在單一Browser運算下,
但我們卻忘了,User卻是造成JS的另一個執行緒,甚至是多執行緒,
對,User就是一個多執行緒,
但是為何使得JS單執行緒的架構因為User的操作而造成多執行緒的假象呢?
因為AJAX,因為asynchronous 設計的盛行,
這中間Client到Server有了一個wait的動作,
但Client在wait的同時,還是可以作其他的動作,
這就是非同步的方便但也是困擾,
例如
上面這張圖,當開發者認為,如果CheckBox被打勾了,
就執行ajax,然後等到server回應後,client端在依回應之內容進行改變,
但是如果這時使用者在client wait的時間內,uncheck box後,
就會造成程式設計上的錯亂,雖然這是設計者邏輯設計的問題,
但是因為wait的巧妙運用,卻可造就一種假象的多執行緒結果,
所以在使用AJAX的當下,應詳細考慮周全這的問題,
雖可用Set CheckBox Disable的方式檔掉User這個執行緒來確保JS邏輯上單執行緒的設計,
但是若能發揮這樣的特色,開發出JS眾人認為所不能為之事,不是更高人一等。
全站熱搜
留言列表