mirror of
https://github.com/jquery/jquery.git
synced 2026-02-01 00:08:17 -05:00
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
This commit is contained in:
@@ -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;" +
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
} );
|
||||
|
||||
Reference in New Issue
Block a user