Pada aplikasi offline-enabled, ada beberapa masalah yang perlu dipertimbangkan, yaitu:
- Mengisolasi layar data
- Memutuskan fitur mana yang di-offline-kan (strategi koneksi)
- Memutuskan cara aplikasi melakukan sesuatu
- Menerapkan sinkronisasi data.
Mengisolasi Layar Data
Pada kebanyakan aplikasi web tidak ada layar data yang sebenarnya.
Secara umum, mengisolasi layar data merupakan langkah awal yang bagus.
Ketika anda menambahkan sebuah penyimpanan data lokal pada aplikasi anda, anda akan mendapatkan sebuah tempat dimana semua penyimpanan data dan request yang diterima dilewatkan. Contohnya, jika aplikasi AJAX mengeluarkan sebuah JSON(JavaScript Object Notation) untuk me-request secara langsung ke server untuk mendapatkan semua account untuk satu user, anda mungkin menggantinya dengan meminta objek intermediate untuk mendapatkan semua account untuk user tersebut. Objek ini kemudian dapat memutuskan apakah mengambil data dari server, penyimpanan lokal, atau kombinasi keduanya. Hampir mirip, ketika aplikasi ingin men-update account user, aplikasi melakukan hal yang sama dengan memanggil objek intermediate. Objek intermediate dapat memutuskan kemudian, apakah menuliskan data secara lokal, apakah mengirimkan data ke server dan mensikronisasikannya.
Anda dapat menganggap objek intermediate ini sebagai sebuah layar pertukaran data yang mengimplementasikan interface yang sama seperti layar data. Sebagai langkah pertama, anda dapat membuat penukar data(data switch) meneruskan semua panggilan ke layar data yang berinteraksi dengan server. Langkah ini sangat berguna karena ini merupakan jalan kode yang diikuti ketika gears tidak diinstal atau bahkan user tidak mengizinkan aplikasi bekerja secara offline. Sebagai catatan, data switch tidak terlalu diperlukan( contohnya GearPad tidak memiliki layar data switch).
Anda dapat menganggap objek intermediate ini sebagai sebuah layar pertukaran data yang mengimplementasikan interface yang sama seperti layar data. Sebagai langkah pertama, anda dapat membuat penukar data(data switch) meneruskan semua panggilan ke layar data yang berinteraksi dengan server. Langkah ini sangat berguna karena ini merupakan jalan kode yang diikuti ketika gears tidak diinstal atau bahkan user tidak mengizinkan aplikasi bekerja secara offline. Sebagai catatan, data switch tidak terlalu diperlukan( contohnya GearPad tidak memiliki layar data switch).
Langkah selanjutnya, seperti pada diagram di bawah, adalah membuat layar data yang menggunakan database gears dari pada mengambil data dari web server. Hal ini akan menjadi lebih sederhana jika layar data ini memiliki interface yang sama dengan layar data yang ada, yang digunakan untuk berkomunikasi dengan server. Jika interface-nya berbeda maka perlu dilakukan penerjemahan dan mungkin anda melakukan hal itu pada layar data ini. Untuk menguji langkah ini, anda dapat mengatur layar data switch untuk berkomunikasi dengan layar data(lokal) yang baru ini. Anda mungkin perlu terlebih dahulu mengisi database untuk mempermudah pengujian.
Arsitektur tanpa layar dataJika aplikasi tidak distruktur dengan layar data dan penambahan layar data bukan suatu pilihan, masih memungkinkan untuk mengisolasi layar data dengan menangkap semua panggilan ke web server, sebelum dikirimkan. Contohnya, anda dapat menangkap form submit(pada saat submit) dan memutuskan apakah aplikasi menggunakan penyimpanan lokal data atau data di server.
Penerapan ini melibatkan pencarian semua fungsi dan method yang mengirimkan request ke server, dan mengubah alurnya. Letak tantangannya adalah method ini memerlukan banyak usaha, seperti melewatka URL, membuat form menghasilkan hasil yang sama server. Dalam pelaksanaannya, anda tidak lagi mengimplementasikan kembali bagian besar dari web server pada sisi client. Bagaimanapun juga, hal ini dapat mengaktifkan pilihan untuk aplikasiAJAX yang ada, yang tidak dapat diarsiteturkan kembali.
Penerapan ini melibatkan pencarian semua fungsi dan method yang mengirimkan request ke server, dan mengubah alurnya. Letak tantangannya adalah method ini memerlukan banyak usaha, seperti melewatka URL, membuat form menghasilkan hasil yang sama server. Dalam pelaksanaannya, anda tidak lagi mengimplementasikan kembali bagian besar dari web server pada sisi client. Bagaimanapun juga, hal ini dapat mengaktifkan pilihan untuk aplikasi
Untuk beberapa alasan tertentu, setiap fitur pada aplikasi tidak memungkinkan available untuk offline. Anda perlu memilih fitur yang anda inginkan untuk mendukung secara lokal dan mengimplementasikan logic yang memutuskan kapan menggunakan penyimpanan lokal dan kapan dapat terhubung ke server. Kita dapat menyebutnya “Connection Strategy”.
Anda mungkin mengira bahwa anda akan selalu melakukan penyimpanan data secara loakal karena lebih cepat. Meskipun begitu, ada banyak alasan tertentu mengapa anda membutuhkan akses data ke server. Contohnya:
Anda mungkin mengira bahwa anda akan selalu melakukan penyimpanan data secara loakal karena lebih cepat. Meskipun begitu, ada banyak alasan tertentu mengapa anda membutuhkan akses data ke server. Contohnya:
- Data sangat transient(penyimpanan sementara) sehingga sangat tidak masuk akal untuk mendapatkannya. Misalnya: aplikasi yang menyediakan real-time stock quotes
- Beberapa data aplikasi yang hanya ada ketika online. Misalnya: instant messaging
- Aplikasi mungkin memilih untuk menyimpan data hanya untuk data yang paling sering diakses. Misalnya, jika user dapat menge-set preference pada sebuah aplikasi.
Perhitungan atau requirement disk disk space, membuatnya tidak mungkin membuat fitur online. Misalnya, fitur ini membutuhkan banyak data.Khususnya, solusi utama adalah menggunakan penyimpanan lokal sebanyak mungkin, karena hal itu lebih cepat dibandingkan remote connection.
Akan tetapi, akan semakin banyak pekerjaan yang dilakukan oleh aplikasi secara lokal, akan semakin banyak kode yang diperlukan untuk mengimplementasikan fitur secara lokal dan mensinkronisasi data.Ada banyak keuntungan dan kerugian yang perlu dipertimbangkan, dan beberapa fitur yang mungkin tidak mendukung secara lokal.
Akan tetapi, akan semakin banyak pekerjaan yang dilakukan oleh aplikasi secara lokal, akan semakin banyak kode yang diperlukan untuk mengimplementasikan fitur secara lokal dan mensinkronisasi data.
Pertanyaan mendasar tentang semua aplikasi yang membolehkan offline, harus menjawab mengenai “cara kerjanya”:
- Cara kerja aplikasi harus dibedakan antara mode offline dengan mode online, biasanya diindikasi melalui beberapa perubahan pada user interface. User berhati-hati pada state dan berpartisipasi mengganti state.
- Cara kerja aplikasi tidak mengharuskan user turut campur mengubah state, karena aplikasi tersebut dapat merubah state offline dan online nya sendiri.
Modal
Dalam cara kerja aplikasi, ketika aplikasi online, aplikasi berkomunikasi dengan server. Ketika aplikasi offline aplikasi menggunakan penyimpanan lokal. Data harus disinkronisasi ketika aplikasi berubah mode.
Keuntungan modal application adalah sederhana untuk diimplementasikan dan mengusahakan sendiri agar aplikasi berfungsi saat offline.
Kerugiannya yaitu:
- User harus ingat untuk mengganti mode. Jika user lupa, maka mereka tidak akan mendapatkan data yang mereka butuhkan baik ketika offline, maupun saat online akan tetapi koneksi terputus di tengah jalan.
- Jika koneksi terputus-putus, user harus memilih salah satu pengaturan, atau terus menerus mengganti koneksi ketika putus-sambung.
- Karena penyimpanan lokal tidak selalu up-to-date, hal ini dapat menyebabkan memperlambat applikasi ketika terhubung ke server.
Dalam aplikasi modeless, aplikasi berkerja dengan mengansumsikan aplikasi dalam keadaan offline, atau kapan saja dapat kehilangan koneksi. Oleh sebab itu applikasi haruse menyediakan penyimpanan data lokal sebanyak mungkin, dan terus menerus, data kecil akan disinkronisasi di bagian background ketika server available. Sehingga data dapat tersinkronisasi ketika kembali online.
Keuntungan aplikasi modales yaitu:
- Meningkatkan kepuasan user. User tidak harus mewaspadai koneksi internet atau merubah state.
- Aplikasi dapat berjalan dengan smooth bahkan dengan koneksi yang terputus-putus
- Karena penyimpanan lokal tetap dijaga up-to-date, sehingga dapat mengoptimisasi koneksi server
Kerugiannya yaitu:
- Hal ini sangat sulit untuk diimplementasikan
- Kekhawatiran terbesar adalah ketika membiarkan sinkronisai pada bagian background, hal ini dapat meyebabkan konsumsi banyak resource dan membuat aplikasi menjadi lambat.
- Menguji aplikasi akan semakin sulit, karena logic sinkronisasi terjadi di bagian background dan tidak pada reaksi tertentu dari user.
Contoh aplikasi modeless dapat dilihat dari gearpad. Database akan selalu dirubah, dan secara bebas mensinkronisasikan perubahan ke server.Google reader merupakan salah satu contoh aplikasi modal.
Tidak masalah strategi koneksi dan modality apa yang digunakan, data dalam database lokal akan disinkronisasikan dengan data server.
Contoh, kapan sinkronisasi data lokal dan data server: - User membuat perubahan ketika offline
- Data di-shared dan dapat diganti oleh pihak lain.
- Data datang dari sumber luar, seperti sebuah penyuplai(penyedia)
Ini adalah sinkronisasi yang paling mudah. Disebut manual karena user yang memutuskan kapan dilakukan sinkronisasi. Hal ini dapat dilakukan dengan cara sederhana, dengan meng-upload semua data lama ke server, dan meng-copy data baru dari server sebelum offline.
Sinkronisasi manual dapat dilakukan dengan syarat:
- Jumlah data cukup kecil untuk di-download dalam waktu yang masuk akal
- User secara eksplisit mengindikasikan kapan dia akan offline, biasanya melalui tombol pada aplikasi
Masalah dari pengimplementasian metode ini dan ketika membuat mode offline, yaitu:
- User tidak selalu tahu state dari koneksi internet mereka. Koneksi internet bisa saja terputus ataupun putus-sambung, seperti bis.
- User lupa mensinkronisasi sebelum offline.
Sinkronisasi manual merupakan cara yang bagus untuk memulai karena cukup mudah dalam mengiplementasikannya. Akan tetapi, membutuhkan kewaspadaan dan turut campur user dalam proses sinkronisasi.
Dengan sinkronisasi ini, aplikasi terus menerus mensinkronisasi data antara data lokal dan data server. Hal ini dapat dilakukan dengan sewaktu-waku mem- ping ke server atau lebih baik, membiarkan server memaksa data ke client(ini disebut Comet dalam Ajax lingo)
Keuntungan sinkronisasi di bagian background yaitu:
- Data tersedia kapan saja, kapanpun ketika user offline, atau tiba-tiba terputus
- Performansi ditingkatkan ketika menggunakan koneksi lambat.
Sisi terburuknya adalah engine sinkronisasi mungkin menggunakan banyak resource dan melambatnya aplikasi ketika bagian background bekerja(Jika tidak menggunakan Worker Pool). Dengan menggunakan Worker Pool pengorbanan untuk sinkronisasi dapat diminimumkan dan tidak terlalu berpengaruh terhadapa interaksi dengan user.





