Files
iptvnator/apps/electron-backend/project.json
4grayandClaude Fable 5.1 e39c854a41 perf(electron): load the main-process startup wiring after the window starts loading (#1702)
Registering IPC handlers costs 0.4 ms; evaluating the modules behind them (axios, drizzle-orm, better-sqlite3, electron-updater, fix-path) before the window could load was the real cost. main.ts now keeps only the pre-paint wiring and loads the rest as the deferred-events.js chunk inside the main window's did-start-loading listener, where the import and its registrations complete before any renderer invoke can arrive.

Interleaved A/B on the performance build: app.whenReady 323 -> 265 ms, did-finish-load 499 -> 447 ms; J1 journey spawnToDidFinishLoad ~405 -> ~365 ms with identical counters. Packaging ships the chunk explicitly, verify:package-layout requires it, and the benchmark build identity hashes it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-26 21:51:19 +02:00

293 lines
12 KiB
JSON

{
"name": "electron-backend",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "apps/electron-backend/src",
"projectType": "application",
"tags": ["scope:electron", "domain:electron-main", "type:app"],
"targets": {
"build-worker": {
"executor": "nx:run-commands",
"outputs": ["{workspaceRoot}/dist/apps/electron-backend/workers"],
"options": {
"command": "node apps/electron-backend/build-worker.js"
}
},
"build-worker-performance": {
"executor": "nx:run-commands",
"outputs": ["{workspaceRoot}/dist/apps/electron-backend/workers"],
"options": {
"command": "node apps/electron-backend/build-worker.js --performance"
}
},
"build-embedded-mpv": {
"executor": "nx:run-commands",
"cache": false,
"outputs": [
"{workspaceRoot}/apps/electron-backend/native/build/Release"
],
"options": {
"command": "node apps/electron-backend/build-embedded-mpv.js"
}
},
"build": {
"dependsOn": [
"electron-backend:build-worker",
"electron-backend:build-embedded-mpv",
{
"projects": ["web", "remote-control-web"],
"target": "build"
}
],
"executor": "nx-electron:build",
"outputs": ["{options.outputPath}"],
"inputs": [
"production",
"^production",
"{workspaceRoot}/apps/electron-backend/native/build/Release/**",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts"
],
"options": {
"outputPath": "dist/apps/electron-backend",
"main": "apps/electron-backend/src/main.entry.ts",
"additionalEntryPoints": [
{
"entryName": "main.app",
"entryPath": "apps/electron-backend/src/main.ts"
}
],
"tsConfig": "apps/electron-backend/tsconfig.app.json",
"webpackConfig": "apps/electron-backend/webpack.config.cjs",
"assets": [
"apps/electron-backend/src/assets",
{
"glob": "**/*",
"input": "apps/electron-backend/native/build/Release",
"output": "native",
"ignore": [
".deps/**",
"obj.target/**",
"**/.deps/**",
"**/obj.target/**",
"obj/**",
"**/obj/**",
"**/*.pdb",
"**/*.iobj",
"**/*.ipdb",
"**/*.ilk",
"**/*.exp",
"**/*.lib",
"**/*.dll.a"
]
}
]
},
"configurations": {
"production": {
"optimization": true,
"extractLicenses": true,
"inspect": false,
"fileReplacements": [
{
"replace": "apps/electron-backend/src/environments/environment.ts",
"with": "apps/electron-backend/src/environments/environment.prod.ts"
}
]
},
"electron-performance": {
"optimization": true,
"extractLicenses": true,
"inspect": false,
"sourceMap": true,
"fileReplacements": [
{
"replace": "apps/electron-backend/src/environments/environment.ts",
"with": "apps/electron-backend/src/environments/environment.prod.ts"
}
]
}
}
},
"build-performance": {
"dependsOn": [
"electron-backend:build-worker-performance",
"electron-backend:build-embedded-mpv",
{
"projects": ["web", "remote-control-web"],
"target": "build-performance"
}
],
"executor": "nx:run-commands",
"options": {
"command": "pnpm nx run electron-backend:build:electron-performance --excludeTaskDependencies"
}
},
"build-e2e": {
"dependsOn": [
"electron-backend:build-worker",
"electron-backend:build-embedded-mpv",
{
"projects": ["web"],
"target": "build-e2e"
},
{
"projects": ["remote-control-web"],
"target": "build-e2e"
}
],
"executor": "nx-electron:build",
"outputs": ["{options.outputPath}"],
"inputs": [
"production",
"^production",
"{workspaceRoot}/apps/electron-backend/native/build/Release/**",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts"
],
"options": {
"outputPath": "dist/apps/electron-backend",
"main": "apps/electron-backend/src/main.entry.ts",
"additionalEntryPoints": [
{
"entryName": "main.app",
"entryPath": "apps/electron-backend/src/main.ts"
}
],
"tsConfig": "apps/electron-backend/tsconfig.app.json",
"webpackConfig": "apps/electron-backend/webpack.config.cjs",
"assets": [
"apps/electron-backend/src/assets",
{
"glob": "**/*",
"input": "apps/electron-backend/native/build/Release",
"output": "native",
"ignore": [
".deps/**",
"obj.target/**",
"**/.deps/**",
"**/obj.target/**",
"obj/**",
"**/obj/**",
"**/*.pdb",
"**/*.iobj",
"**/*.ipdb",
"**/*.ilk",
"**/*.exp",
"**/*.lib",
"**/*.dll.a"
]
}
]
}
},
"serve": {
"executor": "nx:run-commands",
"options": {
"command": "nx run electron-backend:serve-electron"
}
},
"serve-electron": {
"dependsOn": [
"electron-backend:build-worker",
"electron-backend:build-embedded-mpv"
],
"executor": "nx-electron:execute",
"options": {
"buildTarget": "electron-backend:build",
"waitUntilTargets": ["web:serve"],
"remoteDebuggingPort": 9222
}
},
"package": {
"dependsOn": [
"electron-backend:build",
"electron-backend:generate-builder-metadata"
],
"executor": "nx-electron:package",
"options": {
"name": "electron-backend",
"frontendProject": "web",
"files": [
{
"from": "electron-backend",
"to": "electron-backend",
"filter": ["main.app.js", "deferred-events.js"]
}
],
"sourcePath": "dist/apps",
"outputPath": "dist/packages",
"prepackageOnly": true
}
},
"make": {
"dependsOn": [
"electron-backend:build",
"electron-backend:generate-builder-metadata"
],
"executor": "nx-electron:make",
"options": {
"name": "electron-backend",
"frontendProject": "web",
"files": [
{
"from": "electron-backend",
"to": "electron-backend",
"filter": ["main.app.js", "deferred-events.js"]
}
],
"sourcePath": "dist/apps",
"outputPath": "dist/executables"
}
},
"generate-builder-metadata": {
"dependsOn": ["electron-backend:build"],
"executor": "nx:run-commands",
"cache": true,
"inputs": [
"{workspaceRoot}/package.json",
"{workspaceRoot}/electron-builder.json",
"{workspaceRoot}/tools/packaging/generate-electron-builder-metadata.mjs"
],
"outputs": [
"{workspaceRoot}/apps/electron-backend/src/app/options/electron-builder.metadata.generated.json",
"{workspaceRoot}/dist/apps/electron-backend/package.json"
],
"options": {
"command": "node tools/packaging/generate-electron-builder-metadata.mjs",
"cwd": "{workspaceRoot}"
}
},
"lint": {
"inputs": [
"default",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts"
],
"command": "eslint \"apps/electron-backend/**/*.ts\" \"apps/electron-backend/src/app/services/embedded-mpv-frame-copy-runtime.ts\" \"apps/electron-backend/src/app/services/embedded-mpv-frame-copy-runtime/**/*.ts\""
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"inputs": [
"default",
"^production",
"{workspaceRoot}/jest.preset.js",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts"
],
"options": {
"jestConfig": "apps/electron-backend/jest.config.ts"
}
}
},
"tags": ["scope:electron", "domain:electron-main", "type:app"]
}