Auf den ersten Blick scheint es, dass die Erstellung einer genauen Schätzung der Zeit ziemlich einfach sein sollte. Schließlich kennt der Algorithmus, der den Fortschrittsbalken erzeugt, alle Aufgaben, die er vor der Zeit erledigen muss ... richtig?
Zum größten Teil ist es richtig, dass der Quellalgorithmus weiß, was er vor der Zeit tun muss. Es ist jedoch eine sehr schwierige, wenn nicht sogar nahezu unlösbare Aufgabe, die Zeit festzuhalten, die für die Ausführung jedes Schritts erforderlich ist.
Die einfachste Methode zum Implementieren einer Fortschrittsanzeige besteht in der Verwendung einer grafischen Anzeige Darstellung des Aufgabenzählers. Wo der Prozentsatz abgeschlossen ist, wird einfach als Abgeschlossene Aufgaben / Gesamtzahl der Aufgaben berechnet. Obwohl dies logisch ist, ist es wichtig, sich daran zu erinnern, dass (offensichtlich) einige Aufgaben länger dauern.
Betrachten Sie die folgenden Aufgaben eines Installationsprogramms:
In diesem Beispiel würden die Schritte 1, 3 und 4 sehr schnell abgeschlossen, während Schritt 2 einige Zeit in Anspruch nehmen würde. So würde ein Fortschrittsbalken, der an einer einfachen Zählung arbeitet, sehr schnell auf 25% springen, während Schritt 2 ein wenig stehen bleiben und dann fast sofort zu 100% springen.
Diese Art von Implementierung ist unter Fortschrittsbalken eigentlich recht üblich weil, wie oben erwähnt, es einfach zu implementieren ist. Wie Sie jedoch sehen können, unterliegt die Verarbeitung des tatsächlichen Fortschrittsanteils in Bezug auf die verbleibende Zeit unverhältnismäßigen Aufgaben.
Um dies zu umgehen, können einige Fortschrittsanzeigen Implementierungen verwenden, bei denen Schritte gewichtet werden. Beachten Sie die obigen Schritte, bei denen jedem Schritt ein relatives Gewicht zugewiesen wird:
Bei dieser Methode bewegt sich der Fortschrittsbalken in Schritten von 10% (das Gesamtgewicht beträgt 10), wobei die Schritte 1, 3 und 4 den Balken 10% nach Abschluss und Schritt 2 durch Bewegen bewegen 70%. Diese Methode ist zwar nicht perfekt, aber eine einfache Methode, um dem Fortschrittsbalkenprozentsatz etwas mehr Genauigkeit zu verleihen.
Betrachten Sie ein einfaches Beispiel, in dem Sie gebeten werden, bis 50 zu zählen Ich benutze eine Stoppuhr, um Sie zu messen. Nehmen wir an, Sie zählen in 10 Sekunden zu 25. Es wäre vernünftig anzunehmen, dass du die verbleibenden Zahlen in weiteren 10 Sekunden zählen würdest, also würde eine Fortschrittsbalke, die dies verfolgt, 50% komplett mit 10 verbleibenden Sekunden zeigen.
Sobald deine Zählung jedoch 25 erreicht, fange ich an, Tennisbälle zu werfen bei dir. Wahrscheinlich wird dies Ihren Rhythmus brechen, da Ihre Konzentration von strikt zählenden Zahlen auf Bälle ausweichen wird, die Ihnen in den Weg geworfen werden. Vorausgesetzt, Sie können weiterzählen, hat sich Ihr Tempo sicherlich etwas verlangsamt. Der Fortschrittsbalken bewegt sich also immer noch, aber in einem viel langsameren Tempo, wobei die geschätzte verbleibende Zeit entweder im Stillstand oder sogar höher liegt.
Betrachten Sie für ein praktischeres Beispiel einen Dateidownload. Sie laden gerade eine 100-MB-Datei mit einer Geschwindigkeit von 1 MB / s herunter. Dies ist sehr einfach, um die geschätzte Zeit der Fertigstellung zu bestimmen. Aber 75% des Weges dorthin, einige Netzüberlastungen und Ihre Downloadrate fällt auf 500 KB / s.
Abhängig davon, wie der Browser die verbleibende Zeit berechnet, könnte Ihre ETA sofort von 25 Sekunden auf 50 Sekunden (unter Verwendung von Present state only: verbleibende Größe / Download - Geschwindigkeit ) oder höchstwahrscheinlich verwendet der Browser einen gleitenden Durchschnittsalgorithmus, der sich an Schwankungen der Übertragungsgeschwindigkeit anpassen würde, ohne dramatische Sprünge für den Benutzer anzuzeigen.
Ein Beispiel für a Rolling-Algorithmus in Bezug auf das Herunterladen einer Datei funktioniert in etwa wie folgt:
In unserem obigen Szenario (der Einfachheit halber verwenden wir 1 MB = 1.000 KB):
Sie können sehen das Muster, das hier als der Sprung in der Download-Geschwindigkeit auftritt, wird langsam in den Durchschnitt integriert, der verwendet wird, um die verbleibende Zeit zu schätzen. Wenn das Dip nach dieser Methode nur 10 Sekunden dauerte und dann auf 1 MB / s zurückkehrte, ist es unwahrscheinlich, dass der Benutzer den Unterschied bemerkt (abgesehen von einem sehr kleinen Stillstand im Countdown der geschätzten Zeit) - Dies ist einfach eine Methode, um Informationen an den Endbenutzer für die eigentliche zugrunde liegende Ursache weiterzuleiten ...
Sie können nicht genau bestimmen, was nichtdeterministisch ist
An einem anderen Beispiel nehmen Sie an, dass Sie ein Programm-Upgrade auf einem Server ausführen, der eine ziemlich intensive Datenbankaktualisierung durchführt. Während dieses Aktualisierungsprozesses sendet ein Benutzer eine anspruchsvolle Anforderung an eine andere Datenbank, die auf diesem System ausgeführt wird. Jetzt müssen die Server-Ressourcen, speziell für die Datenbank, Anforderungen sowohl für Ihr Upgrade als auch für die vom Benutzer initiierte Abfrage verarbeiten - ein Szenario, das sich sicherlich nachteilig auf die Ausführungszeit auswirkt. Alternativ könnte ein Benutzer eine große Dateiübertragungsanforderung einleiten, die den Speicherdurchsatz besteuert, was ebenfalls die Leistung beeinträchtigen würde. Oder es könnte ein geplanter Task gestartet werden, der einen speicherintensiven Prozess ausführt. Sie erhalten die Idee.
Vielleicht eine realistischere Instanz für einen gewöhnlichen Benutzer - denken Sie daran, Windows Update oder einen Virenscan auszuführen. Beide dieser Operationen führen ressourcenintensive Vorgänge im Hintergrund aus. Als Ergebnis hängt der Fortschritt, den jeder macht, davon ab, was der Benutzer gerade macht. Wenn Sie Ihre E-Mail lesen, während diese ausgeführt wird, ist der Bedarf an Systemressourcen höchstwahrscheinlich niedrig und die Fortschrittsleiste wird sich ständig bewegen. Auf der anderen Seite, wenn Sie Grafikbearbeitung machen, wird Ihre Nachfrage nach Systemressourcen viel größer sein, was dazu führen wird, dass die Fortschrittsbalkenbewegung schizophren ist.
Insgesamt ist es einfach, dass es keine Kristallkugel gibt. Nicht einmal das System selbst weiß, zu welcher Last es in der Zukunft kommen wird.
Letztendlich ist es wirklich egal
Natürlich haben Sie jedes Recht, genervt zu sein Wenn ein Fortschrittsbalken auf 99% springt, wird er sofort beendet und Sie müssen 5 Minuten auf das verbleibende ein Prozent warten. Aber wenn das jeweilige Programm insgesamt gut funktioniert, erinnere dich einfach daran, dass der Entwickler seine Prioritäten gerade hatte.
Wiederherstellen von Windows auf Werkseinstellungen
Seltsamerweise wurde ich kürzlich von vielen Leuten gefragt, wie sie ihre Computer auf " Werkseinstellungen " zurücksetzen können . Je nachdem, wie Sie es betrachten und welche Windows-Version Sie verwenden, können die Werkseinstellungen mehrere Dinge bedeuten.Werkeinstellungen bedeutet für mich, dass der Computer beim Kauf wieder in den Zustand versetzt wird. Daz
Was ist GitHub und wofür wird es verwendet?
GitHub ist eine Website und ein Dienst, von dem Geeks die ganze Zeit schwärmen, aber viele Leute verstehen nicht wirklich was es tut. Willst du wissen, worum es beim GitHub-Hubbub geht? Lesen Sie weiter, um das herauszufinden. Das "Git" in GitHub VERWANDT: Versionsverfolgung mit Subversion (SVN) Für Anfänger Um GitHub zu verstehen, müssen Sie zunächst Git verstehen.