Bagaimana saya bisa membuat halaman JavaScript yang akan mendeteksi kecepatan internet pengguna dan menampilkannya di halaman? Sesuatu seperti "kecepatan internet Anda adalah ?? / ?? Kb / s ” .
javascript
download-speed
Sharon Haim Pour
sumber
sumber
Jawaban:
Mungkin sampai batas tertentu tetapi tidak akan benar-benar akurat, idenya adalah memuat gambar dengan ukuran file yang diketahui kemudian
onload
mengukur peristiwa berapa banyak waktu berlalu sampai peristiwa itu dipicu, dan membagi waktu ini dalam ukuran file gambar.Contoh dapat ditemukan di sini: Hitung kecepatan menggunakan javascript
Test case menerapkan perbaikan yang disarankan di sana:
Perbandingan cepat dengan layanan tes kecepatan "nyata" menunjukkan perbedaan kecil 0,12 Mbps saat menggunakan gambar besar.
Untuk memastikan integritas pengujian, Anda dapat menjalankan kode dengan pelambatan alat dev dev Chrome dan kemudian melihat apakah hasilnya cocok dengan batasan. (kredit masuk ke user284130 :))
Hal-hal penting yang perlu diingat:
Gambar yang digunakan harus dioptimalkan dan dikompresi dengan benar. Jika tidak, maka kompresi standar pada koneksi oleh server web mungkin menunjukkan kecepatan lebih besar dari yang sebenarnya. Pilihan lain adalah menggunakan format file yang tidak dapat dikompres, misalnya jpg. (Terima kasih Rauli Rajande karena menunjukkan ini dan Fluxine karena mengingatkan saya )
Mekanisme cache buster yang dijelaskan di atas mungkin tidak berfungsi dengan beberapa server CDN, yang dapat dikonfigurasikan untuk mengabaikan parameter string kueri, karenanya mengatur header kontrol cache yang lebih baik pada gambar itu sendiri. (Terima kasih orcaman untuk menunjukkan ini ) )
sumber
Nah, ini tahun 2017 sehingga Anda sekarang memiliki API Informasi Jaringan (walaupun dengan dukungan terbatas di semua browser seperti sekarang) untuk mendapatkan semacam perkiraan informasi kecepatan downlink:
Ini adalah perkiraan bandwidth efektif dalam Mbits per detik. Browser membuat perkiraan ini dari throughput lapisan aplikasi yang baru-baru ini diamati melalui koneksi yang baru-baru ini aktif. Tidak perlu dikatakan, keuntungan terbesar dari pendekatan ini adalah Anda tidak perlu mengunduh konten apa pun hanya untuk perhitungan bandwidth / kecepatan.
Anda dapat melihat ini dan beberapa atribut terkait lainnya di sini
Karena dukungannya yang terbatas dan implementasi yang berbeda di seluruh browser (pada Nov 2017), sangat disarankan untuk membaca ini secara detail
sumber
Seperti yang saya uraikan dalam jawaban lain di sini di StackOverflow , Anda dapat melakukan ini dengan mengatur waktu pengunduhan file dari berbagai ukuran (mulai dari yang kecil, tingkatkan jika koneksi tampaknya memungkinkan), memastikan melalui header cache dan sedemikian rupa sehingga file tersebut benar-benar sedang dibaca dari server jarak jauh dan tidak diambil dari cache. Ini tidak selalu mengharuskan Anda memiliki server sendiri (file mungkin berasal dari S3 atau serupa), tetapi Anda akan memerlukan tempat untuk mendapatkan file untuk menguji kecepatan koneksi.
Yang mengatakan, tes bandwidth point-in-time terkenal tidak dapat diandalkan, karena mereka dipengaruhi oleh item lain yang diunduh di windows lain, kecepatan server Anda, tautan dalam perjalanan, dll., Dll. Tetapi Anda bisa mendapatkan ide kasar menggunakan teknik semacam ini.
sumber
iframe
, misalnya, Anda pollingiframe
atau cookie untuk selesai. Jika Anda menggunakanXMLHttpRequest
objek untuk melakukan posting, ada panggilan balik untuk diselesaikan.Saya memerlukan cara cepat untuk menentukan apakah kecepatan koneksi pengguna cukup cepat untuk mengaktifkan / menonaktifkan beberapa fitur di situs yang saya kerjakan, saya membuat skrip kecil ini yang rata-rata waktu yang diperlukan untuk mengunduh satu (kecil) gambar beberapa kali, ini berfungsi cukup akurat dalam pengujian saya, bisa membedakan dengan jelas antara 3G atau Wi-Fi misalnya, mungkin seseorang dapat membuat versi yang lebih elegan atau bahkan plugin jQuery.
sumber
Trik gambarnya keren tetapi dalam pengujian saya memuat sebelum beberapa panggilan ajax saya ingin selesai.
Solusi yang tepat di 2017 adalah menggunakan pekerja ( http://caniuse.com/#feat=webworkers ).
Pekerja akan terlihat seperti:
File js yang akan memanggil Pekerja:
Kode diambil dari paket Plone yang saya tulis:
sumber
Lebih baik menggunakan gambar untuk menguji kecepatan. Tetapi jika Anda harus berurusan dengan file zip, kode di bawah ini berfungsi.
Ini tidak akan bekerja dengan baik dengan file <10MB. Anda harus menjalankan hasil agregat pada beberapa upaya unduhan.
sumber
Saya membutuhkan sesuatu yang serupa, jadi saya menulis https://github.com/beradrian/jsbandwidth . Ini adalah penulisan ulang https://code.google.com/p/jsbandwidth/ .
Idenya adalah untuk membuat dua panggilan melalui Ajax, satu untuk mengunduh dan yang lainnya untuk mengunggah melalui POST.
Ini harus bekerja dengan keduanya
jQuery.ajax
atau Angular$http
.sumber
berkat jawaban Punit S, untuk mendeteksi perubahan kecepatan koneksi dinamis, Anda dapat menggunakan kode berikut:
sumber