浏览代码

utils: Fixed regression in IE/Edge with PR #11002

subsystem: utils

Fixed regression in IE 11 and Microsoft Edge browsers. It was caused due
to a poor optimization in Microsoft browsers while accessing
Array#length attribute in a for condition.
alejandro 8 年之前
父节点
当前提交
38ce9230d9
共有 2 个文件被更改,包括 5 次插入13 次删除
  1. 4 12
      src/utils.js
  2. 1 1
      test/unit/src/utils.js

+ 4 - 12
src/utils.js

@@ -1,14 +1,10 @@
 function arrayMin( array ) {
 function arrayMin( array ) {
 
 
-	if ( array.length === 0 ) {
-
-		return Infinity;
-
-	}
+	if ( array.length === 0 ) return Infinity;
 
 
 	var min = array[ 0 ];
 	var min = array[ 0 ];
 
 
-	for ( var i = 1; i < array.length; ++ i ) {
+	for ( var i = 1, length = array.length; i < length; ++ i ) {
 
 
 		if ( array[ i ] < min ) {
 		if ( array[ i ] < min ) {
 
 
@@ -24,15 +20,11 @@ function arrayMin( array ) {
 
 
 function arrayMax( array ) {
 function arrayMax( array ) {
 
 
-	if ( array.length === 0 ) {
-
-		return - Infinity;
-
-	}
+	if ( array.length === 0 ) return - Infinity;
 
 
 	var max = array[ 0 ];
 	var max = array[ 0 ];
 
 
-	for ( var i = 1; i < array.length; ++ i ) {
+	for ( var i = 1, length = array.length; i < length; ++ i ) {
 
 
 		if ( array[ i ] > max ) {
 		if ( array[ i ] > max ) {
 
 

+ 1 - 1
test/unit/src/utils.js

@@ -9,7 +9,7 @@ QUnit.test( 'arrayMax' , function( assert ) {
 	assert.equal( THREE.arrayMax( [] ), - Infinity );
 	assert.equal( THREE.arrayMax( [] ), - Infinity );
 	assert.equal( THREE.arrayMax( [ 5 ] ), 5 );
 	assert.equal( THREE.arrayMax( [ 5 ] ), 5 );
 	assert.equal( THREE.arrayMax( [ 1, 5, 10 ] ), 10 );
 	assert.equal( THREE.arrayMax( [ 1, 5, 10 ] ), 10 );
-	assert.equal( THREE.arrayMax( [ 5, 1, 10 ] ), 10 );
+	assert.equal( THREE.arrayMax( [ 1, 10, 5 ] ), 10 );
 	assert.equal( THREE.arrayMax( [ 10, 5, 1 ] ), 10 );
 	assert.equal( THREE.arrayMax( [ 10, 5, 1 ] ), 10 );
 
 
 });
 });