React inlining: Refactor to reduce parsing cost
- Have the `jsx` helper do the `defaultProps` work instead of calling `defaultProps` inline. - Put `key` after `props` and make it optional. - Inline `children` as rest args instead of in the object. - Rename `createRawReactElement` to `jsx`. I wish I was kidding. Most of these are silly microoptimizations. In my test file (based off an internal RN app), this reduces the parsing overhead of inlining from around 1% to 0.1% in JSC and from 0.6% to 0.0% in V8 (compared to element inlining before this commit). Once parsed, the initial render with inlining is the same speed as not inlining in JSC and ~1% slower in V8. A second initial render in the same context (reusing the function objects, JIT, etc) is 2.0% faster in JSC and 5.5% faster in V8.
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
babelHelpers.createRawReactElement("div", null, {
|
||||
children: "foo",
|
||||
children: "bar"
|
||||
});
|
||||
babelHelpers.jsx("div", {
|
||||
children: "foo"
|
||||
}, void 0, "bar");
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Baz, null, babelHelpers.defaultProps(Baz.defaultProps, {
|
||||
babelHelpers.jsx(Baz, {
|
||||
foo: "bar"
|
||||
}));
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
babelHelpers.createRawReactElement(Baz, null, Baz.defaultProps || {});
|
||||
babelHelpers.jsx(Baz, {});
|
||||
@@ -1,6 +1,6 @@
|
||||
var TestComponent = React.createClass({
|
||||
render: function () {
|
||||
return babelHelpers.createRawReactElement("span", null, {
|
||||
return babelHelpers.jsx("span", {
|
||||
className: this.props.someProp
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement("foo", null, {
|
||||
babelHelpers.jsx("foo", {
|
||||
bar: "foo"
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
babelHelpers.createRawReactElement("foo", null, {});
|
||||
babelHelpers.jsx("foo", {});
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Foo, "foo" + "baz", babelHelpers.defaultProps(Foo.defaultProps, {
|
||||
babelHelpers.jsx(Foo, {
|
||||
"data-value": "bar"
|
||||
}));
|
||||
}, "foo" + "baz");
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Foo, "foo", babelHelpers.defaultProps(Foo.defaultProps, {
|
||||
babelHelpers.jsx(Foo, {
|
||||
"data-value": "bar"
|
||||
}));
|
||||
}, "foo");
|
||||
@@ -1 +1 @@
|
||||
babelHelpers.createRawReactElement(Baz, null, Baz.defaultProps || {});
|
||||
babelHelpers.jsx(Baz, {}, void 0);
|
||||
@@ -1,4 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Foo, null, babelHelpers.defaultProps(Foo.defaultProps, {
|
||||
className: "foo",
|
||||
children: [bar, babelHelpers.createRawReactElement(Baz, "baz", Baz.defaultProps || {})]
|
||||
}));
|
||||
babelHelpers.jsx(Foo, {
|
||||
className: "foo"
|
||||
}, void 0, bar, babelHelpers.jsx(Baz, {}, "baz"));
|
||||
@@ -1,4 +1,3 @@
|
||||
babelHelpers.createRawReactElement("div", null, {
|
||||
className: "foo",
|
||||
children: bar
|
||||
});
|
||||
babelHelpers.jsx("div", {
|
||||
className: "foo"
|
||||
}, void 0, bar);
|
||||
@@ -1,4 +1,3 @@
|
||||
babelHelpers.createRawReactElement("div", null, {
|
||||
className: "foo",
|
||||
children: [bar, babelHelpers.createRawReactElement(Baz, "baz", Baz.defaultProps || {})]
|
||||
});
|
||||
babelHelpers.jsx("div", {
|
||||
className: "foo"
|
||||
}, void 0, bar, babelHelpers.jsx(Baz, {}, "baz"));
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Baz, null, babelHelpers.defaultProps(Baz.defaultProps, {
|
||||
babelHelpers.jsx(Baz, {
|
||||
foo: "bar"
|
||||
}));
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
babelHelpers.createRawReactElement(Baz, null, Baz.defaultProps || {});
|
||||
babelHelpers.jsx(Baz, {});
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement("foo", null, {
|
||||
babelHelpers.jsx("foo", {
|
||||
bar: "foo"
|
||||
});
|
||||
@@ -1 +1 @@
|
||||
babelHelpers.createRawReactElement("foo", null, {});
|
||||
babelHelpers.jsx("foo", {});
|
||||
@@ -1,3 +1,3 @@
|
||||
babelHelpers.createRawReactElement(Foo, null, babelHelpers.defaultProps(Foo.defaultProps, {
|
||||
babelHelpers.jsx(Foo, {
|
||||
bar: true
|
||||
}));
|
||||
});
|
||||
Reference in New Issue
Block a user