Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

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)userTriggered dari 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().saveData untuk strategi hemat bandwidth

Use cases

  • Adaptive streaming — ganti kualitas video di onQualityChange
  • Offline & sync — antre request saat offline, flush saat online
  • DashboardonStatusData + 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 isInitialized atau poll hingga true (~3s)
  • Riwayat pendek — by design 50 entri; export manual di onStatusData jika perlu
  • Downlink/RTT null — gunakan effectiveType / string fallback di UI

Tips performa

  1. Hindari pekerjaan berat di callback
  2. Debounce / batch update UI
  3. Riwayat sudah dibatasi 50 entri
  4. Interval 10 detik dirancang ringan
  5. 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 detik
  • getStabilityReport() 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.