AS3: El cálculo de la velocidad de subida de corriente (o rendimiento)
-
01-10-2019 - |
Pregunta
Estoy subiendo archivos utilizando el método de carga () de la clase FileReference. Quiero mostrar la velocidad de conexión actual y Me preguntaba lo que era una buena manera de hacer eso.
Mi técnica actual es utilizar un temporizador cada 1 mili segundo tal como sigue:
var speed:Function = function(event:TimerEvent):void {
speed = Math.round((currentBytes - lastBytes) / 1024);
lastBytes = currentBytes;
}
var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);
y currentBytes consigue el sistema en el ProgressEvent.PROGRESS. Esta técnica parece imprecisa. Me preguntaba qué otras maneras en que podrían usar para calcular la velocidad de carga durante la carga y visualización en tiempo real.
Todas las ideas u opiniones son bienvenidas!
Muchas gracias,
Rudy
Solución
Si ese bloque de código es un copiar y pegar desde luego no va a funcionar como usted ha esperado que. Se declara speed
como una función dentro de la cual usted aparece a redefinirlo como un número. Aprecio de que se salga con la gramática esquemática el IDE de Flash permitió, sino que un código como que se le va a dar lugar a todo tipo de problemas. Trate de ser explícito al escribir el código.
Prueba algo como esto, en sustitución de yourLoader
con cualquier identificador asignado a la subida
private var speed:Number = 0;
private var lastBytes:uint = 0;
private function uploadSpeed(event:TimerEvent):void
{
speed = Math.round((yourLoader.currentBytes - lastBytes) / 1024);
lastBytes = yourLoader.currentBytes;
}
private var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);
Esto debe calcular cuántos bytes se movieron en 1 segundo intervalos.
Editar:
Es posible que como para hacer que el intervalo de un poco más pequeño que 1000 ms y calcular una velocidad media correspondiente a la última n muestras. Eso haría que el número de sus usuarios ven aparecer más estable de lo que probablemente hace ahora. Hacer una velocidad Array
y .push()
la última muestra. Uso .shift()
dejar caer las muestras más antiguas de manera que no se pierde demasiada precisión. Ensayo y error le dará una mejor idea de cuántas muestras para sostener y con qué frecuencia debe tomarlos.
Otros consejos
Puede controlar la velocidad de carga en el servidor y luego enviar los datos que volver al cliente. Esta técnica se utiliza a menudo para las formas de carga de archivos ajax.