Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: docs/optimizing_web_uis.md

Issue 2647203002: Make vulcanize.md more generic and remove specifics about node modules (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | docs/vulcanize.md » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Optimizing Chrome Web UIs
2
3 ## How do I do it?
4
5 In order to build with a fast configuration, try setting these options in your
6 GN args:
7
8 ```
9 use_vulcanize = true
10 is_debug = false
11 ```
12
13 If you make local changes, you likely need to re-run:
14
15 ```
16 $ chrome/browser/resources/vulcanize.py
17 ```
18
19 And rebuild Chrome to see effects. vulcanize.py will result in local changes to
20 *crisper* and *vulcanized* files that you must currently check in.
21
22 *NOTE: This is likely to change soon to be more tightly integrated with GN /
dpapad 2017/01/23 19:20:53 Perhaps add a link to https://bugs.chromium.org/p/
Dan Beam 2017/01/24 01:50:24 Done.
23 Chrome's build.*
24
25 ## How is the code optimized?
26
27 ### Resource combination
28
29 [HTML imports](https://www.html5rocks.com/en/tutorials/webcomponents/imports/)
30 are a swell technology, but can be used is slow ways. Each import may also
31 contain additional imports, which must be satisfied before certain things can
32 continue (i.e. script execution may be paused).
33
34 ```html
35 <!-- If a.html contains more imports... -->
36 <link rel="import" href="a.html">
37 <!-- This script is blocked until done. -->
38 <script> startThePageUp(); </script>
39 ```
40
41 To reduce this latency, Chrome uses a tool created by the Polymer project named
42 [vulcanize](https://github.com/Polymer/vulcanize). It processes a page starting
dpapad 2017/01/23 19:20:53 This URL just redirects to polymer-bundler repo. P
Dan Beam 2017/01/24 01:50:24 Done.
43 from a URL entry point and inlines resources the first time they're encountered.
44 This greatly decreases latency due to HTML imports.
45
46 ```html
47 <!-- Contents of a.html and all its dependencies. -->
48 <script> startThePageUp(); </script>
49 ```
50
51 ### CSS @apply to --var transformation
52
53 We also use
54 [polymer-css-build](https://github.com/PolymerLabs/polymer-css-build) to
55 transform CSS @apply mixins (which are not yet natively supported) into faster
56 --css-variables. This turns something like this:
57
58 ```css
59 :host {
60 --mixin-name: {
61 color: red;
62 display: block;
63 };
64 }
65 /* In a different place */
66 .red-thing {
67 @apply(--mixin-name);
68 }
69 ```
70
71 into the more performant:
72
73 ```css
74 :host {
75 --mixin-name_-_color: red;
76 --mixin-name_-_display: block;
77 }
78 /* In a different place */
79 .red-thing {
80 color: var(--mixin-name_-_color);
81 display: var(--mixin-name_-_display);
82 }
83 ```
84
85 ### JavaScript Minification
86
87 In order to minimize disk size, we run
88 [uglifyjs](https://github.com/mishoo/UglifyJS2) on all combined JavaScript. This
89 reduces installer and the size of resources required to load to show a UI.
90
91 Code like this:
92
93 ```js
94 function fizzBuzz() {
95 for (var i = 1; i <= 100; i++) {
96 var fizz = i % 3 == 0 ? 'fizz' : '';
97 var buzz = i % 5 == 0 ? 'buzz' : '';
98 console.log(fizz + buzz || i);
99 }
100 }
101 fizzBuzz();
102 ```
103
104 would be minified to:
105
106 ```js
107 function fizzBuzz(){for(var z=1;100>=z;z++){var f=z%3==0?"fizz":"",o=z%5==0?"buz z":"";console.log(f+o||z)}}fizzBuzz();
108 ```
109
110 If you'd like to more easily debug minified code, click the "{}" prettify button
111 in Chrome's developer tools, which will beautify the code and allow setting
112 breakpoints on the un-minified version.
113
114 ### Gzip compression of web resources
115
116 In certain cases, it might be preferable to leave web resources compressed on
117 disk and inflate them when needed (i.e. when a user wants to see a page).
118
119 In this case, you can run `gzip --rsyncable` on a resource before it's put into
120 a .pak file via GRIT with this syntax:
121
122 ```xml
123 <include name="IDR_MY_PAGE" file="my/page.html" type="BINDATA" compress="gzip" / >
124 ```
125
126 Gzip is currently set up to apply to a whole WebUI's data source, though it's
127 possible to exclude specific paths for things like dynamically generated content
128 (i.e. many pages load translations dynamically from a path named "strings.js").
129
130 To mark a WebUI's resources compressed, you'll need to do something like:
131
132 ```c++
133 WebUIDataSource* data_source = WebUIDataSource::Create(...);
134 data_source->SetDefaultResource(IDR_MY_PAGE);
135 std::unordered_set<std::string> exclusions;
136 exclusions.insert("strings.js"); // if required
137 data_source->UseGzip(exclusions);
138 ```
OLDNEW
« no previous file with comments | « no previous file | docs/vulcanize.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698