功能問題來自postcss-discard-duplicates插件。這裏是index.js代碼:提高JS重複數據刪除功能的性能
'use strict';
var postcss = require('postcss');
function dedupe (node) {
if (node.nodes) { node.each(dedupe); }
if (node.type === 'comment') { return; }
var nodes = node.parent.nodes.filter(function (n) {
return String(n) === String(node);
});
nodes.forEach(function (n, i) {
if (i !== nodes.length - 1) {
n.removeSelf();
}
});
}
module.exports = postcss.plugin('postcss-discard-duplicates', function() {
return function (css) {
css.each(dedupe);
};
});
插件使用PostCSS API返回CSS節點樹。完整的API有詳細記錄here。
目前,我有大量的CSS文件建立在Twitter Bootstrap之上,並帶有許多複雜的選擇器。 CSS需要約37秒。如果使用此函數來查找並刪除任何重複的規則,則進行編譯。沒有它,這是〜3秒。
我正在尋找幫助優化此功能以獲得更好的性能。
更新:我發佈了複製函數作者所作改進的答案。它減少了超過50%的編譯時間。
我想補充一下@Danila說,這大概是隻有輕微的性能提升,你可以通過優化此代碼來實現。當然,在大數據集上它可能會有所作爲。在詳細的結尾,你可以做的另外兩個優化是使用** for循環**而不是** forEach **。它有點快。你也可以做** toString **而不是** String **作爲** String **最終調用** toString **。 –