optimizeForSSR() — react Function Reference
Architecture documentation for the optimizeForSSR() function in OptimizeForSSR.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 93674d7a_a49c_dadd_0d67_6c5e98450587["optimizeForSSR()"] 1acbc29a_0c93_81f5_ff8e_d4434aae5ed9["OptimizeForSSR.ts"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|defined in| 1acbc29a_0c93_81f5_ff8e_d4434aae5ed9 c3bc3875_256f_8f5e_7800_2f9c5bae65eb["runWithEnvironment()"] c3bc3875_256f_8f5e_7800_2f9c5bae65eb -->|calls| 93674d7a_a49c_dadd_0d67_6c5e98450587 b2fc2985_a7ba_9865_c2a3_2a7531f27d44["eachInstructionValueOperand()"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|calls| b2fc2985_a7ba_9865_c2a3_2a7531f27d44 41232a25_deb6_6e83_05a8_ae9f961656f7["eachTerminalOperand()"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|calls| 41232a25_deb6_6e83_05a8_ae9f961656f7 be7548c2_b2e2_2b04_f6f0_8d2da9219b46["hasKnownNonRenderCall()"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|calls| be7548c2_b2e2_2b04_f6f0_8d2da9219b46 c447b97e_0b8e_b187_e3a8_4be412d6f495["retainWhere()"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|calls| c447b97e_0b8e_b187_e3a8_4be412d6f495 b8cba1e6_800c_20b1_4b82_b8a64c0513a8["isKnownEventHandler()"] 93674d7a_a49c_dadd_0d67_6c5e98450587 -->|calls| b8cba1e6_800c_20b1_4b82_b8a64c0513a8 style 93674d7a_a49c_dadd_0d67_6c5e98450587 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/Optimization/OptimizeForSSR.ts lines 42–243
export function optimizeForSSR(fn: HIRFunction): void {
const inlinedState = new Map<IdentifierId, InstructionValue>();
/**
* First pass identifies useState/useReducer which can be safely inlined. Any use
* of the hook return other than destructuring (with a specific pattern) prevents
* inlining.
*
* Supported cases:
* - `const [state, ] = useState( <primitive-array-or-object> )`
* - `const [state, ] = useReducer(..., <value>)`
* - `const [state, ] = useReducer[..., <value>, <init>]`
*/
for (const block of fn.body.blocks.values()) {
for (const instr of block.instructions) {
const {value} = instr;
switch (value.kind) {
case 'Destructure': {
if (
inlinedState.has(value.value.identifier.id) &&
value.lvalue.pattern.kind === 'ArrayPattern' &&
value.lvalue.pattern.items.length >= 1 &&
value.lvalue.pattern.items[0].kind === 'Identifier'
) {
// Allow destructuring of inlined states
continue;
}
break;
}
case 'MethodCall':
case 'CallExpression': {
const calleee =
value.kind === 'CallExpression' ? value.callee : value.property;
const hookKind = getHookKind(fn.env, calleee.identifier);
switch (hookKind) {
case 'useReducer': {
if (
value.args.length === 2 &&
value.args[1].kind === 'Identifier'
) {
const arg = value.args[1];
const replace: LoadLocal = {
kind: 'LoadLocal',
place: arg,
loc: arg.loc,
};
inlinedState.set(instr.lvalue.identifier.id, replace);
} else if (
value.args.length === 3 &&
value.args[1].kind === 'Identifier' &&
value.args[2].kind === 'Identifier'
) {
const arg = value.args[1];
const initializer = value.args[2];
const replace: CallExpression = {
kind: 'CallExpression',
callee: initializer,
args: [arg],
loc: value.loc,
};
inlinedState.set(instr.lvalue.identifier.id, replace);
}
break;
}
case 'useState': {
if (
value.args.length === 1 &&
value.args[0].kind === 'Identifier'
) {
const arg = value.args[0];
if (
isPrimitiveType(arg.identifier) ||
isPlainObjectType(arg.identifier) ||
isArrayType(arg.identifier)
) {
const replace: LoadLocal = {
kind: 'LoadLocal',
place: arg,
loc: arg.loc,
};
inlinedState.set(instr.lvalue.identifier.id, replace);
}
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does optimizeForSSR() do?
optimizeForSSR() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Optimization/OptimizeForSSR.ts.
Where is optimizeForSSR() defined?
optimizeForSSR() is defined in compiler/packages/babel-plugin-react-compiler/src/Optimization/OptimizeForSSR.ts at line 42.
What does optimizeForSSR() call?
optimizeForSSR() calls 5 function(s): eachInstructionValueOperand, eachTerminalOperand, hasKnownNonRenderCall, isKnownEventHandler, retainWhere.
What calls optimizeForSSR()?
optimizeForSSR() is called by 1 function(s): runWithEnvironment.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free