[Checkins] SVN: hurry.resource/trunk/ Rolling up resources must now be explicitly requested using

Martijn Faassen faassen at infrae.com
Wed Oct 15 12:31:27 EDT 2008


Log message for revision 92235:
  Rolling up resources must now be explicitly requested using
  hurry.resource.rollup. This follows the general philosophy of
  the developer enabling optimizations (such as minified modes or
  rollups) if they want it in their application - the optimizations
  won't be there by default as the optimizations make debugging harder.
  

Changed:
  U   hurry.resource/trunk/CHANGES.txt
  U   hurry.resource/trunk/src/hurry/resource/README.txt
  U   hurry.resource/trunk/src/hurry/resource/__init__.py
  U   hurry.resource/trunk/src/hurry/resource/core.py
  U   hurry.resource/trunk/src/hurry/resource/interfaces.py

-=-
Modified: hurry.resource/trunk/CHANGES.txt
===================================================================
--- hurry.resource/trunk/CHANGES.txt	2008-10-15 16:06:05 UTC (rev 92234)
+++ hurry.resource/trunk/CHANGES.txt	2008-10-15 16:31:26 UTC (rev 92235)
@@ -4,8 +4,24 @@
 0.3 (unreleased)
 ================
 
-* ...
+Features added
+--------------
 
+* Consolidating resources into rollups is now disabled by
+  default. This is to help developers with debugging; rollups are
+  typically minified for optimization purposes, and libraries such as
+  YUI do not offer rollups in non-minified form. Since rollups must
+  now be explicitly enabled by the application developer
+  (``hurry.resource.rollup()``), an application developer who needs to
+  debug can choose not to call it (or call
+  ``hurry.resource.rollup(disable=True``).
+
+Bug fixes
+---------
+
+* ``hurry.resource.bottom`` now takes a second optional ``disable``
+  parameter.
+
 0.2 (2008-10-13)
 ================
 

Modified: hurry.resource/trunk/src/hurry/resource/README.txt
===================================================================
--- hurry.resource/trunk/src/hurry/resource/README.txt	2008-10-15 16:06:05 UTC (rev 92234)
+++ hurry.resource/trunk/src/hurry/resource/README.txt	2008-10-15 16:31:26 UTC (rev 92235)
@@ -377,13 +377,29 @@
   >>> b2 = ResourceInclusion(foo, 'b2.js')
   >>> giant = ResourceInclusion(foo, 'giant.js', supersedes=[b1, b2])
 
-If we find multiple resources that are also part of a consolidation, the
-system automatically collapses them::
+Rolling up of resources is not enabled by default, as sometimes a
+library only offers these rollups in minified form, and automatically
+rolling up would not be nice during debugging. It's therefore a
+performance feature you can enable.
 
+Without rollups enabled nothing special happens::
+
   >>> needed = NeededInclusions()
   >>> needed.need(b1)
   >>> needed.need(b2)
+  >>> needed.inclusions()
+  [<ResourceInclusion 'b1.js' in library 'foo'>, <ResourceInclusion 'b2.js' in library 'foo'>]
 
+Let's enable rollups::
+
+  >>> needed = NeededInclusions()
+  >>> needed.rollup()
+
+If we now find multiple resources that are also part of a
+consolidation, the system automatically collapses them::
+
+  >>> needed.need(b1)
+  >>> needed.need(b2)
   >>> needed.inclusions()
   [<ResourceInclusion 'giant.js' in library 'foo'>]
 
@@ -391,6 +407,7 @@
 resource out of two is present, the consolidation will not be triggered::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(b1)
   >>> needed.inclusions()
   [<ResourceInclusion 'b1.js' in library 'foo'>]
@@ -405,6 +422,7 @@
 It will not roll up one resource::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(c1)
   >>> needed.inclusions()
   [<ResourceInclusion 'c1.css' in library 'foo'>]
@@ -412,6 +430,7 @@
 Neither will it roll up two resources::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(c1)
   >>> needed.need(c2)
   >>> needed.inclusions()
@@ -421,6 +440,7 @@
 It will however roll up three resources::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(c1)
   >>> needed.need(c2)
   >>> needed.need(c3)
@@ -451,6 +471,7 @@
 ``d2``::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(d1)
   >>> needed.need(d2)
   >>> needed.inclusions()
@@ -460,6 +481,7 @@
 show up instead::
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(d1)
   >>> needed.inclusions()
   [<ResourceInclusion 'giantd.js' in library 'foo'>]
@@ -471,6 +493,7 @@
   >>> giantd_bigger = ResourceInclusion(foo, 'giantd-bigger.js', 
   ...   supersedes=[d1, d2, d3, d4], eager_superseder=True)
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(d1)
   >>> needed.need(d2)
   >>> needed.inclusions()
@@ -482,6 +505,7 @@
   >>> giantd_noneager = ResourceInclusion(foo, 'giantd-noneager.js',
   ...   supersedes=[d1, d2, d3, d4])
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(d1)
   >>> needed.need(d2)
   >>> needed.need(d3)
@@ -502,6 +526,7 @@
   >>> giante_three = ResourceInclusion(foo, 'giante-three.js',
   ...   supersedes=[e1, e2, e3])
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(e1)
   >>> needed.need(e2)
   >>> needed.need(e3)
@@ -516,6 +541,7 @@
   ...                            debug='giantf-debug.js')
 
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(f1)
   >>> needed.need(f2)
   >>> needed.inclusions()
@@ -533,6 +559,7 @@
   >>> giantg = ResourceInclusion(foo, 'giantg.js', supersedes=[g1, g2],
   ...                            debug='giantg-debug.js')
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(g1)
   >>> needed.need(g2)
   >>> needed.inclusions()
@@ -548,6 +575,7 @@
   >>> h2 = ResourceInclusion(foo, 'h2.js', debug='h2-debug.js')
   >>> gianth = ResourceInclusion(foo, 'gianth.js', supersedes=[h1, h2])
   >>> needed = NeededInclusions()
+  >>> needed.rollup()
   >>> needed.need(h1)
   >>> needed.need(h2)
   >>> needed.inclusions()

Modified: hurry.resource/trunk/src/hurry/resource/__init__.py
===================================================================
--- hurry.resource/trunk/src/hurry/resource/__init__.py	2008-10-15 16:06:05 UTC (rev 92234)
+++ hurry.resource/trunk/src/hurry/resource/__init__.py	2008-10-15 16:31:26 UTC (rev 92235)
@@ -1,5 +1,7 @@
-from hurry.resource.core import (Library, ResourceInclusion, NeededInclusions,
-                                 mode, bottom,
-                                 sort_inclusions_topological,
+from hurry.resource.core import (Library, ResourceInclusion, NeededInclusions)
+
+from hurry.resource.core import mode, bottom, rollup
+
+from hurry.resource.core import (sort_inclusions_topological,
                                  sort_inclusions_by_extension,
                                  generate_code)

Modified: hurry.resource/trunk/src/hurry/resource/core.py
===================================================================
--- hurry.resource/trunk/src/hurry/resource/core.py	2008-10-15 16:06:05 UTC (rev 92234)
+++ hurry.resource/trunk/src/hurry/resource/core.py	2008-10-15 16:31:26 UTC (rev 92235)
@@ -136,6 +136,7 @@
     def __init__(self):
         self._inclusions = []
         self._mode = None
+        self._rollup = False
         self._bottom = False
         self._force_bottom = False
         
@@ -153,6 +154,11 @@
         self._bottom = True
         if force:
             self._force_bottom = True
+
+    def rollup(self, disable=False):
+        if disable:
+            self._rollup = False
+        self._rollup = True
         
     def _sorted_inclusions(self):
         return reversed(sorted(self._inclusions, key=lambda i: i.depth()))
@@ -163,7 +169,8 @@
             inclusions.extend(inclusion.inclusions())
 
         inclusions = apply_mode(inclusions, self._mode)
-        inclusions = consolidate(inclusions)
+        if self._rollup:
+            inclusions = consolidate(inclusions)
         # sort only by extension, not dependency, as we can rely on
         # python's stable sort to keep inclusion order intact
         inclusions = sort_inclusions_by_extension(inclusions)
@@ -208,13 +215,18 @@
             interfaces.ICurrentNeededInclusions)()
     needed.mode(mode)
 
-def bottom(force=False):
+def bottom(force=False, disable=False):
     """Try to include resources at the bottom of the page, not just on top.
     """
     needed = component.getUtility(
             interfaces.ICurrentNeededInclusions)()
-    needed.bottom(force)
-    
+    needed.bottom(force, disable)
+
+def rollup(disable=False):
+    needed = component.getUtility(
+        interfaces.ICurrentNeededInclusions)()
+    needed.rollup(disable)
+
 def apply_mode(inclusions, mode):
     return [inclusion.mode(mode) for inclusion in inclusions]
 

Modified: hurry.resource/trunk/src/hurry/resource/interfaces.py
===================================================================
--- hurry.resource/trunk/src/hurry/resource/interfaces.py	2008-10-15 16:06:05 UTC (rev 92234)
+++ hurry.resource/trunk/src/hurry/resource/interfaces.py	2008-10-15 16:31:26 UTC (rev 92235)
@@ -111,7 +111,16 @@
         NOTE: there is also a ``hurry.resource.mode`` function which
         can be used to set the mode for the currently needed inclusions.
         """
-        
+
+    def rollup(disable=False):
+        """Enable rolling up of resources.
+
+        If not called or called with disable set to ``True``,
+        resources are never consolidated into rollups.
+
+        If called, resources will be consolidated into rollups if possible.
+        """
+
     def inclusions():
         """Give all resource inclusions needed.
 



More information about the Checkins mailing list