From e2461d0159ed9014783555458bff76c7ce52adc0 Mon Sep 17 00:00:00 2001 From: yujiteshima Date: Fri, 2 Jan 2026 23:45:11 +0900 Subject: [PATCH] Make PREFETCH_DELAY configurable via Turbo.config.drive.prefetchDelay Allow developers to customize the prefetch delay (default: 100ms) to optimize for different use cases. For example, image galleries with many linked items may benefit from a longer delay to avoid triggering excessive prefetch requests during rapid cursor movement. Usage: Turbo.config.drive.prefetchDelay = 300 // Set to 300ms Fixes #1481 --- src/core/config/drive.js | 1 + src/core/drive/prefetch_cache.js | 10 ++++++---- src/tests/unit/export_tests.js | 13 +++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/core/config/drive.js b/src/core/config/drive.js index e5710d589..25492f927 100644 --- a/src/core/config/drive.js +++ b/src/core/config/drive.js @@ -1,6 +1,7 @@ export const drive = { enabled: true, progressBarDelay: 500, + prefetchDelay: 100, unvisitableExtensions: new Set( [ ".7z", ".aac", ".apk", ".avi", ".bmp", ".bz2", ".css", ".csv", ".deb", ".dmg", ".doc", diff --git a/src/core/drive/prefetch_cache.js b/src/core/drive/prefetch_cache.js index cb29aa238..b3e4aff75 100644 --- a/src/core/drive/prefetch_cache.js +++ b/src/core/drive/prefetch_cache.js @@ -1,15 +1,17 @@ import { LRUCache } from "../lru_cache" import { toCacheKey } from "../url" - -const PREFETCH_DELAY = 100 +import { config } from "../config" class PrefetchCache extends LRUCache { #prefetchTimeout = null #maxAges = {} - constructor(size = 1, prefetchDelay = PREFETCH_DELAY) { + constructor(size = 1) { super(size, toCacheKey) - this.prefetchDelay = prefetchDelay + } + + get prefetchDelay() { + return config.drive.prefetchDelay } putLater(url, request, ttl) { diff --git a/src/tests/unit/export_tests.js b/src/tests/unit/export_tests.js index cb5fcb2ac..88e1f5539 100644 --- a/src/tests/unit/export_tests.js +++ b/src/tests/unit/export_tests.js @@ -44,6 +44,19 @@ test("Session interface", () => { assert.equal("off", config.forms.mode) }) +test("config.drive.prefetchDelay is configurable", () => { + const { config } = Turbo + + assert.equal(100, config.drive.prefetchDelay) + + config.drive.prefetchDelay = 200 + + assert.equal(200, config.drive.prefetchDelay) + + // Reset to default + config.drive.prefetchDelay = 100 +}) + test("StreamActions interface", () => { assert.equal(typeof StreamActions, "object") })