前言
優化客戶端JavaScript程式碼常常是不值得的,因為這會失去程式碼可讀性。如果你的APP執行緩慢,你可以考慮是否能優化請求,減少對DOM的操作,儘量少的操local storage,或者犧牲其它的來換取效能。幾乎沒有足夠的資料認為客戶端需要讓程式碼同步執行速度更快。我認為接下來的程式碼十分具有可讀性,如果你也需要,為什麼不使用它呢?
遞迴尾呼叫(Recursive tail calls)
在下面例子中,函式每次執行都會建立一個新的棧(維持新新增的環境)。所以,如果引數x:5000
,那就會建立5000個棧。
function foo(x) {
if (x < 0) {
return 1;
}
return 1 + foo(x-1);
}複製程式碼
如果使用一個累加數,就不會有新新增的環境需要被維持,所以返回的棧可以代替當前函式的棧。
function foo(x, accumulated) {
if (x < 0) {
return 1;
}
return foo(x-1, accumulated + 1);
}複製程式碼
使用邏輯表示式
與C語言不同,在JavaScript中邏輯表示式可以用來做操作運算,而不只是判斷真假。這意味著我們可以寫出像下面一樣簡單的程式碼:
function foo(x) {
if (!x) {
return null;
}
return x.y;
}複製程式碼
優化後的版本:
function foo(x) {
return x && x.y;
}複製程式碼
雜湊法 > 迭代
switch
語句可以讓返回的資料在結構中重現。但通常,我們只需要查詢和比較一個檔案,使用雜湊法會比迭代快很多。
function iterating(action) {
switch (action.type) {
case 'a':
// do something with action.data
...
return;
case ...
case 'z':
...
return;
default:
return;
}
}
iterating({type: 'z', data: 'asdf'});複製程式碼
迭代26個元素。
const lookupTable = {
'a': (data) => {...},
...
'z': (data) => {...}
}
function hashing(action) {
const handler = lookupTable[action.type];
if (handler) {
return handler(action.data);
}
}複製程式碼
一個比較和一個查詢。
當然,這適用於任何可迭代的元素(arrays,strings,etc),但switch也有它的一些優勢。
喜歡本文的朋友可以關注我的微信公眾號,不定期推送一些好文。
本文由Rockjins Blog翻譯,轉載請與譯者聯絡。否則將追究法律責任。