フロントエンドパフォーマンス最適化:サイクル最適化2、サイクル展開
2939 ワード
この方式はループを展開することで、性能を向上させることができると言われていますが、テストの効果は明らかではなく、グーグル50では逆に展開が遅くなり、IE 10は速くなりました.実際の使用ではテストが必要なようです
テストコード:
実は展開も1種の構想で、具体的な問題に対してまた具体的な分析が必要で、業務によって書き換えを行って、例えば:
テストコード:
function doProcess(value1, value2) {
return value1 + value2;
}
function createArr() {
var t = [];
for (var i = 0; i < 3000; i++) {
t[i] = i;
}
return t;
}
/* */
function Test1() {
var t = createArr();
var date1 = new Date().getTime();
var total = 0;
var length = t.length;
for (var i = 0; i < length; i++) {
total = doProcess(total, t[i]);
}
var date12 = new Date().getTime();
console.log("1Test" + ((date12 - date1)));
}
/* */
function Test2() {
var t = createArr();
var date1 = new Date().getTime();
var length = t.length;
var iteration = Math.floor(length / 8);
var leftover = length % 8;
var total = 0;
var i = 0;
if (leftover > 0) {
do {
total = doProcess(total, t[i++]);
}
while (--leftover > 0)
}
do {
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
total = doProcess(total, t[i++]);
}
while (--iteration > 0)
var date12 = new Date().getTime();
console.log("2Test" + ((date12 - date1)));
}
実は展開も1種の構想で、具体的な問題に対してまた具体的な分析が必要で、業務によって書き換えを行って、例えば:
/* */
function Test1() {
var t = createArr();
var date1 = new Date().getTime();
var total = 0;
var total2 = 0;
var length = t.length;
for (var i = 0; i < length; i++) {
if(i%2)
{
total2 = doProcess(total2, t[i]);
}
else{
total = doProcess(total, t[i]);
}
}
var date12 = new Date().getTime();
console.log("1Test" + ((date12 - date1)));
console.log(total2+"Test" +total);
}
/* */
function Test2() {
var t = createArr();
var date1 = new Date().getTime();
var total = 0;
var total2 = 0;
var length = t.length;
for (var i = 0; i < length; ) {
total2 = doProcess(total2, t[i]);
i+=2;
}
for (var i = 0; i < length; ) {
total = doProcess(total, t[i]);
i+=2;
}
var date12 = new Date().getTime();
console.log("2Test" + ((date12 - date1)));
console.log(total2+"Test" +total);
}
は別れてから、一度判断が少なくなったので、スピードが速くなり、いろいろな処理があれば、ずっと速くなります.