我有以下函數替換contenteditable textarea中的鏈接。它的工作原理,但緩慢大約100個字符。我怎樣才能優化這個功能更快?我該如何提高這個JS函數的速度
function makeLinksFrom (str) {
var wordArray = str.replace(/(<([^>]+)>)/ig,"").split(' ');
var domainsArray = ['.com', '.net', '.co', '.ca', '.io', '.me'];
wordArray.forEach(function(word) {
domainsArray.forEach(function(domain) {
if(word.indexOf(domain) != -1 && word.substr(word.length - 6) == ' ') {
if(word.indexOf('http://') == -1) {
str = str.replace(word, '<a target="_blank" contenteditable="false" href="http://'+clean(word)+'">link</a> ');
} else {
str = str.replace(word, '<a target="_blank" contenteditable="false" href="'+clean(word)+'">link</a> ');
}
}
});
});
return str;
}
簡單的優化,可能會或可能沒有太大的差別:拉回調的foreach出來,你正在重新定義內的回調在'每個條目wordArray'。此外,嘗試標準的循環,而不是'forEach'。儘管一個新的算法可能是你最好的選擇。 –
將一個或兩個數據結構更改爲對象。你重複遍歷結構才能找到。那在使用對象時比迭代列表要便宜得多 –
我認爲你的代碼至少有2個問題,並且在某些情況下不會按你的需要工作。 – Sebas