Wie kann ich eine JavaScript-Seite erstellen, die die Internetgeschwindigkeit des Benutzers erkennt und auf der Seite anzeigt? So etwas wie "Ihre Internetgeschwindigkeit ist ?? / ?? Kb / s ” .
javascript
download-speed
Sharon Haim Pour
quelle
quelle
Antworten:
Es ist bis zu einem gewissen Grad möglich, aber nicht wirklich genau. Die Idee ist, ein Bild mit einer bekannten Dateigröße zu laden und dann in seinem
onload
Ereignis zu messen, wie viel Zeit vergangen ist, bis dieses Ereignis ausgelöst wurde, und diese Zeit in die Bilddateigröße zu teilen.Ein Beispiel finden Sie hier: Berechnen Sie die Geschwindigkeit mit Javascript
Testfall unter Anwendung des dort vorgeschlagenen Fixes:
Ein schneller Vergleich mit dem "echten" Geschwindigkeitstestdienst ergab einen kleinen Unterschied von 0,12 Mbit / s bei Verwendung des Gesamtbilds.
Um die Integrität des Tests sicherzustellen, können Sie den Code mit aktivierter Drosselung des Chrome Dev-Tools ausführen und dann prüfen, ob das Ergebnis der Einschränkung entspricht. (Gutschrift geht an user284130 :))
Wichtige Dinge zu beachten:
Das verwendete Bild sollte ordnungsgemäß optimiert und komprimiert werden. Wenn dies nicht der Fall ist, zeigt die Standardkomprimierung bei Verbindungen durch den Webserver möglicherweise eine höhere Geschwindigkeit als sie tatsächlich ist. Eine andere Option ist die Verwendung eines nicht komprimierbaren Dateiformats, z. B. jpg. (Danke an Rauli Rajande für diesen Hinweis und Fluxine für die Erinnerung an mich )
Der oben beschriebene Cache-Buster-Mechanismus funktioniert möglicherweise nicht mit einigen CDN-Servern, die so konfiguriert werden können, dass Abfragezeichenfolgenparameter ignoriert werden, wodurch die Cache-Steuerungsheader für das Image selbst besser festgelegt werden. (Dank orcaman für dieses heraus zeigen ) )
quelle
Nun, dies ist 2017, also haben Sie jetzt die Netzwerkinformations-API (allerdings mit einer eingeschränkten Unterstützung für alle Browser ab sofort), um Informationen zur geschätzten Downlink-Geschwindigkeit zu erhalten:
Dies ist eine effektive Bandbreitenschätzung in Mbit / s. Der Browser nimmt diese Schätzung anhand des kürzlich beobachteten Durchsatzes der Anwendungsschicht über kürzlich aktive Verbindungen vor. Der größte Vorteil dieses Ansatzes besteht natürlich darin, dass Sie keine Inhalte nur zur Berechnung der Bandbreite / Geschwindigkeit herunterladen müssen.
Sie können sich dieses und einige andere verwandte Attribute hier ansehen
Aufgrund der eingeschränkten Unterstützung und der unterschiedlichen Implementierungen zwischen den Browsern (Stand November 2017) würde ich dringend empfehlen, dies im Detail zu lesen
quelle
Wie ich in dieser anderen Antwort hier auf StackOverflow skizziere , können Sie dies tun, indem Sie den Download von Dateien verschiedener Größen zeitlich festlegen (klein anfangen, hochfahren, wenn die Verbindung dies zuzulassen scheint), durch Cache-Header sicherstellen, dass die Datei wirklich ist vom Remote-Server gelesen und nicht aus dem Cache abgerufen werden. Dies erfordert nicht unbedingt, dass Sie einen eigenen Server haben (die Dateien könnten von S3 oder ähnlichem stammen), aber Sie benötigen einen Ort, an dem Sie die Dateien abrufen können, um die Verbindungsgeschwindigkeit zu testen.
Allerdings sind Bandbreitentests zu einem bestimmten Zeitpunkt notorisch unzuverlässig, da sie von anderen Elementen beeinflusst werden, die in anderen Fenstern heruntergeladen werden, von der Geschwindigkeit Ihres Servers, von Links auf dem Weg usw. usw. Sie können sich jedoch eine ungefähre Vorstellung machen mit dieser Art von Technik.
quelle
iframe
senden, fragen Sie dasiframe
oder ein Cookie zum Ausfüllen ab. Wenn Sie einXMLHttpRequest
Objekt verwenden, um den Beitrag zu verfassen, erfolgt ein Rückruf zur Fertigstellung.Ich brauchte einen schnellen Weg, um festzustellen, ob die Benutzerverbindungsgeschwindigkeit schnell genug war, um einige Funktionen auf einer Site, an der ich arbeite, zu aktivieren / deaktivieren. Ich habe dieses kleine Skript erstellt, das die durchschnittliche Zeit zum Herunterladen eines einzelnen (kleinen) Bildes a berechnet In meinen Tests funktioniert es ziemlich genau. Ich kann beispielsweise klar zwischen 3G oder Wi-Fi unterscheiden. Vielleicht kann jemand eine elegantere Version oder sogar ein jQuery-Plugin erstellen.
quelle
Der Bildtrick ist cool, aber in meinen Tests wurde er vor einigen Ajax-Aufrufen geladen, die ich abschließen wollte.
Die richtige Lösung für 2017 ist die Verwendung eines Arbeitnehmers ( http://caniuse.com/#feat=webworkers ).
Der Arbeiter wird aussehen wie:
Die js-Datei, die den Worker aufruft:
Code aus einem Plone-Paket, das ich geschrieben habe:
quelle
Es ist besser, Bilder zum Testen der Geschwindigkeit zu verwenden. Wenn Sie sich jedoch mit Zip-Dateien befassen müssen, funktioniert der folgende Code.
Dies funktioniert nicht sehr gut mit Dateien <10 MB. Sie müssen aggregierte Ergebnisse bei mehreren Downloadversuchen ausführen.
quelle
Ich brauchte etwas Ähnliches, also schrieb ich https://github.com/beradrian/jsbandwidth . Dies ist eine Neufassung von https://code.google.com/p/jsbandwidth/ .
Die Idee ist, zwei Anrufe über Ajax zu tätigen, einen zum Herunterladen und einen zum Hochladen über POST.
Es sollte mit beiden
jQuery.ajax
oder Angular funktionieren$http
.quelle
Dank der Antwort von Punit S können Sie zum Erkennen einer dynamischen Änderung der Verbindungsgeschwindigkeit den folgenden Code verwenden:
quelle