本文目錄一覽:
- 1、js非同步和同步載入在性能優化中有什麼區別
- 2、JS Promise 同步和非同步代碼執行的區別
- 3、nodejs readfile是同步的還是非同步的
- 4、js 同步 和非同步 函數的區別
- 5、javascript同步和非同步的區別與實現方式
js非同步和同步載入在性能優化中有什麼區別
script src=”file.js/script
img src=”image.jpg” / 圖片多快出現在你眼前,取決於file.js的裝載速度
非同步
script async src=”file.js/script
img src=”image.jpg” / 圖片多快出現在你眼前,不依賴於file.js的裝載與執行速度
就是說file.js和image.jpg會同時被請求,什麼時候file.js可以執行取決於它自己的下載速度,什麼時候渲染image.jpg也只取決於它自己的下載速度。
只有外部引用的javascript才有同步非同步的區別,inline的script只有執行的問題,沒有遠程載入的問題,overhead要小很多所以通常不是問題,只要你不在JS代碼里做很慢的同步運算
script
….
/script
調整javascript文件在文件里的位置,和同步非同步沒有關係,把javascript放在文件後面的方法,叫deferring(延後載入),除了手動把script移動到文檔末尾,還可以用
script defer src=”file.js”/script
意思是在html文件parse完(產生DOM)以後,才執行file.js。
JS Promise 同步和非同步代碼執行的區別
同步的話,必須這個操作完了才會執行下一步,在等待期間瀏覽器會掛起不能執行任何接下來的js代碼;非同步則是【告訴】瀏覽器去做,【告訴】是一瞬間的事情,然後就繼續執行下一步了,等到結果返回來了,瀏覽器會通知js執行相應的回調。
nodejs readfile是同步的還是非同步的
你好,js是同步執行的,一個簡單示例解釋, for(var i = 0;i 10;i++) console.log(i)for(var i = 10;i 20;i++) console.log(i)以上兩個for循環,第一個列印1-10,第二個列印10-20,結果是1-20按順序輸出 js中代碼是同步執行的,只有在ajax的…
js 同步 和非同步 函數的區別
同步就是請求數據時候數據返回來,他會一直等待數據返回才會執行下面的代碼而已,不是等待數據反饋的同時還會執行,其他的代碼。
javascript同步和非同步的區別與實現方式
javascript語言是單線程機制。所謂單線程就是按次序執行,執行完一個任務再執行下一個。
對於瀏覽器來說,也就是無法在渲染頁面的同時執行代碼。
單線程機制的優點在於實現起來較為簡單,運行環境相對簡單。缺點在於,如果中間有任務需要響應時間過長,經常會導致
頁面載入錯誤或者瀏覽器無響應的狀況。這就是所謂的「同步模式」,程序執行順序與任務排列順序一致。對於瀏覽器來說,
同步模式效率較低,耗時長的任務都應該使用非同步模式;而在伺服器端,非同步模式則是唯一的模式,如果採用同步模式個人認為
伺服器很快就會出現12306在高峰期的表現。。。。
非同步模式的四種方式:
1.回調函數callback
所謂回調函數,就是將函數作為參數傳到需要回調的函數內部再執行。
典型的例子就是發送ajax請求。例如:
$.ajax({
async: false,
cache: false,
dataType: ‘json’,
url: “url”,
success: function(data) {
console.log(‘success’);
},
error: function(data) {
console.log(‘error’);
}
})
當發送ajax請求後,等待回應的過程不會堵塞程序運行,耗時的操作相當於延後執行。
回調函數的優點在於簡單,容易理解,但是可讀性較差,耦合度較高,不易於維護。
2.事件驅動
javascript可以稱之為是基於對象的語言,而基於對象的基本特徵就是事件驅動(Event-Driven)。
事件驅動,指的是由滑鼠和熱鍵的動作引發的一連串的程序操作。
例如,為頁面上的某個
$(‘#btn’).onclick(function(){
console.log(‘click button’);
});
綁定事件相當於在元素上進行監聽,是否執行註冊的事件代碼取決於事件是否發生。
優點在於容易理解,一個元素上可以綁定多個事件,有利於實現模塊化;但是缺點在於稱為事件驅動的模型後,流程不清晰。
3.發布/訂閱
發布訂閱模式(publish-subscribe pattern)又稱為觀察者模式(Observer pattern)。
該模式中,有兩類對象:觀察者和目標對象。目標對象中存在著一份觀察者的列表,當目標對象
的狀態發生改變時,主動通知觀察者,從而建立一種發布/訂閱的關係。
jquery有相關的插件,在這不是重點不細說了。。。。回頭寫個實現貼上來
4.promise模式
promise對象是CommonJS工作組提供的一種規範,用於非同步編程的統一介面。
promise對象通常實現一種then的方法,用來在註冊狀態發生改變時作為對應的回調函數。
promise模式在任何時刻都處於以下三種狀態之一:未完成(unfulfilled)、已完成(resolved)和拒絕(rejected)。以CommonJS
Promise/A
標準為例,promise對象上的then方法負責添加針對已完成和拒絕狀態下的處理函數。then方法會返回另一個promise對象,以便於形成promise管道,這種返回promise對象的方式能夠支持開發人員把非同步操作串聯起來,如then(resolvedHandler,
rejectedHandler); 。resolvedHandler
回調函數在promise對象進入完成狀態時會觸發,並傳遞結果;rejectedHandler函數會在拒絕狀態下調用。
Jquery在1.5的版本中引入了一個新的概念叫Deferred,就是CommonJS promise A標準的一種衍生。可以在jQuery中創建
$.Deferref的對象。同時也對發送ajax請求以及數據類型有了新的修改,參考JQuery API。
除了以上四種,javascript中還可以利用各種函數模擬非同步方式,更有詭異的諸如用同步調用非同步的case
只能用team里同事形容java和javascript的一句話作為結尾:
「寫java像在高速路上開車,寫javascript像在草原上開車」————-以此來形容javascript這種無類型的語言有多自由
but,如果草原上都是坑。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/276037.html