匯仁智杰網(wǎng)絡(luò)推廣專家在以往的文章中講述了很多Web前端開發(fā)與iOS終端開發(fā)的異同,不知道大家還有沒有印象,當(dāng)然今天我們也是繼續(xù)以往的話題繼續(xù)講述Web前端開發(fā)與iOS終端開發(fā)的異同,我們今天主要說的是二者之間線程的異同。
終端開發(fā)需要大量使用多線程,iOS有一條主線程,UI渲染都在這個(gè)線程,其他耗時(shí)長(zhǎng)的邏輯或者數(shù)據(jù)庫(kù)IO/網(wǎng)絡(luò)請(qǐng)求都需要自己另開線程執(zhí)行,否則會(huì)占用主線程的時(shí)間,導(dǎo)致界面無法響應(yīng)用戶交互事件,或者渲染慢導(dǎo)致滾動(dòng)卡頓。程序邏輯分布在多個(gè)線程里跑,需要處理好各種代碼并發(fā)執(zhí)行可能帶來的數(shù)據(jù)不一致/時(shí)序錯(cuò)亂之類的問題,并發(fā)也導(dǎo)致有些bug難以排查,一不留神就掉坑,需要適當(dāng)用一些隊(duì)列/鎖保證程序的執(zhí)行順序。iOS提供了一套多線程管理的方法GCD,已經(jīng)把線程和隊(duì)列封裝得非常簡(jiǎn)單易用功能強(qiáng)大,比其他端或后臺(tái)是好很多了,但還是會(huì)花大量功夫在處理多線程問題上。
前端開發(fā)幾乎不需要線程這個(gè)概念,瀏覽器實(shí)現(xiàn)上頁(yè)面HTML和CSS解析渲染可能與js不在同一個(gè)線程,但所有js代碼只執(zhí)行在一條線程上,不會(huì)并發(fā)執(zhí)行,也就不需要考慮各種并發(fā)編程的問題。在新的JS特性中可以創(chuàng)建worker任務(wù),這樣的任務(wù)是可以另起一條線程并行執(zhí)行的,但由于并不是所有瀏覽器都支持,不同線程傳遞數(shù)據(jù)各個(gè)標(biāo)準(zhǔn)定的還不一樣,使用場(chǎng)景也少,似乎沒有大規(guī)模用起來。對(duì)于數(shù)據(jù)庫(kù)操作/發(fā)送網(wǎng)絡(luò)請(qǐng)求這樣的任務(wù)是在不同于js代碼執(zhí)行線程的,不過這些都由瀏覽器管理,前端無需關(guān)心也無法影響這些線程,只需接收事件回調(diào),不需要處理任何并發(fā)問題。
其實(shí)二者最本質(zhì)的區(qū)別就是一個(gè)需要大量的線程一個(gè)幾乎不需要線程,不知道看完這篇文章的你懂了嗎?當(dāng)然如果你忘了匯仁智杰專家以前所講的,你可以點(diǎn)擊Web前端知識(shí)來了解你所需要的知識(shí)!