Mengenai jumlah RAM dan Safari

Saya baru saja selesai membaca review iPad Air 2 dari Jason Snell (@jsnell) di blognya. Di tengah-tengah review, saya menemukan bagian ini:

When an iOS device gets low on memory, it gets aggressive about freeing some back up. This all happens automatically, in the background, and it’s a little like a magic trick—it’s designed so you won’t really notice.

dan juga ini…

Let’s say you’ve got a few tabs open on your iPad, to a few favorite sites. Sometimes when you tap on a tab, it opens immediately. Other times, it’s a blank page and you have to wait while Safari loads and renders the page again. That’s the same story—that page was purged from memory because the system needed the space for something else. Such is life on a device with very little RAM.

Review-nya lumayan panjang, dan bukan hanya soal RAM yang dibahas, cukup menambah wawasan membacanya.

Kembali ke topik. Pernahkah Anda mendapati tab-tab Safari di iPhone atau iPad Anda reload sendiri (sesekali ataupun secara berkala) baik itu pada saat Anda hanya pindah dari satu tab ke tab lainnya, ataupun pada saat kembali/berpindah dari aplikasi lain (multitasking)? Saya yakin pernah. Itu bukan fitur tapi lebih ke bug. Menjengkelkan memang. Teks-teks yang sudah ditulis pada form komentar jadi hilang, dan kadang-kadang “sessions expired” muncul dari website yang kita kunjungi.

Safari sering reload?

Mengapa tab Safari sering reload sendiri di iPhone/iPad?

Kami telah mensurvey 100 orang dan jawaban teratas adalah “Karena RAM-nya iPhone/iPad kecil, cuma 1 GB.”

Sayangnya fake survey kami ini dilakukan sebelum iPad Air 2 diluncurkan. Kalau diadakan setelah iPad Air 2 diluncurkan, maka saya yakin jawaban teratasnya pasti bukan itu. Karena menurut hasil review Jason Snell, yang sudah saya kutip di atas, kejadian “reload sendiri” atau auto-reload juga terjadi pada iPad Air 2 yang seperti kita tahu bersama kalau jumlah RAM-nya sudah 2 GB.

Lalu, apa yang sebenarnya terjadi?

Apple sudah mendesain proses multitasking sedemikan rupa sehingga ketika jumlah RAM yang tersedia sisa sedikit dan ada aplikasi yang membutuhkan memori lebih, maka iOS akan berusaha membuat ruang kosong untuk keperluan aplikasi ini dengan berbagai cara. Singkat kata, proses multitasking di iOS dikelola secara otomatis, pengguna tidak perlu mematikan aplikasi background secara manual. Ya, mungkin sudah banyak yang tahu mengenai proses ini tapi banyak yang belum menyadari kalau mekanisme seperti ini juga berlaku untuk tab di Safari, bukan hanya aplikasi-aplikasi saja.

Ketika Anda berpindah dari satu tab ke tab lainnya, atau dari aplikasi lain ke Safari dan mendapati tab yang Anda buka di Safari ter-reload dengan sendirinya, yang sedang terjadi adalah iOS sedang “membersihkan” halaman/tab tersebut dari RAM/memori agar bisa digunakan oleh aplikasi lain yang membutuhkan. Sayangnya belum/tidak ada cara untuk menghentikan auto-reload ini terjadi, pencegahannya adalah dengan mengurangi jumlah tab Safari yang terbuka.

Mengapa jumlah RAM 2 GB tidak menghilangkan masalah auto-reload pada tab Safari? Well, karena adanya limitasi dari iOS/ browser Safari itu sendiri.

Kalau ada yang masih ingat, saya pernah memasang video hasil speed test dua smartphone Android terbaru melawan iPhone 6. Hasilnya? iPhone 6 menang meskipun hanya dengan RAM 1 GB. Dari situ saya pikir kalau RAM 1 GB di perangkat iOS sebenarnya cukup untuk kebanyakan tugas. Kemudian ada yang menanggapinya, dan mengambil contoh kasus tab Safari yang sering reload sendiri. Menurut saya, ketika Anda mengambil contoh kasus tab Safari sebagai bukti bahwa RAM 1 GB di perangkat tidak cukup, itu kurang tepat.

Browser cache

Dalam dunia komputer kita mengenal istilah cache, yang menurut Wikipedia:

…adalah tempat menyembunyikan atau tempat menyimpan sementara. Sesuai definisi tersebut cache memori adalah tempat menyimpan data sementara. Cara ini dimaksudkan untuk meningkatkan transfer data dengan menyimpan data yang pernah diakses pada cache tersebut, sehingga apabila ada data yang ingin diakses adalah data yang sama maka maka akses akan dapat dilakukan lebih cepat

Singkatnya, cache adalah sekumpulan objek atau data yang pernah diakses sebelumnya yang dapat dipergunakan kembali untuk meningkatkan kinerja aplikasi, dalam hal ini adalah Safari (browser).

Di antara beberapa tipe cache, yang berkaitan dengan browser ada dua jenis, yaitu component cache dan page cache.

  1. Component cache
    Disebut juga object cache, data berupa file-file individual seperti HTML, CSS, JavaScript, file gambar (JPG/PNG/GIF) dan komponen lainnya. Ketika browser mengunjungi sebuah halaman website, browser akan memeriksa component cache ini terlebih dahulu untuk mencari jenis file yang sudah pernah ada, yang dibutuhkan sebelum melakukan permintaan ulang (request) terhadap jenis file tersebut.
  1. Page cache
    Dikenal juga sebagai back/forward cache, menyimpan keseluruhan halaman web dan semua komponennya serta kondisi halaman saat diakses. Ketika Anda men-tap tombol back/kembali atau forward/maju di browser, maka browser akan memuat halaman dari page cache jika memungkinkan sehingga halaman jadi lebih cepat diakses dan kondisinya tetap sama seperti saat ditinggalkan.

Tambahan mengenai Page cache dari halaman blog (WebKit):

When the Page Cache works it makes clicking the back button almost instantaneous.

You can do a search, click a search result, then go back and immediately be looking at the exact same results page. You might be browsing an aggregator site like Reddit or Digg and want to rapidly view a lot of different links in the same tab. You might be navigating an image gallery and decide to compare two images by alternately clicking “back” and “forward” rapidly. Or you might have simply clicked on the wrong link and want to go back to correct your mistake.

Anytime you might click the back button or the forward button you unknowingly hope the Page Cache is on your side. When the Page Cache is used, users are happy even though they’re not aware of the magic behind the scenes.

Data-data cache dari website ini tersimpan pada RAM/memori (terbatas), oleh karena itu ketika jumlah tab yang terbuka telah cukup banyak menggunakan RAM (tampilan serta jenis konten dari halaman website juga mempengaruhi), iOS akan secara otomatis mengirimkan sinyal “memori lemah” ke Safari dan Safari kemudian akan mengeksekusi sinyal ini dengan mengorbankan sebuah atau bahkan beberapa tab/halaman yang terbuka untuk diambil memorinya (biasanya dipilih berdasarkan kebijaksanaan iOS). Nah, begitu pengguna berpindah ke tab yang telah dikorbankan tadi, tab/halaman tersebut menjadi tidak utuh lagi, kondisinya tidak sama lagi seperti saat dibuka pertama kali karena data-data chace-nya telah hilang sebagian/keseluruhan dari memori, makanya tab/halaman tersebut terpaksa harus di-reload (data-datanya di-download ulang alias re-fetch) agar halamannya menjadi utuh kembali kepada pengguna.

X GB

Karena adanya limitasi atau batasan dari iOS dan Safari itu sendiri, berapa pun jumlah RAM yang ada pada perangkat iOS, masalah auto-reload pada tab Safari ini akan tetap ada karena seperti itulah Safari didesain dan seperti itulah cara iOS mengelola memori (FYI, terkadang membuka banyak tab Safari lebih membutuhkan banyak memori dibanding membuka banyak aplikasi).

Apa alasan Apple membuat batasan seperti ini untuk alokasi memori Safari? Mungkin penjelasan dari S’mac (member forum Ars Technica) bisa sedikit memberikan gambaran kepada kita:

If you set the maximum browser allocation too large, you may begin to bump into long term flash app and data storage. If you set the maximum browser allocation too small, too many tabs need to get reloaded. On the desktop, the browser allocation can be large enough so that this is probably never even an issue, but on a mobile device, you may not have that luxury. Assuming memory management is properly implemented (so that all storage is available to the browser, not just RAM) making the RAM 2 GB instead of 1 GB probably doesn’t solve this problem.

Mungkin kalau Apple mengubah mekanisme pengelolaan RAM pada iOS atau menulis ulang Safari baru deh masalah auto-reload pada tab Safari bisa hilang.

So, what now?

Dari hasil penelusuran beberapa blog dan forum, beberapa orang merekomendasikan untuk menggunakan browser selain Safari (pihak ketiga) yang mempunyai kemampuan menyimpan cache website ke storage/disk atau yang punya fitur offline reading. Selain itu, Anda hanya bisa “open and pray”.