NexaNetwork — monitoring koneksi
NexaNetwork memantau status online/offline, tipe koneksi (effective type), estimasi kecepatan,
stabilitas, riwayat (hingga 50 entri), mode hemat data, dan callback untuk UI — berbasis
Network Information API dan
navigator.onLine.
Fitur utama
- Monitoring real-time online/offline
- Deteksi tipe koneksi (4G, 3G, 2G, slow-2G)
- Estimasi kecepatan dari effective type
- Analisis stabilitas (Stabil, Cukup Stabil, Tidak Stabil, …)
- Riwayat perubahan (maks. 50 entri)
- Callback: status, kualitas, data tabel (interval)
- Deteksi data saver
- Laporan stabilitas & uptime
Instalasi & pemakaian dasar
const network = new NexaNetwork();
// atau dari NX (nexa-olod): new NX.NexaNetwork()
if (network.status()) {
console.log("Device online");
}
const connectionInfo = network.getConnectionInfo();
console.log(connectionInfo);Event: perubahan status (online/offline)
Dipicu setelah inisialisasi (~3 detik). Assign sebelum atau sesudah; pastikan isInitialized jika perlu.
network.onStatusChange = (isOnline, connectionInfo, userTriggered) => {
if (isOnline) syncData();
else showOfflineMessage();
};Event: perubahan kualitas
Kualitas: Baik, Sedang, Buruk, Sangat Buruk — cocok untuk adaptive asset / streaming.
network.onQualityChange = (quality, stabilityStatus, userTriggered) => {
// loadHighQualityAssets() | loadMediumQualityAssets() | loadLowQualityAssets()
};Event: data status (tabel / dashboard)
Dipanggil setiap ~10 detik dengan array { label, value }.
network.onStatusData = (tableData) => {
updateTableUI(tableData);
};Konstruktor
new NexaNetwork() memulai monitoring dan listener. isInitialized menjadi
true setelah sekitar 3 detik. Pengecekan berkala sekitar 10 detik
(cek pertama ~1 detik setelah start).
Methods
| Method | Keterangan |
|---|---|
status() |
true / false online |
getConnectionInfo() |
online, type, speed, downlink, rtt,
saveData, dataSaver
|
getDetailedInfo() |
Info koneksi + stability: { status, quality } |
getHistory() |
Array snapshot (maks. 50) dengan timestamp |
getStabilityReport() |
total, uptime, types, stability, quality |
compareConnections(old, current) |
{ hasChanges, message } |
analyzeStability() |
{ status, quality } dari riwayat |
Properties
| Property | Tipe | Keterangan |
|---|---|---|
online |
boolean |
Status saat ini |
history |
Array |
Riwayat (maks. 50) |
lastCheck |
Object |
Data cek terakhir |
isInitialized |
boolean |
Selesai init (~3s) |
onStatusChange |
Function |
Callback status |
onQualityChange |
Function |
Callback kualitas |
onStatusData |
Function |
Callback tabel / interval |
Parameter callback
-
onStatusChange(isOnline, connectionInfo, userTriggered)—userTriggereddari event browser -
onQualityChange(quality, stabilityStatus, userTriggered)— kualitas & label stabilitas onStatusData(tableData)— array baris label/value untuk UI
Tipe koneksi & stabilitas
Effective type
| Type | Estimasi kecepatan |
|---|---|
slow-2g |
< 50 Kbps |
2g |
50–70 Kbps |
3g |
700 Kbps – 1.5 Mbps |
4g |
> 1.5 Mbps |
unknown |
Tidak terdeteksi |
Stabilitas (ringkas)
Berdasarkan ~6 cek terakhir (~1 menit): 100% online + 1 type → Stabil/Baik; 80%+ online + ≤2 types → Cukup Stabil/Sedang; dst. Lihat sumber Markdown untuk tabel penuh.
Fitur lanjutan
- Interval monitoring ~10 detik; init selesai ~3 detik
- Riwayat otomatis, dipotong di 50 entri
getConnectionInfo().saveDatauntuk strategi hemat bandwidth
Use cases
- Adaptive streaming — ganti kualitas video di
onQualityChange - Offline & sync — antre request saat offline, flush saat online
- Dashboard —
onStatusData+getStabilityReport() - Asset loading — pilih bundle gambar/font/script dari
info.type - Retry API — bedakan offline vs error sementara
Kompatibilitas browser
| Browser | Network Information API |
|---|---|
| Chrome 61+, Edge 79+, Opera 48+ | Mendukung penuh (Chromium) |
| Safari | Terbatas / parsial (iOS 13+) |
| Firefox | Eksperimental / di balik flag |
Tanpa API: fallback type / speed / downlink / rtt sering
'unknown'; online tetap dari navigator.onLine.
Troubleshooting
- Selalu
unknown— browser tidak mendukung; cek'connection' in navigator -
Callback tidak jalan — tunggu
isInitializedatau poll hingga true (~3s) - Riwayat pendek — by design 50 entri; export manual di
onStatusDatajika perlu - Downlink/RTT null — gunakan
effectiveType/ string fallback di UI
Tips performa
- Hindari pekerjaan berat di callback
- Debounce / batch update UI
- Riwayat sudah dibatasi 50 entri
- Interval 10 detik dirancang ringan
- Cache
getConnectionInfo()jika dibaca sangat sering
Contoh singkat
Indikator status
import { NexaNetwork } from "/assets/modules/Network/NexaNetwork.js";
const network = new NexaNetwork();
network.onStatusChange = (isOnline) => "Offline";;Dashboard tabel
network.onStatusData = (rows) => {
tbody.innerHTML = rows
.map((r) => "<tr><td>" + r.label + "</td><td>" + r.value + "</td></tr>")
.join("");
};Testing checklist
- Indikator online/offline berubah
- Tipe koneksi terbaca (jika didukung)
- Stabilitas setelah beberapa siklus
- Maks. 50 riwayat
- Callback setelah init
onStatusData~10 detikgetStabilityReport()konsisten- Fallback di browser tanpa API
- Data saver terdeteksi jika ada
Ringkasan API
const network = new NexaNetwork();
network.status();
network.getConnectionInfo();
network.getDetailedInfo();
network.getHistory();
network.getStabilityReport();
network.onStatusChange = (online, info, trig) => {};
network.onQualityChange = (q, stab, trig) => {};
network.onStatusData = (rows) => {};
network.analyzeStability();
network.compareConnections(old, cur);Referensi
Berkas & bundel
assets/modules/Network/NexaNetwork.js— implementasi (sertakan di proyek jika belum ada)assets/modules/nexa-olod.js— impor &NX.NexaNetwork- Sumber Markdown:
templates/theme/docs/platform/javascript/docs/Network.md
Bagian dari ekosistem Nexa / NX. Lisensi mengikuti proyek induk.