Baca 4 menit
Bagaimana kami membangun nopa, bagian 2
Di bagian pertama saya berjanji membuka kap mesinnya. Ini dia: kenapa nopa tidak punya backend, bagaimana pekerjaan berat muat di satu tab browser, di mana hasil kerja Anda disimpan — dan cara memeriksa setiap kata di sini sendiri dalam satu menit.
Tidak ada tempat untuk mengunggah
Kebanyakan situs alat adalah halaman di depan server: file Anda naik, server bekerja, hasilnya kembali. nopa membaliknya. Situsnya berupa file statis — HTML, JavaScript, fon — dan kodelah yang datang kepada Anda, bukan file Anda yang pergi kepadanya. Saat Anda menggabungkan dua PDF, penggabungan terjadi di tab Anda, dan PDF-nya tidak keluar dari sana.
Itu juga alasan tidak ada akun. Akun ada untuk menyimpan sesuatu milik Anda di server, dan tidak ada server yang menyimpan apa pun — jadi tidak ada tempat untuk masuk.
Pekerjaan berat, di satu tab
Browser sudah menjadi mesin yang serius, dan setiap alat memakai bagian yang cocok untuk tugasnya:
- PDF: pdf-lib menyusun dan menulis ulang file, PDF.js menggambar halaman yang Anda lihat. Kompres PDF, dan keduanya berjalan di perangkat Anda.
- Foto dan audio: jaringan saraf berjalan di WebAssembly di atas ONNX Runtime. Alat untuk menghapus background dan mengubah rekaman jadi teks mengunduh modelnya sekali lalu menyimpannya; foto Anda yang pergi ke model, tidak pernah sebaliknya.
- Pindaian: tesseract.js membaca teks halaman hasil pindai di thread terpisah. Pertama kali ia mengunduh model baca 4–5 MB; setelah itu modelnya sudah ada.
- File Word: mammoth membaca .docx dan docx menuliskannya kembali, sehingga editor Word bisa membuka kontrak yang dikirim kepada Anda dan mengembalikannya sebagai file Word sungguhan.
- Game: jsnes menjalankan NES utuh di JavaScript. Halaman NES membawa dua game homebrew yang pembuatnya mengizinkan, dan memainkan file .nes milik Anda tanpa mengunggahnya.
Harganya: kode harus datang kepada Anda
Ada sisi lainnya. Alat di sisi server mengirim halaman ringan dan mengerjakan yang berat di tempat yang tidak Anda lihat; kami harus mengirim bagian yang berat kepada Anda. Jadi kami menghitungnya: sebuah skrip di repositori kami membuka setiap halaman di browser sungguhan dan menjumlahkan JavaScript yang diunduh sebelum Anda menekan apa pun. Putaran pertama menemukan halaman yang menarik 1,4 MB tanpa guna — cerita lengkapnya, dengan angka, ada di tulisan sebelumnya.
Aturannya sejak itu: sebuah mesin dimuat saat tombolnya ditekan. Mesin PDF datang saat Anda membuka PDF, model baca saat Anda meminta pindaian dibaca. Minggu ini aturan itu menangkap satu kasus lagi: papan mengunduh pustaka PDF 170 KB setiap kali dibuka, demi satu item menu.
Di mana pekerjaan Anda disimpan
Yang Anda simpan — papan, daftar tugas, dokumen, file hasil alat — masuk ke IndexedDB, basis data milik browser itu sendiri, di perangkat Anda. Aplikasinya menyimpan selagi Anda bekerja: tutup tab, dan semuanya ada di tempat terakhir Anda tinggalkan.
Bagian yang jujur: penyimpanan itu milik browser ini. Hapus data situsnya, dan ia hilang; ambil ponsel Anda, dan ia tidak ada di sana. Karena itu cadangan hanya sejauh satu klik — seluruh desktop sebagai satu file, di Settings → Data — dan di layar yang sama Anda bisa meminta browser agar tidak menghapus nopa saat ruang disk menipis.
Offline, setelah kunjungan pertama
Sebuah service worker menyimpan salinan aplikasi di perangkat Anda, jadi setelah nopa pernah dibuka, alat-alatnya terbuka tanpa koneksi. Tidak semuanya disimpan sejak awal: model jaringan saraf dan model baca diunduh hanya saat sebuah alat membutuhkannya, karena ponsel tidak perlu menyimpan seratus megabyte model untuk berjaga-jaga.
Periksa sendiri
Buka alat pengembang browser Anda, pindah ke tab Network, dan pakai alat apa saja. Anda akan melihat dua jenis permintaan: kode kami sendiri yang datang dari nopa.space, dan statistik kunjungan untuk Yandex Metrica dan PostHog — halaman mana yang dibuka, alat mana yang dipakai. Anda tidak akan melihat file Anda pergi ke mana pun, karena memang tidak. Pemblokir konten mematikan statistiknya, dan semua alat tetap bekerja sama.
Kami sendiri pernah keliru di sini. Panel di halaman produk kami dulu menjanjikan “tidak ada satu pun POST” — diukur pada build tanpa statistik, sementara di produksi penghitungnya mengirim POST sendiri. Pembaca akan menangkapnya dalam sepuluh detik; kami menangkapnya minggu ini dan menulis ulang panel itu agar mengatakan persis apa yang akan Anda lihat.
Yang tidak bisa dilakukan desain ini
Server bisa melakukan hal yang tidak bisa dilakukan tab, dan kami lebih suka mengatakannya:
- Tidak ada sinkronisasi. Ponsel dan laptop Anda masing-masing menyimpan salinannya; file cadangan memindahkannya, tautan langsung tidak ada.
- Tidak ada kolaborasi real-time. Dua orang yang menyunting satu papan butuh server di antara mereka.
- Peluncuran pertama alat AI menunggu modelnya terunduh.
- Ponsel lebih lambat dari pusat data. Kebanyakan pekerjaan selesai sekejap; audio satu jam butuh waktu.
Selanjutnya
Kalau ada yang rusak di perangkat Anda atau Anda butuh alat yang belum kami punya, tulis ke hello@nopa.space — dibaca oleh manusia sungguhan. Atau mulai dari katalog; bagian pertama, tentang kenapa nopa ada, ada di sini.