asset_hat 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|