Spela schack | Om dataschack | Koda spelbräda | Öppningsspel | Evalueringsfunktion | Draggenerator | Minimax & Alfabeta-reducering | Dragsortering | Slutspel | Schackregler | Javascript | Länkar/referenser

header
Javascript
Vad är javascript?
Javascript är ett interpreterande skriptspråk som kan bäddas in i htmlkoden för en webbsida.

Vanligtvis används javascript för enklare saker, men det finns inget som hindrar från att använda javascript till mer komplicerade saker.

Min ambition att skapa ett schackprogram i javascript är egentligen ganska dum och inte alls det javascript var tänkt för. Men det finns inget som hindrar detta förutom det att javascript är lite långsamt och innehåller en del lite tråkiga begränsningar.

Hur snabbt är javascript
Javascript tillhör kategorin interpreterande språk vilket innebär att koden tolkas som den står beskriven på webbsidan av en interpretator. Detta till skillnad från språk som kompileras till maskinkod som direkt kan tolkas av processorn, vilket är det normala för program du startar på din dator. Skillnaden mellan kompilerade program som körs direkt av processorn och interpreterade program som körs av en interpretator kan vara 1000-10000 gånger i hastighet eller ännu mer. Det finns ju egentligen ingenting som hindrar någon från att göra ett lite snabbare interpreterande språk. Men javascript hör inte dit.

Javascript förfogar över ett API med vars hjälp det kan kontrollera objekt, DOM (Document Object Model). Anrop som har med DOM att göra är väldigt långsamma. Lyckligtvis behövs inte detta för schacket så detta problem är obefintligt. Några få anrop för att fixa grafiken men inget mer.

Att optimera javascript är inte lika enkelt som att optimera t.ex. C-kod för en processor. Vet man exakt vilka instruktioner något resulterar i kan man räkna exakt på hur lång tid det tar för processorn. När det gäller javascript är det lite luddigt vad som egentligen sker inuti datorn när skriptet körs. Men det finns vissa likheter med traditionella språk. Det finns också expriment folk gjort (se länksidan) som man kan använda som underlag ifall man vill optimera javascriptet.

"Skriptet på sidan har havererat"
Förutom att javascript är långsamt finns ytterligare en begränsning. Det finns en inbyggd funktion i både IE och FF som varnar användaren ifall ett javascript körs för länge. Tanken är god. Tanken är att om ett skript har "havererat" så kan användaren enkelt avbryta det. Men i mitt fall, när schacket tänker, vill man ju inte bli distraherad av denna ruta. Att det ibland kan ta lite längre tid beror inte på något fel utan på att programmet behöver lite extra tid. Då vill man inte att användare skall bli varnad med en kryptisk splash vars budskap är långt ifrån glasklart. Problemet är att den inte går att få bort.



När kommer denna ruta upp? Enligt microsoft kommer den upp efter det att 5 miljoner uttryck har räknats. Det är tekniskt möjligt att ändra denna timeout -variabel men det kräver ingrepp i windows registry. Förvisso inte speciellt komplicerat men hur roligt är det att be varje användare av schacket att göra detta?

Detta blir alltså ytterligare en begränsning för schacket. 5 miljoner uttryck kan man nå efter kanske 5-10 sekunder.

Om denna ruta kommer upp så klicka på JA eller FORTSÄTT och låt skriptet köra klart. Har du otur måste du klicka kanske 2-3 gånger på denna ruta.