From 0e7d7e0a2fa81765a97fcc58f861ee4396e36f2b Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 11 Aug 2026 14:51:18 +0200 Subject: [PATCH] perf: simplify widget optimizations --- .gitignore | 15 +--------- .../widget-sortable-item-list-input.tsx | 28 ++++++++----------- packages/widgets/src/bookmarks/index.tsx | 4 +-- packages/widgets/src/options.ts | 3 +- patches/docker-modem@5.0.7.patch | 27 ------------------ pnpm-lock.yaml | 7 ++--- pnpm-workspace.yaml | 1 - 7 files changed, 18 insertions(+), 67 deletions(-) delete mode 100644 patches/docker-modem@5.0.7.patch diff --git a/.gitignore b/.gitignore index d57e18629..35b08d9d4 100644 --- a/.gitignore +++ b/.gitignore @@ -91,17 +91,4 @@ benchmark-results homarr-backup*.zip *.sqlite-wal *.sqlite-shm -scripts/benchmarks/analyze-*.mjs -scripts/benchmarks/attribute-memory.mts -scripts/benchmarks/audit-widget-render.mjs -scripts/benchmarks/build-compare.sh -scripts/benchmarks/compare-stress-runs.mjs -scripts/benchmarks/inspect-container.mts -scripts/benchmarks/measure-*.mjs -scripts/benchmarks/measure-*.mts -scripts/benchmarks/memory-probe.cjs -scripts/benchmarks/probe-fiber-tree.mts -scripts/benchmarks/stress-restore*.mts -scripts/benchmarks/stress-restore*.ts -scripts/benchmarks/verify-context-menu.mts -scripts/benchmarks/verify-react-profiling.mts +/scripts/benchmarks/ diff --git a/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx b/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx index f4f73fd72..6a8c66eaf 100644 --- a/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx +++ b/packages/widgets/src/_inputs/widget-sortable-item-list-input.tsx @@ -16,7 +16,6 @@ import { useSortable, verticalListSortingStrategy, } from "@dnd-kit/sortable"; -import type { ActionIconProps } from "@mantine/core"; import { ActionIcon, Card, Center, Fieldset, Loader, Stack } from "@mantine/core"; import { IconGripHorizontal } from "@tabler/icons-react"; @@ -177,21 +176,6 @@ const Item = ({ id, }); - const Handle = (props: Partial) => { - return ( - - - - ); - }; - return ( ({ item={item} removeItem={removeItem} rootAttributes={attributes} - handle={Handle} + handle={ + + + + } /> ); diff --git a/packages/widgets/src/bookmarks/index.tsx b/packages/widgets/src/bookmarks/index.tsx index 85fc442cf..15a208ce4 100644 --- a/packages/widgets/src/bookmarks/index.tsx +++ b/packages/widgets/src/bookmarks/index.tsx @@ -28,11 +28,11 @@ export const { definition, componentLoader } = createWidgetDefinition("bookmarks openNewTab: factory.switch({ defaultValue: true }), withBorder: factory.switch({ defaultValue: false }), items: factory.sortableItemList({ - ItemComponent: ({ item, handle: Handle, removeItem, rootAttributes }) => { + ItemComponent: ({ item, handle, removeItem, rootAttributes }) => { return ( - + {handle} diff --git a/packages/widgets/src/options.ts b/packages/widgets/src/options.ts index 43428fd4b..ae9e9a787 100644 --- a/packages/widgets/src/options.ts +++ b/packages/widgets/src/options.ts @@ -1,6 +1,5 @@ import type React from "react"; import type { DraggableAttributes, UniqueIdentifier } from "@dnd-kit/core"; -import type { ActionIconProps } from "@mantine/core"; import { z } from "zod/v4"; import type { RefinementCtx, ZodType } from "zod/v4"; @@ -38,7 +37,7 @@ export interface SortableItemListInput void; rootAttributes: DraggableAttributes; - handle: (props: Partial>) => React.ReactNode; + handle: React.ReactNode; }) => React.ReactNode; uniqueIdentifier: (item: TItem) => TOptionValue; useData: (values: TOptionValue[]) => { data: TItem[] | undefined; isLoading: boolean; error: unknown }; diff --git a/patches/docker-modem@5.0.7.patch b/patches/docker-modem@5.0.7.patch deleted file mode 100644 index ab11df6b6..000000000 --- a/patches/docker-modem@5.0.7.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/lib/modem.js b/lib/modem.js -index b45a798d63647d55e0193fd7e82c2e36785d9b5f..d2dbf42969fc0ebf39b30c1a27373c33c2d20333 100644 ---- a/lib/modem.js -+++ b/lib/modem.js -@@ -3,7 +3,6 @@ var querystring = require('querystring'), - fs = require('fs'), - path = require('path'), - url = require('url'), -- ssh = require('./ssh'), - HttpDuplex = require('./http_duplex'), - debug = require('debug')('modem'), - utils = require('./utils'), -@@ -263,8 +262,13 @@ Modem.prototype.buildRequest = function (options, context, data, callback) { - var connectionTimeoutTimer; - var finished = false; - -+ // Loaded here rather than at module scope: './ssh' pulls in ssh2, whose crypto module -+ // instantiates a ~16 MiB WebAssembly memory for ChaCha20-Poly1305 as soon as it is -+ // required. Measured at +14 MiB RSS for a require alone, paid by every Homarr install -+ // even though Docker is reached over a socket and this branch never runs. require() is -+ // cached, so SSH connections pay it once and behave exactly as before. - var opts = self.protocol === 'ssh' ? Object.assign(options, { -- agent: ssh(Object.assign({}, self.sshOptions, { -+ agent: require('./ssh')(Object.assign({}, self.sshOptions, { - 'host': self.host, - 'port': self.port, - 'username': self.username, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dbabba75..87f061f13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -695,7 +695,6 @@ overrides: patchedDependencies: '@types/node-unifi': 5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5 - docker-modem@5.0.7: 6a79e31b826a993dfdfce5e3acc72e5f77816730fe6fb9b3c53c7fcf4570e3ec trpc-to-openapi: 2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c importers: @@ -26481,7 +26480,7 @@ snapshots: dependencies: yaml: 2.9.0 - docker-modem@5.0.7(patch_hash=6a79e31b826a993dfdfce5e3acc72e5f77816730fe6fb9b3c53c7fcf4570e3ec)(supports-color@10.2.2): + docker-modem@5.0.7(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) readable-stream: 3.6.2 @@ -26495,7 +26494,7 @@ snapshots: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.12.5 '@grpc/proto-loader': 0.7.13 - docker-modem: 5.0.7(patch_hash=6a79e31b826a993dfdfce5e3acc72e5f77816730fe6fb9b3c53c7fcf4570e3ec)(supports-color@10.2.2) + docker-modem: 5.0.7(supports-color@10.2.2) protobufjs: 7.4.0 tar-fs: 2.1.4 transitivePeerDependencies: @@ -26506,7 +26505,7 @@ snapshots: '@balena/dockerignore': 1.0.2 '@grpc/grpc-js': 1.12.5 '@grpc/proto-loader': 0.7.13 - docker-modem: 5.0.7(patch_hash=6a79e31b826a993dfdfce5e3acc72e5f77816730fe6fb9b3c53c7fcf4570e3ec)(supports-color@10.2.2) + docker-modem: 5.0.7(supports-color@10.2.2) protobufjs: 7.4.0 tar-fs: 2.1.4 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0628e85dc..fd9fc4539 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -276,7 +276,6 @@ overrides: "vite@>=5.0.0 <=5.4.18": ">=8.1.4" patchedDependencies: "@types/node-unifi": "patches/@types__node-unifi.patch" - docker-modem@5.0.7: patches/docker-modem@5.0.7.patch "trpc-to-openapi": "patches/trpc-to-openapi.patch" allowUnusedPatches: true