Jelajahi kekuatan API Web USB untuk akses dan kontrol perangkat USB yang mulus dalam aplikasi web, melayani audiens pengembang global.
API Web USB Frontend: Menjembatani Kesenjangan Antara Browser dan Perangkat Fisik
Di dunia yang semakin terhubung saat ini, aplikasi web tidak lagi terbatas pada menampilkan informasi statis atau melakukan tugas yang murni online. Keinginan untuk berinteraksi dengan dunia fisik secara langsung dari browser belum pernah sekuat ini. Dari instrumentasi ilmiah hingga perangkat rumah pintar, dan dari sistem kontrol industri hingga gawai yang dipersonalisasi, potensi kontrol perangkat keras berbasis web sangat luas dan sebagian besar belum dimanfaatkan. Di sinilah API Web USB Frontend tampil, menawarkan kepada para pengembang cara yang kuat dan terstandarisasi untuk berkomunikasi dengan perangkat USB secara langsung melalui browser web.
Bagi audiens pengembang global, memahami dan memanfaatkan API Web USB dapat membuka batasan baru dalam inovasi. Bayangkan seorang siswa di Nairobi mengakses dan mengontrol mikroskop yang terhubung melalui USB ke laptopnya, seorang manajer pabrik di Seoul memantau data sensor dari mesin secara real-time melalui dasbor web, atau seorang pehobi di Berlin merancang efek pencahayaan kustom untuk proyeknya dengan strip LED yang dikontrol USB, semuanya tanpa menginstal perangkat lunak khusus apa pun. API Web USB membuat skenario ini, dan banyak lainnya, menjadi kenyataan yang nyata.
Apa itu API Web USB?
API Web USB adalah API JavaScript yang memungkinkan aplikasi web berkomunikasi dengan perangkat USB (Universal Serial Bus). Dikembangkan sebagai bagian dari spesifikasi WebUSB, tujuannya adalah untuk menyediakan metode yang aman dan terstandarisasi bagi halaman web untuk menemukan, terhubung ke, dan mengirim/menerima data dengan periferal USB. Secara historis, akses USB langsung dari browser web tidak mungkin atau memerlukan plugin berpemilik dan aplikasi asli, yang menciptakan hambatan masuk yang signifikan dan membatasi kompatibilitas lintas platform.
API Web USB bertujuan untuk mendemokratisasi interaksi perangkat keras dengan membawanya langsung ke lingkungan browser. Ini berarti pengembang dapat membangun pengalaman web yang kaya dan interaktif yang memanfaatkan kemampuan perangkat fisik tanpa memaksa pengguna untuk mengunduh dan menginstal aplikasi terpisah yang berpotensi rumit. Hal ini sangat bermanfaat bagi audiens global di mana instalasi perangkat lunak dapat menjadi kendala karena kecepatan internet, kemampuan perangkat, atau batasan administratif yang bervariasi.
Konsep dan Fungsionalitas Utama
Untuk secara efektif memanfaatkan API Web USB, penting untuk memahami komponen inti dan cara kerjanya:
1. Penemuan dan Pemilihan Perangkat
Langkah pertama dalam berkomunikasi dengan perangkat USB adalah menemukan dan memilihnya. API Web USB menyediakan mekanisme bagi browser untuk menghitung perangkat USB yang terhubung dan memungkinkan pengguna untuk memilih perangkat mana yang akan diberi akses.
navigator.usb.getDevices(): Metode ini mengambil daftar semua perangkat USB yang sebelumnya telah diberi izin akses oleh asal saat ini. Ini berguna untuk terhubung kembali ke perangkat yang sebelumnya digunakan.navigator.usb.requestDevice(options): Ini adalah metode utama untuk memulai koneksi baru. Metode ini meminta pengguna dengan dialog pemilih perangkat, memungkinkan mereka untuk memilih perangkat USB dari yang tersedia. Parameteroptionssangat penting di sini, karena menentukan filter berdasarkan ID vendor (VID) dan ID produk (PID), atau kelas, subkelas, dan protokol USB. Ini memastikan bahwa hanya perangkat yang relevan yang disajikan kepada pengguna, meningkatkan keamanan dan pengalaman pengguna.
Contoh (Konseptual):
Misalkan kita ingin terhubung ke papan Arduino tertentu. Kita biasanya akan mengetahui ID Vendor (misalnya, 0x2341 untuk Arduino) dan ID Produk (misalnya, 0x0043 untuk Arduino Uno). Panggilan requestDevice akan terlihat seperti ini:
async function connectArduino() {
try {
const device = await navigator.usb.requestDevice({
filters: [{ vendorId: 0x2341, productId: 0x0043 }]
});
console.log("Terhubung ke Arduino:", device);
// Lanjutkan dengan komunikasi
} catch (error) {
console.error("Gagal terhubung ke perangkat:", error);
}
}
Penggunaan async/await adalah praktik standar untuk menangani operasi asinkron dalam JavaScript modern. Permintaan eksplisit dari pengguna untuk pemilihan perangkat adalah fitur keamanan penting, yang mencegah situs web berbahaya mengakses perangkat keras yang terhubung secara diam-diam.
2. Representasi dan Informasi Perangkat
Setelah perangkat dipilih, browser menyediakan objek USBDevice. Objek ini merangkum semua informasi dan metode yang diperlukan untuk berinteraksi dengan perangkat yang dipilih.
- Properti
USBDevice: ObjekUSBDeviceberisi properti sepertivendorId,productId,productName,manufacturerName,serialNumber, dan informasi tentang statusconfiguration,interfaces, danopened-nya. open(): Metode ini membuka koneksi ke perangkat, membuatnya siap untuk transfer data.close(): Metode ini menutup koneksi ke perangkat.selectConfiguration(configurationValue): Perangkat USB dapat memiliki beberapa konfigurasi. Metode ini memilih konfigurasi spesifik untuk digunakan.claimInterface(interfaceNumber): Sebelum aplikasi web dapat berkomunikasi dengan antarmuka USB tertentu pada perangkat, ia harus mengklaim antarmuka tersebut. Ini mencegah aplikasi lain atau sistem operasi mengganggu.releaseInterface(interfaceNumber): Melepaskan antarmuka yang sebelumnya diklaim.
Contoh (Mendapatkan Info Perangkat):
async function getDeviceInfo(device) {
if (device.opened) {
console.log(`Perangkat sudah terbuka: ${device.productName}`);
} else {
await device.open();
console.log(`Perangkat berhasil dibuka: ${device.productName}`);
}
if (device.configuration === null) {
// Jika tidak ada konfigurasi yang dipilih, pilih yang pertama
await device.selectConfiguration(1);
}
console.log("Vendor ID:", device.vendorId);
console.log("Product ID:", device.productId);
console.log("Product Name:", device.productName);
console.log("Manufacturer Name:", device.manufacturerName);
console.log("Serial Number:", device.serialNumber);
// Anda juga dapat mendaftar antarmuka jika diperlukan
console.log("Antarmuka:", device.interfaces);
}
Fase ini sangat penting untuk membangun saluran komunikasi yang stabil. Konsep memilih konfigurasi dan mengklaim antarmuka adalah fundamental tentang bagaimana perangkat USB beroperasi dan dicerminkan secara langsung dalam API Web USB.
3. Transfer Data
Setelah antarmuka diklaim, data dapat dikirim ke dan diterima dari perangkat. Hal ini dilakukan melalui titik akhir (endpoint), yang merupakan saluran komunikasi logis dalam sebuah antarmuka.
- Titik Akhir: Perangkat USB memiliki titik akhir masukan (IN) dan keluaran (OUT). Data dikirim ke titik akhir OUT dan diterima dari titik akhir IN. Setiap titik akhir memiliki alamat dan arah yang unik.
transferOut(endpointNumber, data): Mengirim data ke titik akhir OUT yang ditentukan.datadapat berupaBufferSource(misalnya,ArrayBuffer,Uint8Array).transferIn(endpointNumber, length): Meminta untuk menerima sejumlah byte tertentu dari titik akhir IN yang ditentukan. Ini mengembalikan promise yang diselesaikan dengan objekUSBInTransferResultyang berisi data yang diterima.clearHalt(direction, endpointNumber): Menghapus status halt pada titik akhir tertentu.isochronousTransferIn(...),isochronousTransferOut(...): Untuk aliran data real-time seperti audio atau video, transfer isokronus digunakan, menawarkan jaminan bandwidth tetapi tanpa koreksi kesalahan.
Contoh (Mengirim dan Menerima Data):
async function sendAndReceive(device) {
// Asumsikan antarmuka 0, titik akhir 1 adalah titik akhir KELUAR dan titik akhir 2 adalah titik akhir MASUK
const OUT_ENDPOINT = 1;
const IN_ENDPOINT = 2;
const BYTES_TO_READ = 64; // Contoh: Baca hingga 64 byte
// Mengirim data
const dataToSend = new Uint8Array([0x01, 0x02, 0x03, 0x04]); // Contoh data
await device.transferOut(OUT_ENDPOINT, dataToSend);
console.log("Data berhasil dikirim.");
// Menerima data
const result = await device.transferIn(IN_ENDPOINT, BYTES_TO_READ);
if (result.data && result.data.byteLength > 0) {
const receivedData = new Uint8Array(result.data);
console.log("Data yang diterima:", receivedData);
} else {
console.log("Tidak ada data yang diterima atau transfer tidak lengkap.");
}
}
Ini adalah inti dari interaksi. Kemampuan untuk mengirim dan menerima data arbitrer memungkinkan kontrol penuh atas perangkat USB yang terhubung, hanya dibatasi oleh firmware perangkat dan protokol yang didukungnya.
4. Transfer Kontrol
Selain transfer data standar, API Web USB juga mendukung transfer kontrol, yang digunakan untuk konfigurasi perangkat, permintaan status, dan operasi fundamental lainnya.
controlTransferIn(setup, length): Melakukan transfer kontrol untuk membaca data dari perangkat.controlTransferOut(setup, data): Melakukan transfer kontrol untuk menulis data ke perangkat.
Parameter setup adalah objek USBControlTransferParameters, yang menentukan jenis permintaan, penerima, kode permintaan, nilai, dan indeks. Ini adalah perintah tingkat rendah yang sering sesuai dengan permintaan USB standar.
Contoh (Transfer Kontrol Konseptual):
async function getDeviceDescriptor(device) {
const setup = {
requestType: 'standard', // 'standard', 'class', atau 'vendor'
recipient: 'device', // 'device', 'interface', 'endpoint', atau 'other'
request: 0x06, // Permintaan USB Standar: GET_DESCRIPTOR
value: 0x0100, // Tipe Deskriptor: DEVICE (0x01), Indeks: 0
index: 0 // Indeks untuk deskriptor titik akhir
};
const length = 18; // Panjang deskriptor perangkat standar
const result = await device.controlTransferIn(setup, length);
if (result.data) {
console.log("Deskriptor Perangkat:", new Uint8Array(result.data));
}
}
Transfer kontrol adalah fundamental untuk inisialisasi perangkat dan menanyakan kemampuan perangkat, sering digunakan sebelum transfer data standar dapat dimulai.
Dukungan dan Ketersediaan Browser
API Web USB adalah API yang relatif baru, dan adopsinya bervariasi di berbagai browser dan sistem operasi. Saat ini, dukungan terbaiknya ada di:
- Google Chrome: Didukung secara luas di platform desktop (Windows, macOS, Linux).
- Microsoft Edge: Berbasis Chromium, ia juga menawarkan dukungan yang baik.
- Opera: Umumnya mengikuti implementasi Chrome.
Dukungan pada browser lain seperti Mozilla Firefox dan Safari terbatas atau belum diimplementasikan. Penting juga untuk dicatat bahwa implementasi browser mungkin memiliki perbedaan halus atau memerlukan flag tertentu untuk diaktifkan, terutama pada versi sebelumnya. Bagi audiens global, ini berarti pengembang perlu memperhatikan lingkungan browser target. Strategi fallback atau indikasi yang jelas tentang kompatibilitas browser akan sangat penting untuk adopsi yang luas.
Selain itu, API Web USB memerlukan konteks aman (HTTPS) untuk sebagian besar browser, yang semakin memperkuat model keamanannya. Ini berarti bahwa aplikasi yang menggunakan Web USB tidak dapat di-hosting di situs web HTTP biasa.
Pertimbangan Keamanan
Keamanan adalah hal yang terpenting saat berurusan dengan akses perangkat keras dari browser web. API Web USB dirancang dengan beberapa fitur keamanan:
- Persetujuan Pengguna: Yang terpenting, browser tidak pernah memberikan akses otomatis ke perangkat USB. Pengguna harus secara eksplisit memilih perangkat melalui prompt yang disediakan browser (menggunakan
navigator.usb.requestDevice()). Ini mencegah situs web berbahaya membajak periferal yang terhubung. - Pengikatan Asal: Izin yang diberikan ke situs web terikat pada asalnya (skema, domain, dan port). Jika pengguna memberikan akses ke perangkat di
https://example.com, izin itu tidak secara otomatis meluas kehttps://subdomain.example.comatauhttps://another-site.com. - Tidak Ada Akses Diam-diam: API tidak mengizinkan penghitungan atau koneksi perangkat secara diam-diam.
- Peningkatan Hak Istimewa Terbatas: Meskipun API memberikan akses yang kuat, ia dirancang untuk beroperasi di dalam sandbox browser, membatasi potensi eskalasi hak istimewa pada sistem operasi pengguna.
Langkah-langkah ini sangat penting untuk melindungi pengguna, terutama di lingkungan global yang beragam di mana kepemilikan perangkat, praktik keamanan, dan literasi digital dapat sangat bervariasi. Pengembang harus mengedukasi pengguna mereka tentang prompt keamanan ini dan pentingnya hanya memberikan akses ke situs web tepercaya.
Kasus Penggunaan Praktis dan Contoh Global
API Web USB membuka dunia kemungkinan untuk aplikasi web yang berinteraksi dengan perangkat fisik. Berikut adalah beberapa contoh bagaimana ia dapat digunakan di berbagai wilayah dan industri:
1. Pendidikan dan Sains
- Laboratorium Jarak Jauh: Siswa di negara-negara dengan akses terbatas ke peralatan khusus dapat terhubung ke mikroskop USB, spektrometer, atau osiloskop di laboratorium pusat melalui antarmuka web. Ini memungkinkan mereka untuk melakukan eksperimen dan mengumpulkan data dari jarak jauh. Misalnya, sebuah universitas di India dapat menawarkan laboratorium kimia virtual di mana mahasiswa di seluruh dunia dapat mengontrol titrator bertenaga USB.
- Alat Pembelajaran Interaktif: Kit pendidikan yang menggunakan mikrokontroler (seperti Arduino atau Raspberry Pi Pico) dengan antarmuka USB dapat dikontrol melalui halaman web. Ini memungkinkan pelajaran pemrograman interaktif di mana siswa dapat melihat efek langsung dari kode mereka pada komponen fisik, terlepas dari lokasi mereka. Bayangkan sebuah bootcamp coding di Brasil mengajarkan konsep komputasi fisik menggunakan IDE berbasis web yang berkomunikasi langsung dengan matriks LED yang terhubung USB.
2. Industri dan Manufaktur
- Pemantauan dan Kontrol Mesin: Pabrik dapat menyebarkan dasbor web yang terhubung ke sensor atau pengontrol yang dilengkapi USB pada mesin. Ini memungkinkan pemantauan real-time dari jalur produksi, pembacaan suhu, atau tingkat tekanan dari perangkat apa pun dengan browser yang kompatibel. Sebuah pabrik manufaktur di Jerman bisa memiliki aplikasi web yang berinteraksi dengan perangkat pengukuran berbasis USB untuk mencatat data kontrol kualitas.
- Alat Konfigurasi: Memperbarui firmware atau mengkonfigurasi pengaturan pada peralatan industri bertenaga USB dapat dilakukan langsung melalui antarmuka web, menghilangkan kebutuhan akan penginstal perangkat lunak berpemilik untuk setiap jenis perangkat. Sebuah perusahaan di Jepang yang berspesialisasi dalam robotika mungkin menyediakan alat berbasis web untuk dengan mudah mengkonfigurasi lengan robot mereka yang terhubung USB.
3. Elektronik Konsumen dan IoT
- Manajemen Perangkat Rumah Pintar: Meskipun banyak perangkat rumah pintar menggunakan Wi-Fi atau Bluetooth, beberapa mungkin memiliki antarmuka USB untuk pengaturan awal atau diagnostik lanjutan. Sebuah aplikasi web dapat menyederhanakan proses orientasi untuk termostat pintar baru yang terhubung USB di Australia.
- Periferal Kustom: Para pehobi dan pembuat dapat membuat antarmuka web kustom untuk perangkat yang dikontrol USB mereka. Ini bisa berkisar dari panel kontrol printer 3D hingga konfigurator keyboard kustom atau sistem kontrol pencahayaan LED. Komunitas pembuat di Kanada dapat mengembangkan platform web bersama untuk mengontrol dan memamerkan instalasi seni unik bertenaga USB.
4. Layanan Kesehatan
- Pemantauan Pasien (dengan Kontrol Ketat): Di lingkungan yang terkontrol, perangkat pemantauan kesehatan non-kritis tertentu yang terhubung USB mungkin dapat diakses melalui antarmuka web untuk agregasi dan penayangan data. Penting untuk ditekankan bahwa aplikasi layanan kesehatan apa pun akan memerlukan kepatuhan yang ketat terhadap peraturan privasi (seperti HIPAA di AS, GDPR di Eropa) dan protokol keamanan yang kuat. Sebuah lembaga penelitian di Inggris dapat menggunakan Web USB untuk mengumpulkan data dari sensor lingkungan yang terhubung USB dalam studi pasien jangka panjang.
Tantangan dan Keterbatasan
Meskipun memiliki potensi, API Web USB tidak lepas dari tantangan:
- Dukungan Browser Terbatas: Seperti yang disebutkan, tidak semua browser utama mendukung Web USB, yang membatasi jangkauan aplikasi yang hanya mengandalkannya. Ini mengharuskan pengembang untuk mempertimbangkan peningkatan progresif atau solusi alternatif untuk platform yang tidak didukung.
- Driver Sistem Operasi: Meskipun Web USB mengabstraksi sebagian besar kompleksitas, sistem operasi yang mendasarinya masih memainkan peran. Terkadang, driver khusus diperlukan agar OS dapat mengenali perangkat USB dengan benar sebelum browser bahkan dapat menampilkannya. Ini bisa sangat rumit di lingkungan IT global yang beragam.
- Kompleksitas Protokol USB: USB adalah protokol yang kompleks. Memahami kelas perangkat, titik akhir, deskriptor, dan jenis transfer sangat penting. API Web USB menyediakan antarmuka JavaScript, tetapi pengetahuan mendasar tentang komunikasi USB masih diperlukan.
- Prompt Keamanan Dapat Mengintimidasi: Meskipun perlu, prompt pengguna untuk akses perangkat dapat membingungkan atau mengkhawatirkan bagi pengguna yang tidak terbiasa dengan konsep tersebut, yang berpotensi menyebabkan keengganan untuk memberikan izin. Edukasi pengguna yang jelas sangat penting.
- Tidak Ada Dukungan HID Langsung (Secara Historis): Meskipun Web USB dapat digunakan untuk meniru fungsionalitas HID (Human Interface Device), akses langsung ke perangkat HID generik pada awalnya merupakan upaya terpisah (API WebHID). Namun, Web USB tetap menjadi cara utama untuk berkomunikasi dengan perangkat USB kustom.
- Akses Terbatas ke Fitur Tingkat Rendah: API ini mengabstraksi beberapa operasi USB tingkat sangat rendah karena alasan keamanan dan kegunaan. Untuk interaksi perangkat keras yang sangat terspesialisasi yang memerlukan kontrol mendalam atas waktu paket USB atau enumerasi bus, Web USB mungkin tidak cukup.
Praktik Terbaik untuk Pengembangan Global
Saat mengembangkan aplikasi Web USB untuk audiens internasional, pertimbangkan praktik terbaik berikut:
- Prioritaskan Pengalaman dan Edukasi Pengguna:
- Berikan instruksi yang jelas dan ringkas tentang cara menghubungkan dan mengotorisasi perangkat USB.
- Gunakan bahasa yang mudah dipahami, hindari jargon jika memungkinkan.
- Jelaskan mengapa prompt browser muncul dan yakinkan pengguna tentang keamanannya.
- Tawarkan dukungan multi-bahasa untuk semua teks dan instruksi yang dihadapi pengguna.
- Implementasikan Fallback yang Kuat:
- Deteksi dukungan browser untuk Web USB dan berikan fungsionalitas alternatif atau pesan informatif untuk browser yang tidak didukung.
- Pertimbangkan untuk menawarkan aplikasi pendamping yang dapat diunduh untuk platform atau browser di mana Web USB tidak dapat digunakan.
- Tangani Kesalahan dengan Baik:
- Komunikasi USB bisa rapuh. Implementasikan penanganan kesalahan yang komprehensif untuk masalah koneksi, kegagalan transfer data, dan status perangkat yang tidak terduga.
- Berikan pesan kesalahan informatif yang memandu pengguna tentang cara menyelesaikan masalah.
- Optimalkan untuk Kinerja dan Bandwidth:
- Jika aplikasi Anda perlu memproses data dalam jumlah besar dari perangkat USB, pertimbangkan penanganan data yang efisien dalam JavaScript (misalnya, menggunakan array yang diketik) dan berpotensi melakukan debouncing atau throttling pembaruan untuk menghindari membebani browser atau perangkat.
- Pertimbangkan berbagai kecepatan internet dan kemampuan perangkat secara global saat merancang sinkronisasi data atau fitur berbasis cloud.
- Uji di Berbagai Lingkungan:
- Uji aplikasi Anda dengan berbagai perangkat USB, sistem operasi, dan versi browser.
- Simulasikan kondisi jaringan dan konfigurasi perangkat keras yang berbeda untuk memastikan keandalan.
- Patuhi Standar Keamanan:
- Selalu gunakan HTTPS.
- Definisikan dengan jelas izin yang dibutuhkan aplikasi Anda dan alasannya.
- Transparan tentang penanganan data dan privasi.
- Manfaatkan ID Vendor dan Produk Secara Strategis:
- Meskipun pemfilteran berdasarkan VID/PID umum, pertimbangkan untuk mendukung kelas atau protokol USB yang lebih luas jika aplikasi Anda dirancang untuk berbagai perangkat.
- Sadarilah bahwa beberapa produsen menggunakan pasangan VID/PID generik, yang mungkin memerlukan pemfilteran atau pemilihan pengguna yang lebih spesifik.
Masa Depan Web USB
API Web USB adalah langkah dasar untuk menjadikan web sebagai platform yang lebih interaktif dan mampu untuk kontrol perangkat keras. Seiring vendor browser terus mengimplementasikan dan menyempurnakan API, dan seiring semakin banyak pengembang yang mengeksplorasi potensinya, kita dapat berharap untuk melihat lonjakan aplikasi web inovatif yang terintegrasi secara mulus dengan dunia fisik.
Pengembangan berkelanjutan dari standar web terkait, seperti API Web Serial (untuk komunikasi serial melalui USB) dan API WebHID (untuk Human Interface Devices), semakin memperkuat kemampuan web untuk berinteraksi dengan perangkat keras. API ini, ketika digunakan bersama dengan Web USB, menciptakan perangkat yang kuat bagi pengembang yang ingin membangun solusi perangkat keras berbasis browser yang canggih.
Bagi komunitas pengembang global, API Web USB merupakan peluang untuk membangun alat dan pengalaman yang dapat diakses secara universal. Dengan mengabstraksi kompleksitas pengembangan asli dan menyediakan antarmuka yang terstandarisasi dan aman, ini menurunkan hambatan masuk untuk membuat aplikasi web canggih yang digerakkan oleh perangkat keras. Baik untuk pendidikan, industri, atau proyek pribadi, kemampuan untuk terhubung langsung ke perangkat USB dari browser akan merevolusi cara kita berinteraksi dengan teknologi.
Kesimpulan
API Web USB Frontend adalah kemajuan signifikan dalam teknologi web, memberdayakan pengembang untuk menjembatani kesenjangan antara dunia digital dan fisik. Dengan mengaktifkan akses dan kontrol perangkat USB langsung di dalam browser, ini membuka berbagai kemungkinan untuk membuat aplikasi web interaktif yang ditingkatkan dengan perangkat keras. Meskipun tantangan terkait dukungan browser dan kompleksitas bawaan USB tetap ada, manfaat keamanan yang jelas dan potensi inovasi lintas platform menjadikannya API yang layak untuk dijelajahi.
Bagi pengembang di seluruh dunia, merangkul API Web USB berarti memasuki era di mana aplikasi web dapat menawarkan lebih dari sekadar informasi; mereka dapat menawarkan interaksi nyata dengan perangkat yang membentuk dunia kita. Seiring ekosistem matang dan dukungan tumbuh, API Web USB tidak diragukan lagi akan menjadi alat yang sangat diperlukan untuk membangun generasi berikutnya dari pengalaman web yang terhubung, cerdas, dan dapat diakses secara universal.