Alla uppdrag skapas inte lika
Det enklaste sättet att implementera en progressiv bar är att använda en grafisk representation av uppgiftsräknaren. Där det procentuella resultatet helt enkelt beräknas som
. Även om detta ger en logisk förståelse för första tanke, är det viktigt att komma ihåg att vissa uppdrag tar längre tid att fullborda. Tänk på följande uppgifter utförda av en installatör: Skapa mappstruktur.
Dekomprimera och kopiera 1 GB värde av filer.
faktiska
-procentandelen när det gäller tiden som återstår. För att komma runt om det här kan vissa framdriftsfält använda implementeringar där steg viktas. Tänk på stegen ovan där en relativ vikt tilldelas varje steg: Skapa mappstruktur. [Vikt = 1]
Dekomprimera och kopiera 1 GB värde av filer. [Vikt = 7]
Tänk på ett enkelt exempel på att jag ber dig räkna till 50 medan Jag använder en stoppur för att klara dig. Låt oss säga att du räknar till 25 på 10 sekunder. Det vore rimligt att anta att du kommer att räkna de återstående numren på ytterligare 10 sekunder, så att en spårning av progressbalk skulle visa 50% komplett med 10 sekunder kvar.
För ett mer praktiskt exempel på detta, överväga en filhämtning. Du hämtar för närvarande en 100 MB-fil med en hastighet på 1 MB / s. Det här är väldigt lätt att bestämma den beräknade tiden för slutförandet. Men 75% av vägen där, det hinner vissa nätverkstopp och din nedladdningshastighet sjunker till 500 KB / s.
Beroende på hur webbläsaren beräknar den återstående tiden kan din ETA direkt gå från 25 sekunder till 50 sekunder (med nuvarande Endast tillstånd:
Storlek kvarvarande / Hastighet
) eller, med största sannolikhet, använder webbläsaren en rullande medelalgoritm som skulle anpassa sig för fluktuationer i överföringshastigheten utan att visa dramatiska hopp för användaren. Ett exempel på en rullande algoritm när det gäller att hämta en fil kan fungera så här: Överföringshastigheten för de föregående 60 sekunderna kommer ihågs med det nyaste värdet som ersätter det äldsta (t.ex. 61: e värdet ersätter det första).
Den effektiva överföringen ränta för beräkningsberäkningen är medelvärdet av dessa mätningar.
Vid 76 sekunder (där överföringshastigheten sjunker till 500 kB) blir ~ 992 KB (59,500 KB / 60) vilket ger en återstående tid på ~ 24,7 sekunder (24,500 KB / 992 KB).
Det går inte att bestämma någonting som är Nondeterministic
I slutändan beror progressionsfelaktigheten på att det försöker bestämma en tid för något som är nondeterministic. Eftersom datorer hanterar uppgifter både efterfrågan och bakgrunden är det nästan omöjligt att veta vilka systemresurser som kommer att finnas tillgängliga när som helst i framtiden - och det är tillgången på systemresurser som behövs för att någon uppgift ska kunna slutföras.
Som kanske en mer realistisk instans för en daglig användare - överväga att köra Windows Update eller en virusskanning. Båda dessa operationer utför resursintensiva operationer i bakgrunden. Till följd av detta är framstegen varje tillverkning beroende av vad användaren gör vid den tiden. Om du läser ditt e-postmeddelande medan det här körs, är det troligt att efterfrågan på systemresurser kommer att vara låg och framdriftsfältet kommer att flytta konsekvent. Å andra sidan, om du gör grafikredigering så kommer din efterfrågan på systemresurser att bli mycket större, vilket kommer att göra att rörelsen i framdriftslinjen blir schizofren.
Det är helt enkelt att det inte finns någon kristallkula. Inte ens systemet själv vet vilken belastning det kommer att vara under någon tidpunkt i framtiden.
I slutändan är det verkligen inte fråga.
Förloppet för framstegsfältet är att väl ange att framsteg verkligen görs och respektive process hänger inte. Det är trevligt när framdriftsindikatorn är korrekt, men det är vanligtvis bara en mindre irritation när det inte är det. För det mesta kommer utvecklare inte att ägna mycket tid och ansträngning till framstegsalgoritmer eftersom det är uppriktigt att det finns mycket viktigare uppgifter att spendera tid på.
Fyra fantastiska förbättringar av Android Nougat du kanske inte vet om
Android 7.0 Nougat är en annan funktionsraffineringskonstruktion för operativsystemet, med många små tweaks och optimeringar hela tiden. Google omfattade många av de stora funktionerna när den tillkännagav Nougat (då kallad "Android N"), men idag kommer vi att markera en handfull funktioner som du kanske inte redan har hört talas om.
Du stängde av misstag en flik och insåg att du inte var färdig med den webbsidan. Eller vill du öppna den elaka webbsidan du besökte förra veckan, men du glömde att bokmärke den. Inga bekymmer, du kan få tillbaka dina stängda flikar. För var och en av de fem mest populära webbläsarna visar vi dig hur du öppnar den senaste slutna fliken, hur du öppnar webbläsarhistoriken i varje webbläsare så att du kan öppna fönstren igen du stängde i tidigare webbläsningssessioner och hur man manuellt öppnar alla flikar från din senaste surfningssession.