He aquí una pequeña guía basada en pruebas que hice hace un par de años cuando empecé a programar en basic MSX, que puede que os resulte útil a los nuevos en el tema. El método fué hacer una serie de listados con operaciones matemáticas, bucles, sprites, etc. y al principio, inicializar TIME a cero, y mostrar su valor una vez terminado el bucle. Hice 5 pruebas en cada modalidad y saqué una media. No voy a publicar los números porque es una lata pero sí daré un resumen de los resultados, que es lo que interesa (conclusiones y moralejas varias, vamos)
Amos allá:
Empecemos por algo básico. Imaginemos:
20 for i=1 to 500
30 a=i-1
40 b=a*2
50 next i
-Si unimos las líneas 30 y 40 en una sola instrucción, separada por dos puntos (
, obtenemos una mejora ridícula (no llega al 1%) pero ya nos da una pista... hay que intentar dentro de lo posible unir en una sola línea tantas instrucciones como sea posible.
-Si insertamos una línea, por ejemplo, la 25, con un REM, la cosa se ralentiza. Así que a usar los menos rems posibles, ya que hay que procesar una instrucción que en definitiva no hace nada.
-Quitando los espacios entre instrucciones también se gana algo de velocidad. Poquísimo, pero algo es algo.
-Ganamos algo más apreciable si sustituimos el NEXT I por NEXT. No hace falta indicar la variable.Eso sí, contad cuántos bucles estáis usando para no haceros un lío y que se queden FORs sin NEXTs o viceversa.
Sigamos con más cositas... los veteranos estarán durmiéndose
pero para nosotros, estas cositas nos pueden salvar el culo en un momento de apuro.
if x>0 then goto 500
-Una expresión es cierta (-1) cuando vale distinta de cero. Así, si quiero saber si la coordenada x de mi nave no sobrepasa la derecha de la pantalla, sólo hay que hacer i x then goto 500. No hace falta la comparación, ya que será verdadera la condición si x<>0 en cualquier caso. Con esto ganamos velocidad.
-Es más, respecto al THEN GOTO 500, podemos quitar el GOTO y poner directamente THEN 500, y ganamos algo. Curiosamente, ganamos algo más si quitamos el then y dejamos sólo el goto, o sea, IF X GOTO 500
-EL CAMPEON CONTRA LAS MANCHAS... DEFINT
Si nuestras variables no necesitan decimales y su valor no va a sobrepasar 32768 o -32768, a usar variables enteras. Definidlas con DEFINT al principio del programa y veréis la diferencia. Eso sí, usad DEFINT antes de dar cualquier valor a las variables u os las borrará. Lo mismo con las matrices. Primero usad DEFINT y luego DIM, si no se borran.
-Una vez usemos variables enteras,p.e. con DEFINT A-Z, ya no hace falta p.e. hacer A=INT(RND(1)*10), nos basta con A=RND(1)*10, ya que de todas formas A es una variable entera, y ejecutar la función INT sólo nos quitará un tiempo de ejecución precioso.
-Chorradita al canto. Aprended TODAS las instrucciones basic porque todas tienen un uso concreto y se les puede sacar partido. Por ejemplo, como ejemplo chorra, en vez de hacer un FOR I=1 to 20:PRINT CHR$(166);:NEXT, usar mejor PRINT STRING$(20,166), que es 10 veces más rápido.
-Sprites. Usar VPOKE donde sea posible (en los casos en que no se necesiten valores mayores de 255 o menores de cero), pues daría error. Incluso vpokeando las coordenadas, color y nº de patrón, es más rápido que usar PUT SPRITE.
-Evitad el uso de paréntesis innecesarios. Es más rápido X=X+2*(D=7 OR D=8) que X=X+2*((D=7) OR (D=8))
-Tanto si usáis variables enteras como si no, la división entera \ es más rápida que la normal /. Pero mucho más rápida. Así que en vez de usar A=INT(B/2), usad A=B\2 y veréis la diferencia. Eso sí, tened en cuenta que esta división tiene la menor prioridad, o sea que metedla entre paréntesis o el ordenador ejecutará antes una suma, resta, etc. que tenga al lado. A=2+B\2 os lo hará como 2+B dividido entre 2, en vez de darle la prioridad a la división, que es lo normal.
-No usar IF NOT(A) que consume mucho. Usar IF A=0 o IF A<>.
-Es más rápido hacer A=B+B o A=B+B+B que A=B*2 o A=B*3 respectivamente. A partir de 4, ya no compensa.
-Gran mito caído. El apóstrofe ' es más lento que el REM, y para colmo ocupa más (que es lo que siempre repetían en las revistas).
Seguro que hay cosas que corregir y aportar mil ideas más. Así que lo mejor es dejar esto abierto y que cada uno nos vaya contando sus experiencias