這個問題相信困擾許多JS的開發者,

因為普遍認為JS的執行緒為單一Browser,

故在撰寫JS時常常會放心地不考慮多執行緒的問題,

但卻常常會有意想不到的問題出現,

問題總是摸不著頭緒。

的確,若以技術的角度來看,Javascript的確是單執行緒,

因為他依附在單一Browser運算下,

但我們卻忘了,User卻是造成JS的另一個執行緒,甚至是多執行緒,

對,User就是一個多執行緒,

但是為何使得JS單執行緒的架構因為User的操作而造成多執行緒的假象呢?

因為AJAX,因為asynchronous 設計的盛行,

這中間Client到Server有了一個wait的動作,

但Client在wait的同時,還是可以作其他的動作,

這就是非同步的方便但也是困擾,

例如

AJAX_design_myth.png 

上面這張圖,當開發者認為,如果CheckBox被打勾了,

就執行ajax,然後等到server回應後,client端在依回應之內容進行改變,

但是如果這時使用者在client wait的時間內,uncheck box後,

就會造成程式設計上的錯亂,雖然這是設計者邏輯設計的問題,

但是因為wait的巧妙運用,卻可造就一種假象的多執行緒結果,

所以在使用AJAX的當下,應詳細考慮周全這的問題,

雖可用Set CheckBox Disable的方式檔掉User這個執行緒來確保JS邏輯上單執行緒的設計,

但是若能發揮這樣的特色,開發出JS眾人認為所不能為之事,不是更高人一等。 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 caramels 的頭像
    caramels

    Samuel

    caramels 發表在 痞客邦 留言(2) 人氣()