Cambi di vista istantanei con il prefetching di Inertia v3
Negli ultimi mesi abbiamo costruito There There presso Spatie, uno strumento di supporto plasmato dai due decenni che abbiamo trascorso gestendo il nostro supporto clienti. L'obiettivo è semplice: l'helpdesk che abbiamo sempre desiderato.
Ci interessa usare l'AI in un modo particolare. Dovrebbe aiutare gli agenti di supporto a scrivere risposte migliori, non sostituirli. L'umano rimane al comando della conversazione, e il modello fa il lavoro ingrato di abbozzare, riformulare e suggerire link. There There è attualmente in beta privata, e puoi richiedere l'accesso anticipato su there-there.app.
Stiamo costruendo There There con Laravel e Inertia, e ci affidiamo molto alle ultime funzionalità che Inertia v3 introduce. Questo post riguarda un'altra di queste: il prefetching al passaggio del mouse (hover).
Usare il prefetch al passaggio del mouse
In un helpdesk, un agente di supporto cambia vista costantemente. I miei ticket aperti, non assegnati, in attesa, spam, viste di team, filtri personalizzati. Ogni cambio attiva un caricamento di pagina con un filtro diverso. Se ogni cambio dipende da un round-trip, la sidebar inizia a sembrare un peso morto.
Inertia v3 ha un'API di prefetching integrata che copre tutto questo in modo ordinato. Invece di aspettare il click, recuperiamo i dati della vista appena il cursore si posiziona sul link, e manteniamo il risultato in una cache a breve termine così che la navigazione effettiva risulti istantanea.
Ecco il cuore del nostro link di vista nella sidebar.
<Link
href={buildViewUrl(view)}
prefetch="hover"
cacheFor="30s"
preserveState={isOnTickets}
preserveScroll={isOnTickets}
>
<Icon className="size-4" />
<span>{view.label}</span>
</Link>
prefetch="hover" è tutto il meccanismo. Dopo che il cursore rimane sul link per 75ms, Inertia lancia la richiesta sottostante in background. Quando l'agente clicca davvero, la risposta è già in memoria, e la pagina cambia senza attesa di rete.
cacheFor è dove avviene la vera ottimizzazione. Il default è 30 secondi. Per le nostre viste dei ticket, è un punto dolce: abbastanza lungo perché passare avanti e indietro sembri gratuito, abbastanza breve perché i contatori non diventino visibilmente obsoleti. Puoi alzarlo per liste più statiche, o abbassarlo a "0" per viste dove la freschezza conta più della velocità.
Eccolo in azione. Il cursore passa sopra, Inertia scalda la cache in background, e il click arriva su dati che sono già lì.
Un piccolo dettaglio merita di essere segnalato. Quando un agente lascia una vista, spesso vuoi cancellare le richieste in volo per non mostrare dati obsoleti. La chiamata ovvia è router.cancelAll(), ma questa cancella anche i prefetch che stanno felicemente scaldando la cache per le viste che l'agente sta per visitare.
Inertia v3 ti permette di limitare questo comportamento. Ecco come cancelliamo la visita attiva senza toccare i prefetch.
router.cancelAll({ async: false, prefetch: false });
I flag dicono a Inertia di mantenere attivi i prefetch in background e le visite asincrone (come uno scroll infinito), mentre cancella la normale visita di pagina. L'agente ottiene una navigazione immediata e la sidebar rimane pronta per la prossima mossa.
In conclusione
Il prefetching al passaggio del mouse è una di quelle funzionalità che costa quasi nulla da attivare e cambia la sensazione dell'app. Una prop, una durata della cache, e sei a posto. La limitazione della cancellazione è l'unico dettaglio che vale la pena conoscere, perché senza di essa annulleresti la tua stessa ottimizzazione la prima volta che ti allontani da una vista.
Puoi leggere di più nella guida al prefetching di Inertia v3. E se vuoi provare There There di persona, siamo in beta privata e puoi richiedere l'accesso anticipato su there-there.app.
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.