asset_hat 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -0
- data/HISTORY +10 -0
- data/README.rdoc +117 -75
- data/Rakefile +4 -4
- data/VERSION.yml +2 -2
- data/asset_hat.gemspec +69 -7
- data/config/assets.yml +46 -24
- data/doc/classes/AssetHat.html +183 -118
- data/doc/classes/AssetHat/CSS.html +21 -21
- data/doc/classes/AssetHat/CSS/Engines.html +10 -10
- data/doc/classes/AssetHat/JS.html +13 -13
- data/doc/classes/AssetHat/JS/Engines.html +10 -10
- data/doc/classes/AssetHat/JS/Vendors.html +85 -22
- data/doc/classes/AssetHatHelper.html +94 -19
- data/doc/created.rid +1 -1
- data/doc/files/HISTORY.html +20 -2
- data/doc/files/LICENSE.html +1 -1
- data/doc/files/README_rdoc.html +87 -31
- data/doc/files/lib/asset_hat/capistrano_rb.html +1 -1
- data/doc/files/lib/asset_hat/css_rb.html +1 -1
- data/doc/files/lib/asset_hat/initializers/action_view_rb.html +49 -0
- data/doc/files/lib/asset_hat/initializers/cache_last_commit_ids_rb.html +49 -0
- data/doc/files/lib/asset_hat/js/vendors_rb.html +1 -1
- data/doc/files/lib/asset_hat/js_rb.html +1 -1
- data/doc/files/lib/asset_hat/railtie_rb.html +61 -0
- data/doc/files/lib/asset_hat/tasks/css_rb.html +1 -1
- data/doc/files/lib/asset_hat/tasks/js_rb.html +1 -1
- data/doc/files/lib/asset_hat/tasks_rb.html +2 -1
- data/doc/files/lib/asset_hat/unicorn_rb.html +58 -0
- data/doc/files/lib/asset_hat/vcs_rb.html +1 -1
- data/doc/files/lib/asset_hat/version_rb.html +1 -1
- data/doc/files/{app/helpers → lib}/asset_hat_helper_rb.html +3 -3
- data/doc/files/lib/asset_hat_rb.html +9 -1
- data/doc/files/lib/tasks/asset_hat_rake.html +54 -0
- data/doc/fr_file_index.html +6 -1
- data/doc/fr_method_index.html +60 -52
- data/lib/asset_hat.rb +104 -59
- data/lib/asset_hat/initializers/action_view.rb +1 -0
- data/lib/asset_hat/initializers/cache_last_commit_ids.rb +1 -0
- data/lib/asset_hat/js/vendors.rb +198 -72
- data/lib/asset_hat/railtie.rb +19 -0
- data/lib/asset_hat/tasks.rb +5 -2
- data/lib/asset_hat/unicorn.rb +9 -0
- data/lib/asset_hat/vcs.rb +3 -2
- data/{app/helpers → lib}/asset_hat_helper.rb +184 -29
- data/{tasks → lib/tasks}/asset_hat.rake +0 -0
- data/rails/init.rb +2 -2
- data/test/asset_hat_helper_test.rb +731 -148
- data/test/asset_hat_test.rb +23 -2
- data/test/test_helper.rb +4 -8
- metadata +311 -30
@@ -31,7 +31,7 @@
|
|
31
31
|
</h1>
|
32
32
|
<ol class='paths'>
|
33
33
|
<li>
|
34
|
-
<a href="../files/
|
34
|
+
<a href="../files/lib/asset_hat_helper_rb.html">lib/asset_hat_helper.rb</a>
|
35
35
|
</li>
|
36
36
|
</ol>
|
37
37
|
</div>
|
@@ -47,8 +47,9 @@
|
|
47
47
|
<h2>Methods</h2>
|
48
48
|
<h3>public instance</h3>
|
49
49
|
<ol>
|
50
|
-
<li><a href="#
|
51
|
-
<li><a href="#
|
50
|
+
<li><a href="#M000032">asset_path</a></li>
|
51
|
+
<li><a href="#M000030">include_css</a></li>
|
52
|
+
<li><a href="#M000031">include_js</a></li>
|
52
53
|
</ol>
|
53
54
|
</div>
|
54
55
|
<div id='section'>
|
@@ -66,24 +67,45 @@
|
|
66
67
|
</div>
|
67
68
|
<div id='methods'>
|
68
69
|
<h2>Public instance methods</h2>
|
69
|
-
<div class='method public-instance' id='method-
|
70
|
-
<a name='
|
70
|
+
<div class='method public-instance' id='method-M000032'>
|
71
|
+
<a name='M000032'></a>
|
72
|
+
<div class='synopsis'>
|
73
|
+
<span class='name'>asset_path</span>
|
74
|
+
<span class='arguments'>(type, source)</span>
|
75
|
+
</div>
|
76
|
+
<div class='description'>
|
77
|
+
<p>
|
78
|
+
Returns the public URL path to the given source file.
|
79
|
+
</p>
|
80
|
+
<p>
|
81
|
+
<tt>type</tt> argument: <tt>:css</tt> or <tt>:js</tt>
|
82
|
+
</p>
|
83
|
+
</div>
|
84
|
+
<div class='source'>
|
85
|
+
<a class='source-toggle' href='#' onclick="toggleCode('M000032-source'); return false">
|
86
|
+
[show source]
|
87
|
+
</a>
|
88
|
+
<pre id='M000032-source'> <span class="ruby-comment cmt"># File lib/asset_hat_helper.rb, line 368</span>
368: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">asset_path</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">source</span>)
369: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">to_sym</span>
370: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:css</span> ; <span class="ruby-identifier">stylesheet_path</span>(<span class="ruby-identifier">source</span>)
371: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:js</span> ; <span class="ruby-identifier">javascript_path</span>(<span class="ruby-identifier">source</span>)
372: <span class="ruby-keyword kw">else</span>
373: <span class="ruby-identifier">raise</span> <span class="ruby-node">%{Unknown type "#{type}"; should be one of: #{TYPES.join(', ')}.}</span>
374: <span class="ruby-keyword kw">end</span>
375: <span class="ruby-keyword kw">end</span></pre>
|
89
|
+
</div>
|
90
|
+
</div>
|
91
|
+
<div class='method public-instance' id='method-M000030'>
|
92
|
+
<a name='M000030'></a>
|
71
93
|
<div class='synopsis'>
|
72
94
|
<span class='name'>include_css</span>
|
73
95
|
<span class='arguments'>(*args)</span>
|
74
96
|
</div>
|
75
97
|
<div class='description'>
|
76
98
|
<p>
|
77
|
-
<tt><a href="AssetHatHelper.html#
|
99
|
+
<tt><a href="AssetHatHelper.html#M000030">include_css</a></tt> is a smart
|
78
100
|
wrapper for Rails’ <tt>stylesheet_link_tag</tt>. The two can be used
|
79
101
|
together while migrating to <a href="AssetHat.html">AssetHat</a>.
|
80
102
|
</p>
|
81
103
|
<p>
|
82
|
-
Include a single stylesheet:
|
104
|
+
Include a single, minified stylesheet:
|
83
105
|
</p>
|
84
106
|
<pre>include_css 'diagnostics'
=> <link href="/stylesheets/diagnostics.min.css" media="screen,projection" rel="stylesheet" type="text/css" /></pre>
|
85
107
|
<p>
|
86
|
-
Include a single unminified stylesheet:
|
108
|
+
Include a single, unminified stylesheet:
|
87
109
|
</p>
|
88
110
|
<pre>include_css 'diagnostics.css'
=> <link href="/stylesheets/diagnostics.css" media="screen,projection" rel="stylesheet" type="text/css" /></pre>
|
89
111
|
<p>
|
@@ -94,43 +116,65 @@
|
|
94
116
|
<p>
|
95
117
|
Include multiple stylesheets separately (not as cool):
|
96
118
|
</p>
|
97
|
-
<pre>include_css 'reset', 'application'
|
119
|
+
<pre>include_css 'reset', 'application'
=> <link href="/stylesheets/reset.min.css" ... />
 <link href="/stylesheets/application.min.css" ... /></pre>
|
98
120
|
<p>
|
99
121
|
Include a stylesheet with extra media types:
|
100
122
|
</p>
|
101
123
|
<pre>include_css 'mobile', :media => 'handheld,screen,projection'
=> <link href="/stylesheets/mobile.min.css"
 media="handheld,screen,projection" ... /></pre>
|
124
|
+
<p>
|
125
|
+
Get the URL for a single, minified stylesheet:
|
126
|
+
</p>
|
127
|
+
<pre>include_css 'diagnostics', :only_url => true
=> '/stylesheets/diagnostics.min.css'</pre>
|
128
|
+
<p>
|
129
|
+
Get the URL for a single, unminified stylesheet:
|
130
|
+
</p>
|
131
|
+
<pre>include_css 'diagnostics.css', :only_url => true
=> '/stylesheets/diagnostics.css'</pre>
|
132
|
+
<p>
|
133
|
+
Get the URL for a bundle of stylesheets when environment <b>enables</b>
|
134
|
+
caching (e.g., staging, production):
|
135
|
+
</p>
|
136
|
+
<pre>include_css :bundle => 'application', :only_url => true
=> '/stylesheets/bundles/application.min.css'</pre>
|
137
|
+
<p>
|
138
|
+
Get URLs for a bundle of stylesheets when environment <b>disables</b>
|
139
|
+
caching (e.g., development, test):
|
140
|
+
</p>
|
141
|
+
<pre>include_css :bundle => 'application', :only_url => true
=> ['/stylesheets/reset.css', '/stylesheets/common.css', ...]</pre>
|
142
|
+
<p>
|
143
|
+
Get URLs for multiple stylesheets manually:
|
144
|
+
</p>
|
145
|
+
<pre>include_css 'reset', 'application', :only_url => true
=> ['/stylesheets/reset.css', '/stylesheets/application.css']</pre>
|
102
146
|
</div>
|
103
147
|
<div class='source'>
|
104
|
-
<a class='source-toggle' href='#' onclick="toggleCode('
|
148
|
+
<a class='source-toggle' href='#' onclick="toggleCode('M000030-source'); return false">
|
105
149
|
[show source]
|
106
150
|
</a>
|
107
|
-
<pre id='
|
151
|
+
<pre id='M000030-source'> <span class="ruby-comment cmt"># File lib/asset_hat_helper.rb, line 159</span>
159: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include_css</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
160: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">blank?</span>
161: 
162: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span> <span class="ruby-operator">||=</span> {}
163: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:css</span>] <span class="ruby-operator">||=</span> {}
164: 
165: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">extract_options!</span>
166: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">symbolize_keys!</span>.<span class="ruby-identifier">reverse_merge!</span>(
167: <span class="ruby-identifier">:media</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'screen,projection'</span>, <span class="ruby-identifier">:ssl</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">controller</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">ssl?</span>)
168: <span class="ruby-identifier">cache_key</span> = (<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">options</span>]).<span class="ruby-identifier">inspect</span>
169: 
170: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">cache?</span> <span class="ruby-operator">||</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:css</span>][<span class="ruby-identifier">cache_key</span>].<span class="ruby-identifier">blank?</span>
171: <span class="ruby-comment cmt"># Generate HTML and write to cache</span>
172: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:ssl</span>] <span class="ruby-operator">&&=</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">ssl_asset_host_differs?</span>
173: <span class="ruby-identifier">html</span> = <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:css</span>][<span class="ruby-identifier">cache_key</span>] =
174: <span class="ruby-identifier">include_assets</span>(<span class="ruby-identifier">:css</span>, <span class="ruby-operator">*</span>(<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">options</span>]))
175: <span class="ruby-keyword kw">end</span>
176: 
177: <span class="ruby-identifier">html</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:css</span>][<span class="ruby-identifier">cache_key</span>]
178: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:html_safe</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">html</span>.<span class="ruby-identifier">html_safe</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">html</span>
179: <span class="ruby-keyword kw">end</span></pre>
|
108
152
|
</div>
|
109
153
|
</div>
|
110
|
-
<div class='method public-instance' id='method-
|
111
|
-
<a name='
|
154
|
+
<div class='method public-instance' id='method-M000031'>
|
155
|
+
<a name='M000031'></a>
|
112
156
|
<div class='synopsis'>
|
113
157
|
<span class='name'>include_js</span>
|
114
158
|
<span class='arguments'>(*args)</span>
|
115
159
|
</div>
|
116
160
|
<div class='description'>
|
117
161
|
<p>
|
118
|
-
<tt><a href="AssetHatHelper.html#
|
162
|
+
<tt><a href="AssetHatHelper.html#M000031">include_js</a></tt> is a smart
|
119
163
|
wrapper for Rails’ <tt>javascript_include_tag</tt>. The two can be
|
120
164
|
used together while migrating to <a href="AssetHat.html">AssetHat</a>.
|
121
165
|
</p>
|
122
166
|
<p>
|
123
|
-
Include a single JS file:
|
167
|
+
Include a single, minified JS file:
|
124
168
|
</p>
|
125
169
|
<pre>include_js 'application'
=> <script src="/javascripts/application.min.js" type="text/javascript"></script></pre>
|
126
170
|
<p>
|
127
|
-
Include a single JS
|
171
|
+
Include a single, unminified JS file:
|
128
172
|
</p>
|
129
173
|
<pre>include_js 'application.js'
=> <script src="/javascripts/application.js" type="text/javascript"></script></pre>
|
130
174
|
<p>
|
131
175
|
Include jQuery:
|
132
176
|
</p>
|
133
|
-
<pre># Development/test environment:
include_js :jquery
=> <script src="/javascripts/jquery-VERSION.min.js" ...></script>

# Staging/production environment:
include_js :jquery
=> <script src="http://ajax.googleapis.com/.../jquery.min.js" ...></script>
 # Set jQuery versions either in `config/assets.yml`, or by using
 # `include_js :jquery, :version => '1.
|
177
|
+
<pre># Development/test environment:
include_js :jquery
=> <script src="/javascripts/jquery-VERSION.min.js" ...></script>

# Staging/production environment:
include_js :jquery
=> <script src="http://ajax.googleapis.com/.../jquery.min.js" ...></script>
 # Set jQuery versions either in `config/assets.yml`, or by using
 # `include_js :jquery, :version => '1.6.0'`.</pre>
|
134
178
|
<p>
|
135
179
|
Include a bundle of JS files (i.e., a concatenated set of files; configure
|
136
180
|
in <tt>config/assets.yml</tt>):
|
@@ -144,12 +188,43 @@
|
|
144
188
|
Include multiple JS files separately (not as cool):
|
145
189
|
</p>
|
146
190
|
<pre>include_js 'bloombox', 'jquery.cookie', 'jquery.json.min'
=> <script src="/javascripts/bloombox.min.js" ...></script>
 <script src="/javascripts/jquery.cookie.min.js" ...></script>
 <script src="/javascripts/jquery.json.min.js" ...></script></pre>
|
191
|
+
<p>
|
192
|
+
Get the URL for a single, minified JS file:
|
193
|
+
</p>
|
194
|
+
<pre>include_js 'application', :only_url => true
=> '/javascripts/application.min.js'</pre>
|
195
|
+
<p>
|
196
|
+
Get the URL for a single, unminified JS file:
|
197
|
+
</p>
|
198
|
+
<pre>include_js 'application.js', :only_url => true
=> '/javascripts/application.js', :only_url => true</pre>
|
199
|
+
<p>
|
200
|
+
Get the URL for jQuery:
|
201
|
+
</p>
|
202
|
+
<pre># Development/test environment:
include_js :jquery, :only_url => true
=> '/javascripts/jquery-VERSION.min.js'

# Staging/production environment:
include_js :jquery, :only_url => true
=> 'http://ajax.googleapis.com/.../jquery.min.js'</pre>
|
203
|
+
<p>
|
204
|
+
Get the URL for a bundle of JS files when environment <b>enables</b>
|
205
|
+
caching (e.g., staging, production):
|
206
|
+
</p>
|
207
|
+
<pre>include_js :bundle => 'application', :only_url => true
=> '/javascripts/bundles/application.min.js'</pre>
|
208
|
+
<p>
|
209
|
+
Get URLs for a bundle of JS files when environment <b>disables</b> caching
|
210
|
+
(e.g., development, test):
|
211
|
+
</p>
|
212
|
+
<pre>include_js :bundle => 'application', :only_url => true
=> ['/javascripts/jquery.plugin-foo.js',
 '/javascripts/jquery.plugin-bar.min.js',
 '/javascripts/json2.js',
 ...]</pre>
|
213
|
+
<p>
|
214
|
+
Get URLs for multiple JS files manually:
|
215
|
+
</p>
|
216
|
+
<pre>include_js 'json2', 'application', :only_url => true
=> ['/javascripts/json2.js', '/javascripts/application.js']</pre>
|
217
|
+
<p>
|
218
|
+
Load JS files with <a href="http://labjs.com">LABjs</a> (hosted either from
|
219
|
+
cdnjs or your own web server, if found in <tt>public/javascripts/</tt>):
|
220
|
+
</p>
|
221
|
+
<pre># config/assets.yml:
js:
 vendors:
 lab_js:
 version: 1.x.x

# Usage:
include_js :jquery, :bundle => 'application', :loader => :lab_js
=> <script src="http://ajax.cdnjs.com/.../1.x.x/LAB.min.js" ...></script>
 <script type="text/javascript">
 window.$LABinst=$LAB.
 script('http://ajax.googleapis.com/.../jquery.min.js').wait().
 script('/javascripts/bundles/application.min.js').wait();
 </script>

# For advanced fine-tuning, build the LABjs calls manually (based on
# example from http://labjs.com/documentation.php ):
<script>
 window.$LABinst = $LAB.
 script('<%= include_js 'framework', :only_url => true %>').wait().
 script('<%= include_js 'plugin.framework.js',
 :only_url => true %>').
 script('<%= include_js 'myplugin.framework.js',
 :only_url => true %>').wait().
 script('<%= include_js 'init.js', :only_url => true %>').wait();
</script>

# If you want to execute an inline <script> block that relies on any
# of these dependencies, use the JS variable `window.$LABinst`.
# Example (using jQuery to handle when DOM is ready):
<script>
window.$LABinst(function(){
 console.log('JS dependencies are ready');
 $(function(){
 console.log('DOM is ready');
 });
});
</script></pre>
|
147
222
|
</div>
|
148
223
|
<div class='source'>
|
149
|
-
<a class='source-toggle' href='#' onclick="toggleCode('
|
224
|
+
<a class='source-toggle' href='#' onclick="toggleCode('M000031-source'); return false">
|
150
225
|
[show source]
|
151
226
|
</a>
|
152
|
-
<pre id='M000028-source'> <span class="ruby-comment cmt"># File app/helpers/asset_hat_helper.rb, line 189</span>
189: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include_js</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
190: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">blank?</span>
191: 
192: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span> <span class="ruby-operator">||=</span> {}
193: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>] <span class="ruby-operator">||=</span> {}
194: 
195: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">extract_options!</span>
196: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">symbolize_keys!</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:ssl</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">controller</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">ssl?</span>)
197: <span class="ruby-identifier">cache_key</span> = (<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">options</span>]).<span class="ruby-identifier">inspect</span>
198: 
199: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">cache?</span> <span class="ruby-operator">||</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>].<span class="ruby-identifier">blank?</span>
200: <span class="ruby-comment cmt"># Generate HTML and write to cache</span>
201: 
202: <span class="ruby-identifier">html</span> = []
203: <span class="ruby-identifier">included_vendors</span> = (<span class="ruby-identifier">args</span> <span class="ruby-operator">&</span> <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">VENDORS</span>)
204: <span class="ruby-identifier">included_vendors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vendor</span><span class="ruby-operator">|</span>
205: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">vendor</span>
206: <span class="ruby-identifier">src</span> = <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">Vendors</span>.<span class="ruby-identifier">source_for</span>(
207: <span class="ruby-identifier">vendor</span>, <span class="ruby-identifier">options</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-identifier">:ssl</span>, <span class="ruby-identifier">:version</span>))
208: <span class="ruby-identifier">html</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">include_assets</span>(<span class="ruby-identifier">:js</span>, <span class="ruby-identifier">src</span>, <span class="ruby-identifier">:cache</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>)
209: <span class="ruby-keyword kw">end</span>
210: 
211: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">except!</span> <span class="ruby-identifier">:ssl</span>, <span class="ruby-identifier">:version</span>
212: 
213: <span class="ruby-identifier">html</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">include_assets</span>(<span class="ruby-identifier">:js</span>, <span class="ruby-operator">*</span>(<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">options</span>]))
214: <span class="ruby-identifier">html</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">strip</span>
215: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>] = <span class="ruby-identifier">html</span>
216: <span class="ruby-keyword kw">end</span>
217: 
218: <span class="ruby-identifier">html</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>]
219: <span class="ruby-identifier">html</span>
220: <span class="ruby-keyword kw">end</span></pre>
|
227
|
+
<pre id='M000031-source'> <span class="ruby-comment cmt"># File lib/asset_hat_helper.rb, line 295</span>
295: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include_js</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
296: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">blank?</span>
297: 
298: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span> <span class="ruby-operator">||=</span> {}
299: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>] <span class="ruby-operator">||=</span> {}
300: 
301: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">extract_options!</span>
302: <span class="ruby-identifier">options</span>.<span class="ruby-identifier">symbolize_keys!</span>.<span class="ruby-identifier">reverse_merge!</span>(<span class="ruby-identifier">:ssl</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">controller</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">ssl?</span>)
303: <span class="ruby-identifier">cache_key</span> = (<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">options</span>]).<span class="ruby-identifier">inspect</span>
304: 
305: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">cache?</span> <span class="ruby-operator">||</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>].<span class="ruby-identifier">blank?</span>
306: <span class="ruby-comment cmt"># Generate HTML and write to cache</span>
307: 
308: <span class="ruby-identifier">htmls</span> = []
309: <span class="ruby-identifier">include_assets_options</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">except</span>(<span class="ruby-identifier">:ssl</span>, <span class="ruby-identifier">:version</span>)
310: <span class="ruby-identifier">loader</span> = <span class="ruby-keyword kw">nil</span>
311: 
312: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:loader</span>].<span class="ruby-identifier">present?</span>
313: <span class="ruby-identifier">loader</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">:loader</span>)
314: <span class="ruby-identifier">include_assets_options</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">:only_url</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>)
315: <span class="ruby-keyword kw">end</span>
316: 
317: <span class="ruby-comment cmt"># Get vendor HTML/URLs</span>
318: <span class="ruby-identifier">included_vendors</span> = (<span class="ruby-identifier">args</span> <span class="ruby-operator">&</span> <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">VENDORS</span>)
319: 
320: <span class="ruby-comment cmt"># Add HTML inclusions for vendors</span>
321: <span class="ruby-identifier">included_vendors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vendor</span><span class="ruby-operator">|</span>
322: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">vendor</span>
323: <span class="ruby-identifier">src</span> = <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">Vendors</span>.<span class="ruby-identifier">source_for</span>(
324: <span class="ruby-identifier">vendor</span>, <span class="ruby-identifier">options</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-identifier">:ssl</span>, <span class="ruby-identifier">:version</span>))
325: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">include_assets</span>(<span class="ruby-identifier">:js</span>, <span class="ruby-identifier">src</span>,
326: <span class="ruby-identifier">include_assets_options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">:cache</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span>).
327: <span class="ruby-identifier">except</span>(<span class="ruby-identifier">:bundle</span>, <span class="ruby-identifier">:bundles</span>))
328: <span class="ruby-keyword kw">end</span>
329: 
330: <span class="ruby-comment cmt"># Get non-vendor HTML/URLs</span>
331: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">include_assets</span>(<span class="ruby-identifier">:js</span>, <span class="ruby-operator">*</span>(<span class="ruby-identifier">args</span> <span class="ruby-operator">+</span> [<span class="ruby-identifier">include_assets_options</span>]))
332: <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">reject!</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">:blank?</span>)
333: 
334: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loader</span>
335: <span class="ruby-comment cmt"># `htmls` actually contains URLs; convert to an HTML/JS block</span>
336: <span class="ruby-identifier">urls</span> = <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">flatten</span>
337: <span class="ruby-identifier">htmls</span> = []
338: 
339: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">loader</span>
340: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:lab_js</span>
341: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">include_js</span>(<span class="ruby-identifier">:lab_js</span>)
342: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'<script type="text/javascript">'</span>
343: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">AssetHat</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span><span class="ruby-operator">::</span><span class="ruby-constant">Vendors</span>.<span class="ruby-identifier">loader_js</span>(<span class="ruby-identifier">:lab_js</span>, <span class="ruby-identifier">:urls</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">urls</span>)
344: <span class="ruby-identifier">htmls</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'</script>'</span>
345: <span class="ruby-keyword kw">end</span>
346: <span class="ruby-keyword kw">end</span>
347: 
348: <span class="ruby-comment cmt"># Convert to a URL (string), array of URLs, or one long HTML string</span>
349: <span class="ruby-identifier">html</span> = <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:only_url</span>]
350: <span class="ruby-comment cmt"># Return one URL (string) or multiple (array of strings).</span>
351: <span class="ruby-comment cmt"># Not actually HTML.</span>
352: <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">flatten!</span>
353: <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">htmls</span>
354: <span class="ruby-keyword kw">else</span>
355: <span class="ruby-comment cmt"># Return one long string of HTML</span>
356: <span class="ruby-identifier">htmls</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">strip</span>
357: <span class="ruby-keyword kw">end</span>
358: <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>] = <span class="ruby-identifier">html</span>
359: <span class="ruby-keyword kw">end</span>
360: 
361: <span class="ruby-identifier">html</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">AssetHat</span>.<span class="ruby-identifier">html_cache</span>[<span class="ruby-identifier">:js</span>][<span class="ruby-identifier">cache_key</span>]
362: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:html_safe</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">html</span>.<span class="ruby-identifier">html_safe</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">html</span>
363: <span class="ruby-keyword kw">end</span></pre>
|
153
228
|
</div>
|
154
229
|
</div>
|
155
230
|
</div>
|
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Fri, 06 May 2011 12:24:38 -0400
|
data/doc/files/HISTORY.html
CHANGED
@@ -31,13 +31,31 @@
|
|
31
31
|
</div>
|
32
32
|
<div class='last-update'>
|
33
33
|
Last Update:
|
34
|
-
<span class='datetime'>
|
34
|
+
<span class='datetime'>Fri May 06 12:23:46 -0400 2011</span>
|
35
35
|
</div>
|
36
36
|
</div>
|
37
37
|
<div id='content'>
|
38
38
|
<div id='text'>
|
39
39
|
<div id='description'>
|
40
40
|
<h1><a href="HISTORY.html">HISTORY</a></h1>
|
41
|
+
<h2>Version 0.4.0 (2011-05-06)</h2>
|
42
|
+
<ul>
|
43
|
+
<li>FEATURE: Added Rails 3 support.
|
44
|
+
|
45
|
+
</li>
|
46
|
+
<li>FEATURE: Added support for loading JavaScript files via LABjs: `<%=
|
47
|
+
include_js :jquery, :bundles => %[plugins app], :loader => :lab_js %>`.
|
48
|
+
(Provides only basic LABjs support. To build custom JS logic, use the new
|
49
|
+
`:only_url` option.)
|
50
|
+
|
51
|
+
</li>
|
52
|
+
<li>FEATURE: Added support for getting asset URLs, e.g.: `<%= include_css
|
53
|
+
‘foo’, :bundle => ‘bar’, :only_url => true %>`,
|
54
|
+
`<%= include_js :jquery, ‘foo’, :bundle => ‘bar’,
|
55
|
+
:only_url => true %>`.
|
56
|
+
|
57
|
+
</li>
|
58
|
+
</ul>
|
41
59
|
<h2>Version 0.3.1 (2011-04-02)</h2>
|
42
60
|
<ul>
|
43
61
|
<li>IMPROVEMENT: Added tolerance for `.css` and `.js` extensions in assets.yml,
|
@@ -153,7 +171,7 @@
|
|
153
171
|
<h2>Version 0.1.2 (2010-01-27)</h2>
|
154
172
|
<ul>
|
155
173
|
<li>IMPROVEMENT: Memoized HTML output from `include_css` and `include_js` when
|
156
|
-
`<a href="../classes/AssetHat.html#
|
174
|
+
`<a href="../classes/AssetHat.html#M000011">AssetHat.cache?</a>` is true.
|
157
175
|
|
158
176
|
</li>
|
159
177
|
</ul>
|
data/doc/files/LICENSE.html
CHANGED
data/doc/files/README_rdoc.html
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
</div>
|
32
32
|
<div class='last-update'>
|
33
33
|
Last Update:
|
34
|
-
<span class='datetime'>
|
34
|
+
<span class='datetime'>Sun Apr 24 13:42:43 -0400 2011</span>
|
35
35
|
</div>
|
36
36
|
</div>
|
37
37
|
<div id='content'>
|
@@ -44,16 +44,18 @@
|
|
44
44
|
<p>
|
45
45
|
With Rails’ default asset caching, CSS and JS are concatenated (not
|
46
46
|
even minified) at runtime when that bundle is first requested. Not good
|
47
|
-
enough.
|
47
|
+
enough. To make your pages load faster, <a
|
48
|
+
href="../classes/AssetHat.html">AssetHat</a> can automatically:
|
48
49
|
</p>
|
49
50
|
<ul>
|
50
|
-
<li>Easily <b>minify</b> and <b>bundle</b> CSS and JS
|
51
|
-
|
51
|
+
<li>Easily <b>minify</b> and <b>bundle</b> CSS and JS to reduce file sizes and
|
52
|
+
HTTP requests. Do this on deploy, and avoid any performance hit at runtime.
|
52
53
|
|
53
54
|
</li>
|
54
|
-
<li>Load popular <b>third-party JS</b> (like jQuery and
|
55
|
+
<li>Load popular <b>third-party JS</b> (like jQuery, YUI, and Ext JS) from <a
|
55
56
|
href="http://code.google.com/apis/ajaxlibs/">Google's CDN</a> when in
|
56
|
-
production, or from localhost in development.
|
57
|
+
production, or from localhost in development. It’s as simple as
|
58
|
+
<tt><%= include_js :jquery %></tt> to load straight from Google.
|
57
59
|
|
58
60
|
</li>
|
59
61
|
<li>Force image URLs in your CSS to use <b>CDN subdomains</b> (including SSL
|
@@ -71,11 +73,18 @@
|
|
71
73
|
</p>
|
72
74
|
<pre><%= include_css :bundle => 'application' %>
<%= include_js :jquery, :bundles => ['plugins', 'common'] %></pre>
|
73
75
|
<p>
|
74
|
-
Which
|
76
|
+
Which expands into:
|
75
77
|
</p>
|
76
78
|
<pre><link href="/stylesheets/bundles/application.min.css"
 media="screen,projection" rel="stylesheet" type="text/css" />
<script src="/javascripts/jquery-1.x.x.min.js"
 type="text/javascript"></script>
 <!-- In production, jQuery loads from Google's CDN instead. -->
<script src="/javascripts/bundles/plugins.min.js"
 type="text/javascript"></script>
<script src="/javascripts/bundles/common.min.js"
 type="text/javascript"></script></pre>
|
77
79
|
<p>
|
78
|
-
|
80
|
+
Don’t have your own copy of jQuery? <a
|
81
|
+
href="../classes/AssetHat.html">AssetHat</a> detects this and loads jQuery
|
82
|
+
from Google’s CDN instead, whether you’re in development or
|
83
|
+
production.
|
84
|
+
</p>
|
85
|
+
<p>
|
86
|
+
Add this to your deploy script, and your CSS/JS will be optimized
|
87
|
+
automatically:
|
79
88
|
</p>
|
80
89
|
<pre>rake asset_hat:minify</pre>
|
81
90
|
<p>
|
@@ -88,12 +97,26 @@
|
|
88
97
|
history</a>.
|
89
98
|
</p>
|
90
99
|
<h2>Installation</h2>
|
100
|
+
<ul>
|
101
|
+
<li>Rails 3.x:
|
102
|
+
|
91
103
|
<ol>
|
92
|
-
<li>
|
104
|
+
<li>Add to your app’s Gemfile: <tt>gem 'asset_hat', '0.x.x'</tt>
|
105
|
+
|
106
|
+
</li>
|
107
|
+
<li>Command-line: <tt>bundle install</tt>
|
108
|
+
|
109
|
+
</li>
|
110
|
+
</ol>
|
111
|
+
</li>
|
112
|
+
<li>Rails 2.3.x:
|
113
|
+
|
114
|
+
<ol>
|
115
|
+
<li>Add the gem:
|
93
116
|
|
94
117
|
<ul>
|
95
|
-
<li>If you’re using
|
96
|
-
|
118
|
+
<li>If you’re using <a href="http://github.com/carlhuda/bundler">Bundler
|
119
|
+
0.9+</a>:
|
97
120
|
|
98
121
|
<ol>
|
99
122
|
<li>Add to your app’s Gemfile: <tt>gem 'asset_hat', '0.x.x'</tt>
|
@@ -104,7 +127,7 @@
|
|
104
127
|
</li>
|
105
128
|
</ol>
|
106
129
|
</li>
|
107
|
-
<li>If you’re using Rails 2.x’s <tt>config.gem</tt>:
|
130
|
+
<li>If you’re using Rails 2.3.x’s <tt>config.gem</tt>:
|
108
131
|
|
109
132
|
<ol>
|
110
133
|
<li>Add to your app’s <tt>config/environment.rb</tt>: <tt>config.gem
|
@@ -122,8 +145,16 @@
|
|
122
145
|
|
123
146
|
</li>
|
124
147
|
</ol>
|
125
|
-
|
148
|
+
</li>
|
149
|
+
</ul>
|
150
|
+
<h2>Quick start & configuration</h2>
|
126
151
|
<ol>
|
152
|
+
<li>In all of your layouts and views, change <tt>stylesheet_link_tag</tt> to
|
153
|
+
<tt>include_css</tt>, and change <tt>javascript_include_tag</tt> to
|
154
|
+
<tt>include_js</tt>. (Don’t worry, these helpers use the same
|
155
|
+
arguments as Rails’ helpers. Nothing will break.)
|
156
|
+
|
157
|
+
</li>
|
127
158
|
<li>Create the default config file:
|
128
159
|
|
129
160
|
<pre>rake asset_hat:config</pre>
|
@@ -132,7 +163,16 @@
|
|
132
163
|
your CSS/JS bundles according to that file’s example.
|
133
164
|
|
134
165
|
</li>
|
135
|
-
<li>
|
166
|
+
<li>In your layouts and views, switch to the new bundles. For example, if you
|
167
|
+
originally had this:
|
168
|
+
|
169
|
+
<pre><%# app/views/layouts/application.html.erb: %>
<%= stylesheet_include_tag 'reset', 'application' %></pre>
|
170
|
+
<p>
|
171
|
+
Then you’ll now have:
|
172
|
+
</p>
|
173
|
+
<pre># config/assets.yml:
css:
 bundles:
 application: ['reset', 'application']

<%# app/views/layouts/application.html.erb: %>
<%= include_css :bundle => 'application' %></pre>
|
174
|
+
</li>
|
175
|
+
<li>Add this to your deployment script:
|
136
176
|
|
137
177
|
<pre>rake asset_hat:minify</pre>
|
138
178
|
<p>
|
@@ -141,15 +181,11 @@
|
|
141
181
|
and cache-busting commit IDs to image URLs in your CSS.
|
142
182
|
</p>
|
143
183
|
<p>
|
144
|
-
|
145
|
-
|
146
|
-
|
184
|
+
Any previously minified bundles are overwritten; your original CSS/JS files
|
185
|
+
remain untouched. Bundles are created as new files in
|
186
|
+
<tt>public/stylesheets/bundles/</tt> and
|
187
|
+
<tt>public/javascripts/bundles/</tt>.
|
147
188
|
</p>
|
148
|
-
</li>
|
149
|
-
<li>Set your deployment script to run <tt>rake asset_hat:minify</tt> after
|
150
|
-
deploying your latest CSS/JS. This overwrites previously minified bundles,
|
151
|
-
and leaves your original CSS/JS files untouched.
|
152
|
-
|
153
189
|
</li>
|
154
190
|
</ol>
|
155
191
|
<h3>Advanced configuration</h3>
|
@@ -157,7 +193,13 @@
|
|
157
193
|
If you manage deployments with <a
|
158
194
|
href="http://www.capify.org/">Capistrano</a>, see the gem’s packaged
|
159
195
|
example at <tt><a
|
160
|
-
href="lib/asset_hat/
|
196
|
+
href="https://github.com/mintdigital/asset_hat/blob/master/lib/asset_hat/capistrano.rb">lib/asset_hat/capistrano.rb</a></tt>.
|
197
|
+
</p>
|
198
|
+
<p>
|
199
|
+
If your stack uses <a href="http://unicorn.bogomips.org/">Unicorn</a>,
|
200
|
+
you’ll want to configure it so that assets’ commit IDs are
|
201
|
+
precached only once. See the gem’s packaged example at <tt><a
|
202
|
+
href="https://github.com/mintdigital/asset_hat/blob/master/lib/asset_hat/unicorn.rb">lib/asset_hat/unicorn.rb</a></tt>.
|
161
203
|
</p>
|
162
204
|
<p>
|
163
205
|
If you want shorter output during deployments, you can use `rake
|
@@ -185,13 +227,13 @@
|
|
185
227
|
or other external source. The following example configures jQuery and
|
186
228
|
jQuery UI for use throughout the app:
|
187
229
|
|
188
|
-
<pre>js:
 vendors:
 jquery:
 version: 1.
|
230
|
+
<pre>js:
 vendors:
 jquery:
 version: 1.5.2
 jquery_ui:
 version: 1.8.12
 remote_url: http://cdn.example.com/js/jquery-ui-1.8.12.min.js
 remote_ssl_url: https://cdn-ssl.example.com/js/jquery-ui-1.8.12.min.js</pre>
|
189
231
|
<p>
|
190
232
|
Configuration keys per vendor:
|
191
233
|
</p>
|
192
234
|
<ul>
|
193
235
|
<li><tt>version</tt>: Sets the default version across the app. In the example
|
194
|
-
above, <tt><%= include_js :jquery %></tt> uses version 1.
|
236
|
+
above, <tt><%= include_js :jquery %></tt> uses version 1.5.2 by
|
195
237
|
default. You can override this for special layouts/views with <tt><%=
|
196
238
|
include_js :jquery, :version => '1.3.2' %></tt>.
|
197
239
|
|
@@ -277,14 +319,28 @@
|
|
277
319
|
When including multiple bundles at once, this yields one
|
278
320
|
<tt><link></tt> or <tt><script></tt> element per bundle.
|
279
321
|
</p>
|
322
|
+
<h3>Bundle tips</h3>
|
280
323
|
<p>
|
281
|
-
|
282
|
-
from application code (frequently changed). If all code is in one huge
|
283
|
-
bundle, then whenever there’s a change, browsers have to re-download
|
284
|
-
the whole bundle. By using multiple bundles based on update frequency,
|
285
|
-
browsers cache the rarely updated code, and only re-download the frequently
|
286
|
-
updated code.
|
324
|
+
Don’t go overboard with huge bundles:
|
287
325
|
</p>
|
326
|
+
<ul>
|
327
|
+
<li>Mobile browsers may not cache CSS/JS files that are too large, regardless
|
328
|
+
of gzipping. Check the latest specs for each mobile browser you support.
|
329
|
+
|
330
|
+
</li>
|
331
|
+
<li>You might want to put plugins (rarely changed) in one bundle, and
|
332
|
+
application code (frequently changed) in another bundle. This way, when the
|
333
|
+
app code changes, the browser re-downloads only the new app code, and uses
|
334
|
+
the cached plugin code.
|
335
|
+
|
336
|
+
</li>
|
337
|
+
<li>Regardless of code-change frequency, it’s sometimes faster to split a
|
338
|
+
bundle in half, and load each half in parallel (i.e., two HTTP requests
|
339
|
+
instead of one). Your own tests will tell what’s optimal for your
|
340
|
+
situation.
|
341
|
+
|
342
|
+
</li>
|
343
|
+
</ul>
|
288
344
|
<h2><a href="http://www.youtube.com/watch?v=V30tyaXv6EI">What is best in AssetHat?</a></h2>
|
289
345
|
<ul>
|
290
346
|
<li>To crush your assets;
|