Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Support: improve support properties computation
* Remove div from the memory if it is not needed anymore

* Make `computeStyleTests` method a singleton

Fixes gh-3018
Closes gh-3021
  • Loading branch information
markelog committed Mar 28, 2016
1 parent e8ff817 commit 44cb97e
Showing 1 changed file with 15 additions and 19 deletions.
34 changes: 15 additions & 19 deletions src/css/support.js
Expand Up @@ -28,6 +28,12 @@ define( [
// Executing both pixelPosition & boxSizingReliable tests require only one layout
// so they're executed at the same time to save the second computation.
function computeStyleTests() {

// This is a singleton, we need to execute it only once
if ( !div ) {
return;
}

div.style.cssText =
"box-sizing:border-box;" +
"position:relative;display:block;" +
Expand All @@ -38,6 +44,8 @@ define( [

var divStyle = window.getComputedStyle( div );
pixelPositionVal = divStyle.top !== "1%";

// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44+
reliableMarginLeftVal = divStyle.marginLeft === "2px";
boxSizingReliableVal = divStyle.width === "4px";

Expand All @@ -47,39 +55,27 @@ define( [
pixelMarginRightVal = divStyle.marginRight === "4px";

documentElement.removeChild( container );

// Nullify the div so it wouldn't be stored in the memory and
// it will also be a sign that checks already performed
div = null;
}

jQuery.extend( support, {
pixelPosition: function() {

// This test is executed only once but we still do memoizing
// since we can use the boxSizingReliable pre-computing.
// No need to check if the test was already performed, though.
computeStyleTests();
return pixelPositionVal;
},
boxSizingReliable: function() {
if ( boxSizingReliableVal == null ) {
computeStyleTests();
}
computeStyleTests();
return boxSizingReliableVal;
},
pixelMarginRight: function() {

// Support: Android 4.0 - 4.3 only
// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
// since that compresses better and they're computed together anyway.
if ( boxSizingReliableVal == null ) {
computeStyleTests();
}
computeStyleTests();
return pixelMarginRightVal;
},
reliableMarginLeft: function() {

// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44+
if ( boxSizingReliableVal == null ) {
computeStyleTests();
}
computeStyleTests();
return reliableMarginLeftVal;
}
} );
Expand Down

2 comments on commit 44cb97e

@mgol
Copy link
Member

@mgol mgol commented on 44cb97e Mar 30, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For me it's the CSS module; I don't think we should have the Support module.

@markelog
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After some thought, i tend to agree

Please sign in to comment.