I have a bundle management problem, and I want to check with some other experienced people while deciding how to move forward with a solution.
The Problem
Consider the following structure for both an api route, and a page in nextjs.
Project Files
mySpecialTable.js
const table = [];
for (let i=1; i<=10; i++) {
//while table[i] = i+1 in this case, consider it just abstractly
//creating a structure of much more complicated structures, that
//are intended to be assembled at build time, and loaded as a
//static table.
table.push(i);
}
export const numberTable = table;
myImportModule.js
import numberTable from 'mySpecialTable.js'
export const table = numberTable;
route.js
import table from './myImportModule.js'
export function GET({params}) {
//valadate params slug to be a number within range.
const ret = table[params.slug];
return Response.json({ok:true,data:ret});
}
page.js
import Box from '@mui/material/Box'
import table from './myImportModule.js'
export function page() {
return (
<>
{table.map(e,i) => <Box key={i}>{e}</Box>}
</>
);
}
The expected result
I want the route and the page to essentially deliver the exported object statically. I am hoping to eliminate the for loop out of the code, and instead create a static object equivalent to the result, thus eliminating the execution of the for loop. I.E. something like this:
myImportModule.js
export const table = [1,2,3,4,5,6,7,8,9,10];
route.js
import table from './myImportModule.js'
export function GET({params}) {
//valadate params slug to be a number within range.
const ret = table[params.slug];
return Response.json({ok:true,data:ret});
}
page.js
import Box from '@mui/material/Box'
import table from './myImportModule.js'
export function page() {
return (
<>
{table.map(e,i) => <Box key={i}>{e}</Box>}
</>
);
}
Scale this up to my project, and the problem is causing significant slow down in execution of basic pages. Now here’s some thoughts on solutions, but the problem seems too common not to consider that I might be overlooking something obvious.
Possible Solutions
- Configure these pre built components to be assembled separately from nextjs. This would be a big hit on future development because I rely on the quick rebuilding for making tweaks to this entire structure.
- Somehow indicate to Next that particular source files will be dynamically built in the development environment, and statically built when deployed to production.
After that, I’m out of ideas. Are there any sort of code directives, patterns, or best practices to consider when solving this optimization problem?
Thanks a lot,
Chris