ivi
ivi copied to clipboard
Performance issues related to using environment variables
As I see, you access to process.env many-many times as here:
export const EVENT_DISPATCHER_ABORT = (
process.env.IVI_TARGET === "ssr" ? void 0 :
/*#__PURE__*/createNativeEventDispatcher<UIEvent>(NativeEventSourceFlags.Capture, "abort")
);
export const EVENT_DISPATCHER_ACTIVATE = (
process.env.IVI_TARGET === "ssr" ? void 0 :
/*#__PURE__*/createNativeEventDispatcher<UIEvent>(NativeEventSourceFlags.Capture | NativeEventSourceFlags.Bubbles, "activate")
);
// ...
It's not an issue for pre-compiled/pre-bundled client apps. But it can slowdown server-side startup and/or rendering because process.env is not transparent object. I suggest assing values of process.env.NODE_ENV and process.env.IVI_TARGET to internal constants IVI_ENV and IVI_TARGET respectively. It's harmless because JS optimizers can deal with it.
See: https://github.com/facebook/fbjs/pull/86#issuecomment-285204734 https://github.com/facebook/react/issues/812
It's not an issue for pre-compiled/pre-bundled client apps.
Just tried it with the latest webpack+terser, and it is still unable to deal with it and leaves alot of unused functions. Rollup+terser can deal with it.
Maybe precompile commonjs package entry for SSR and production?
Hmm... It seems webpack prevent optimizing constants from imported modules.