]> source.dussan.org Git - jquery.git/commitdiff
Support: improve support properties computation
authorOleg Gaidarenko <markelog@gmail.com>
Mon, 28 Mar 2016 13:11:39 +0000 (16:11 +0300)
committerOleg Gaidarenko <markelog@gmail.com>
Mon, 28 Mar 2016 16:24:31 +0000 (19:24 +0300)
* Remove div from the memory if it is not needed anymore

* Make `computeStyleTests` method a singleton

Fixes gh-3018
Closes gh-3021

src/css/support.js

index 1150485bfa1672e2d400e3a2715a868ba0de7af7..0c02b71d72154dcae1286336ef179ffd55ca681b 100644 (file)
@@ -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;
                }
        } );