FileMaker scripts optimaliseren voor snelheid
Waarom trage FileMaker scripts zelden aan één oorzaak liggen, en hoe u stap voor stap meet, prioriteert en optimaliseert zonder alles te herschrijven.
Een orderbevestiging die acht seconden nodig heeft, lijkt geen groot probleem. Totdat vijf medewerkers die handeling tientallen keren per dag uitvoeren, terwijl klanten aan de telefoon wachten en de database ondertussen alleen maar groter wordt. Herkenbaar? Dan gaat dit artikel over precies dat probleem: hoe krijgt u trage FileMaker scripts weer snel, zonder maandenlang te herbouwen.
FileMaker scripts optimaliseren gaat niet alleen over technische snelheid. Het gaat om minder onderbrekingen, voorspelbare processen en een systeem dat kan meegroeien zonder dat uw team om bestaande beperkingen heen moet werken.
Waarom is mijn FileMaker script traag?
De oorzaak zit zelden in één slecht script. In de praktijk is vertraging vaak het gevolg van een combinatie van factoren:
- onnodige vensterverversingen
- brede of complexe relaties
- herhaalde zoekopdrachten binnen een lus
- berekeningen die telkens opnieuw worden uitgevoerd in plaats van opgeslagen
- scripts die op de client draaien terwijl ze eigenlijk op de server thuishoren
Een gerichte analyse voorkomt dat u tijd steekt in cosmetische verbeteringen die nauwelijks effect hebben op wat gebruikers écht voelen.
Waar moet ik beginnen: meten of herschrijven?
Altijd meten, nooit direct herschrijven. De snelste route naar betere performance is eerst vaststellen waar gebruikers daadwerkelijk wachten. Vraag niet alleen welk scherm "traag voelt", maar kijk naar het concrete proces. Duurt het openen van een klantkaart lang? Loopt het vast bij het genereren van een factuur? Of wordt de vertraging pas zichtbaar zodra veel gebruikers tegelijk werken?
Breng per proces de start- en eindtijd in beeld. Dat kan tijdelijk in een logtabel, met scriptstappen voor tijdregistratie, of via de logbestanden van FileMaker Server. Meet daarbij niet alleen de totale duur, maar ook welke subscript, zoekactie, import, export of recordbewerking het meeste tijd opeet. Een script van vijftien seconden kan bijvoorbeeld veertien seconden besteden aan één enkele relatieberekening.
Kijk vervolgens naar de omstandigheden waaronder het script draait:
- Een script dat lokaal soepel reageert, kan via een trage verbinding of met gehoste data heel anders presteren.
- De omvang van de dataset telt zwaar mee. Een oplossing die prima werkt met 5.000 records kan merkbaar vertragen bij 500.000 records.
Optimaliseren zonder die context leidt regelmatig tot verkeerde keuzes — u repareert dan iets dat niet het echte knelpunt is.
Welke processen pak ik als eerste aan?
Begin niet automatisch bij het langste script. Prioriteit ligt meestal bij processen die vaak worden gebruikt, omzet ondersteunen, of fouten veroorzaken wanneer medewerkers te lang moeten wachten. Denk aan het aanmaken van orders, voorraadmutaties, planning, facturatie en synchronisatie met een boekhoudpakket of webshop.
Een maandrapport dat twintig seconden sneller wordt maar slechts één keer per maand draait, heeft meestal minder zakelijke waarde dan een orderproces dat twee seconden sneller wordt voor tien gebruikers, elke dag opnieuw. Deze afweging houdt de investering praktisch en verdedigbaar richting management.
[[IMAGE:left|klok naast een groeiende database, symbool voor toenemende vertraging]]
In welke volgorde optimaliseer ik een script?
Veel scripts zijn organisch gegroeid. Er is een extra controle toegevoegd, later een koppeling met een externe dienst, en daarna een uitzondering voor één specifieke klantgroep. Begrijpelijk, maar het maakt de logica vaak onnodig complex. Maak eerst zichtbaar wat het script werkelijk moet doen, en pas daarna de uitvoering aan.
Controleer of elke stap nog nodig is. Een script dat een record opslaat, opnieuw opent, gegevens controleert en daarna weer opslaat, bevat mogelijk overbodige handelingen. Hetzelfde geldt voor scripts die in een lus steeds naar een andere lay-out gaan, records sorteren terwijl de volgorde niet relevant is, of na elke wijziging het venster verversen.
Beperk vooral wisselingen tussen contexten. Lay-outwisselingen, het activeren van vensters en navigatie naar gerelateerde records geven in FileMaker extra belasting. Werk waar mogelijk met variabelen, gerichte zoekopdrachten en scripts die duidelijk aangeven in welke tabelcontext ze actief zijn. Dat maakt een script niet alleen sneller, maar ook betrouwbaarder bij gelijktijdig gebruik door meerdere medewerkers.
Gebruik subscriptstappen bewust. Kleine, herbruikbare scripts zijn waardevol voor onderhoud, maar een subscript dat binnen een grote lus duizenden keren wordt aangeroepen, kan onnodige overhead veroorzaken. Soms is een herziening van de lus beter. Soms volstaat het om gegevens vooraf in variabelen te laden in plaats van ze telkens opnieuw op te halen.
Waarom is record-voor-recordwerk vaak het echte probleem?
Een veelvoorkomend patroon: een script doorloopt een gevonden set en zoekt voor elk record afzonderlijk naar gerelateerde gegevens. Bij enkele tientallen records merkt niemand dat. Bij een import of factuurrun met duizenden regels wordt het een concreet knelpunt — denk aan een maandelijkse facturatieronde die drie uur duurt in plaats van tien minuten.
Kijk of u die bewerkingen kunt verplaatsen naar:
- één gerichte zoekactie in plaats van duizenden losse zoekacties
- een relatie of samenvattingsveld
- een batchbewerking
- een import naar een tijdelijke tabel in plaats van record-voor-record aanmaken en verrijken
Welke methode het beste past, hangt af van de benodigde validatie, foutafhandeling en transactieveiligheid. Snelheid mag niet betekenen dat u controle op gegevenskwaliteit verliest.
Bij complexe datasets kan ExecuteSQL nuttig zijn voor een afgebakende gegevensopvraag. Het is echter geen standaardvervanger voor relaties of een goed opgebouwde relatiegrafiek. SQL-resultaten vragen extra aandacht voor datatypen, foutafhandeling en onderhoudbaarheid. Gebruik het wanneer het aantoonbaar een gerichte query vereenvoudigt, niet als pleister op een onduidelijk datamodel.
Ligt het probleem misschien niet in het script, maar in de data?
Een script is vaak niet het échte probleem. Als het script een niet-opgeslagen berekening aanroept over een grote gerelateerde dataset, blijft het traag — hoe netjes de scriptstappen ook geschreven zijn. Daarom hoort de beoordeling van velden, relaties en indexering standaard bij optimalisatie.
Niet-opgeslagen berekeningen zijn flexibel, maar FileMaker moet ze opnieuw berekenen wanneer ze worden opgevraagd. Dat is prima voor beperkte, actuele informatie. Voor waarden die zelden wijzigen en vaak worden gebruikt — totalen, classificaties, statussen die in lijsten en rapportages terugkomen — kan een opgeslagen veld of een bewust bijgewerkte waarde veel efficiënter zijn.
Controleer ook of zoekvelden goed geïndexeerd kunnen worden. Een script dat regelmatig zoekt op een niet-geïndexeerd veld vraagt bij groeiende bestanden steeds meer tijd. Soms is de oplossing een apart zoekveld met een genormaliseerde waarde, bijvoorbeeld voor artikelnummers, e-mailadressen of externe referenties. Zo voorkomt u dat scripts steeds omslachtige vergelijkingen moeten uitvoeren.
Let op de afweging tussen opslag en actualiteit:
- Een opgeslagen totaal is snel, maar moet betrouwbaar worden bijgewerkt zodra onderliggende regels wijzigen — dat vraagt duidelijke scriptlogica en soms een transactiebenadering.
- Een actuele berekening is eenvoudiger in onderhoud, maar kan te duur worden bij veel gelijktijdige gebruikers.
De juiste keuze volgt uit het gebruikspatroon, niet uit een algemene voorkeur van de ontwikkelaar.
Kan ik zwaar werk van de gebruiker afhalen en naar de server verplaatsen?
Ja, en dit is vaak de grootste performancewinst die u in één keer kunt behalen. Wanneer een script intensieve berekeningen, imports, documentgeneratie of integraties uitvoert, hoeft dat werk niet op de werkplek van de gebruiker te draaien. Met Perform Script on Server (PSoS) kan FileMaker Server taken uitvoeren zonder dat een gebruiker op elke tussenstap hoeft te wachten.
Dat is vooral nuttig voor:
- nachtelijke synchronisaties
- grote imports
- voorraadverwerking
- het opbouwen van rapportages
De gebruiker start een opdracht en ontvangt later een melding of resultaat. Dat verlaagt ook de belasting op de lokale client en beperkt de invloed van netwerkvertraging.
Server-side scripting vraagt wel om een andere manier van ontwerpen. Scriptstappen die afhankelijk zijn van een actief venster, een lay-outcontext of gebruikersinteractie gedragen zich op de server niet hetzelfde, of werken daar simpelweg niet. Parameters, foutmeldingen en voortgang moeten daarom expliciet worden vastgelegd. Bij API-koppelingen is het verstandig om aanvragen te loggen, time-outs af te vangen en herhaalbare fouten gecontroleerd opnieuw te verwerken.
Voor kritieke processen — het boeken van een factuur, het verwerken van voorraad — is een transactie vaak verstandig. Daarmee voorkomt u dat een deel van de records wordt bijgewerkt terwijl een volgende stap faalt. De winst zit niet alleen in consistentere data, maar ook in eenvoudiger herstel wanneer een externe API tijdelijk niet beschikbaar is.
[[IMAGE:right|client en server, met zware taak die van client naar server verschuift]]
Hoe zorg ik dat een sneller script ook onderhoudbaar blijft?
Performancewerk wordt kwetsbaar wanneer alleen de oorspronkelijke ontwikkelaar nog begrijpt waarom een bepaalde stap bestaat. Geef scripts daarom functionele namen, groepeer logische blokken en documenteer uitzonderingen kort maar concreet. Een opmerking als "sneller gemaakt" helpt niemand. "Voorkomt herhaalde zoekactie per orderregel bij import" maakt de keuze direct begrijpelijk voor de volgende ontwikkelaar — ook als dat uzelf is, een jaar later.
Bouw foutafhandeling in op de plekken waar het risico zit:
- recordlocks
- ontbrekende gerelateerde records
- mislukte API-aanroepen
- ongeldige invoer
Controleer vervolgens het resultaat van belangrijke scriptstappen. Een sneller script dat stilzwijgend gegevens overslaat, creëert later een veel duurder probleem dan de oorspronkelijke wachttijd ooit was.
Gebruik een aparte testomgeving wanneer processen bedrijfskritisch zijn. Test niet alleen de normale route, maar juist grote datasets, ontbrekende gegevens, gelijktijdige wijzigingen en een tijdelijke storing in een koppeling. Bij bestaande FileMaker-omgevingen is die discipline essentieel, omdat scripts vaak verweven zijn met jaren aan praktijkregels die niemand meer volledig kan navertellen.
Checklist: FileMaker script optimaliseren in de praktijk
- Meet welk proces daadwerkelijk traag aanvoelt — vraag door tot op het scherm en de handeling.
- Log start- en eindtijd per script en per subscript.
- Kijk naar dataomvang en netwerkomstandigheden, niet alleen naar de scriptcode.
- Kies processen met zakelijke impact, niet automatisch het langste script.
- Verwijder overbodige scriptstappen en onnodige lay-outwisselingen.
- Vervang record-voor-recordwerk door zoekacties, relaties of batchverwerking waar mogelijk.
- Controleer niet-opgeslagen berekeningen en indexering van veelgebruikte zoekvelden.
- Verplaats zware taken naar FileMaker Server via Perform Script on Server.
- Bouw transacties en foutafhandeling in bij kritieke processen.
- Documenteer wijzigingen functioneel, niet cosmetisch.
- Test met realistische datavolumes en storingsscenario's, niet alleen de gelukkige route.
Veelgestelde vragen
Is ExecuteSQL altijd sneller dan relaties? Niet per definitie. ExecuteSQL kan een gerichte, complexe query vereenvoudigen, maar vervangt geen goed opgebouwd datamodel. Gebruik het gericht, niet als standaardoplossing.
Moet ik alle berekeningen opslaan voor betere snelheid? Nee. Opgeslagen berekeningen zijn sneller bij opvragen, maar vragen betrouwbare bijwerklogica. Voor waarden die zelden worden geraadpleegd, is een niet-opgeslagen berekening vaak eenvoudiger en net zo praktisch.
Werkt Perform Script on Server voor elk script? Nee. Scripts die afhankelijk zijn van een actief venster of directe gebruikersinteractie moeten eerst worden herzien voordat ze server-side kunnen draaien.
Hoe vaak moet ik scripts opnieuw beoordelen op snelheid? Bij elke merkbare groei in gebruikersaantal of datavolume, en sowieso bij klachten over specifieke processen. Een jaarlijkse korte performance-check voorkomt dat kleine vertragingen zich ongemerkt opstapelen.
Wat is de beste volgende stap?
Een goede eerste stap is een korte performance-audit van de belangrijkste processen. Kies vervolgens één of twee verbeteringen die direct merkbaar zijn voor gebruikers, bijvoorbeeld een sneller orderproces of een factuurrun die op de server draait. Meet het resultaat en gebruik die inzichten voor de volgende prioriteit.
Soms volstaat het opschonen van scripts en velden. Soms legt de analyse een breder probleem bloot, zoals een verouderde FileMaker Server-configuratie, een onduidelijke relatiegrafiek, of een integratie die te veel losse aanvragen verstuurt. Dan is modernisering van een deelproces verstandiger dan eindeloos repareren.
De beste verbetering is uiteindelijk niet de technisch slimste oplossing op papier, maar de oplossing waardoor medewerkers hun werk zonder wachten, omwegen of onzekerheid kunnen afmaken.
Loggix kijkt bij dit soort trajecten eerst naar wat al goed werkt, en zoekt gericht naar de plekken waar snelheid direct zakelijke winst oplevert — of dat nu zit in het herstructureren van bestaande FileMaker-scripts, het verplaatsen van zware verwerking naar de server, een strakkere API-koppeling met een extern systeem, of een bredere blik op waar het huidige datamodel de groei van uw organisatie afremt. Een gerichte performance-audit is vaak de snelste manier om te ontdekken waar die winst voor uw specifieke processen zit.