Prestaties in scripting
Query's
Wanneer je queries uitvoert in Axxerion in scriptvorm of wanneer je performance problemen debugt, let dan op de volgende aspecten die de performance negatief beïnvloeden.
Klantspecifieke velden
Gebruik JUIST geen klantspecifieke velden in query's als dat mogelijk is. Hiervoor moet Workplace altijd twee gegevenstabellen combineren, waardoor het systeem altijd in een grotere tabel moet zoeken (die met clientspecifieke velden) dan de kernobjecten. Probeer altijd een Workplace kernveld toe te voegen (meestal createTime, updateTime, externalReference, closeTime, categoryFolderId).
Als je toch klantspecifieke velden moet gebruiken, probeer ze dan te beperken. Hoe meer velden je toevoegt, hoe meer gegevens er geïntegreerd moeten worden, wat weer meer tijd kan kosten om uit te voeren. Dus als je een langzame query hebt, controleer dan of het verwijderen van klantspecifieke velden een positief effect heeft (of andersom, ze toevoegen heeft een negatief effect).
Lege query parameters
Als je variabelen in een query gebruikt, zorg er dan voor dat er waarden aan worden toegevoegd. Zie het onderstaande script.
contact = this;
manager = contact.managerContactId;
colleagues = find Contact by managerContactId == manager;
Je verwacht dat het script de manager van de huidige contactpersoon ophaalt. Vervolgens gebruik je die manager om alle andere contactpersonen te vinden die aan die manager zijn toegewezen. Er zit echter een addertje onder het gras: als dit script wordt uitgevoerd op een contactpersoon die geen manager heeft, zoekt het script naar ALLE contactpersonen. Een betere oplossing is om het volgende te doen.
contact = this;
manager = contact.managerContactId;
if (!isEmpty manager) {
colleagues = find Contact by managerContactId == manager;
}
Het bovenstaande controleert of de waarde voor manager leeg is. Als dat niet het geval is, dan start je de rest van de logica. Een betere optie is om break-clausules in je script te maken, waardoor het script stopt als het niet meer nodig is. Zie hieronder.
contact = this;
manager = contact.managerContactId;
if (isEmpty manager) {
return;
}
colleagues = find Contact by managerContactId == manager;
Dit maakt het script leesbaarder en "veiliger", omdat het de logica beëindigt zodra het zou moeten stoppen.
Vinden versus krijgen
Bij scripting worden bij gebruik van een "Find" alle items die overeenkomen met de parameters geretourneerd. Als je een "Get" gebruikt, wordt slechts één item geretourneerd. Hoewel er slechts één item wordt geretourneerd, is de "Get"-query niet sneller. Achter de schermen doet Workplace een "Find" en retourneert slechts 1 item. Wees je er dus van bewust dat dit niet sneller is.
Query's combineren
In Workplace is het mogelijk om "door te linken" in query's. Zie de onderstaande scripting.
Ervan uitgaande dat de query op regel 6 10 collega's retourneert, zal de "for each" de eigenschappen query 10 keer uitvoeren. Een meer optimale manier is om de afzonderlijke query's te combineren.
Wat het script hier doet, is van de Object Property naar de OwnerContactId gaan en dan alle Contacten doorzoeken die bij een bepaalde manager horen. Dit verlaagt het totale aantal zoekopdrachten van 11 naar 1.
Query's met klantspecifieke velden/attributen
Bij het uitvoeren van een query met behulp van een klantspecifiek veld, zou dit potentieel vrij klein zijn bij gebruik van grote aantallen objecten (bijv. CodeTypes). In sommige gevallen kan het sneller zijn om alle items te verzamelen en te controleren op de specifieke waarde waarin je geïnteresseerd bent, in plaats van direct te zoeken naar de client-specifieke veldwaarde. Dit moet per geval worden besloten.
Echo's in scripting
Het blijkt dat echo's in scripts bijdragen aan de gebruikte heapruimte op de server. Dus het verwijderen van echo's nadat je klaar bent met debuggen is een goede manier om problemen op de server te voorkomen. Als je een grote klap wilt om dit op te ruimen in een clientomgeving, kun je het volgende script in die omgeving uitvoeren:
Het bovenstaande script doet het volgende:
Het krijgt alle scripts waarin de laatste scriptversie het woord "echo" maakt
Daaruit worden de actieve scriptversies opgehaald
Voor elke actieve versie zoekt het naar alle echo's in het script via een reguliere expressie (regel 10)
Vervolgens wordt de bestaande versie gekopieerd en vervangen door de tekst zonder echo
Het voegt een beschrijving toe aan deze versie en activeert de nieuwste versie