Jika kita melihat program vintage Netscape Navigator atau versi awal Microsoft Word, program-program itu berukuran kurang dari 50 MB. Sekarang ketika saya menginstal google chrome itu 200 MB dan versi desktop Slack adalah 300 MB. Saya membaca tentang beberapa aturan bahwa program akan mengambil semua memori yang tersedia tidak peduli berapa banyak tetapi mengapa?
Mengapa ukuran program saat ini sangat besar dibandingkan dengan 10 atau 15 tahun yang lalu? Program tidak melakukan lebih banyak fungsi secara signifikan dan tidak terlihat sangat berbeda. Apa itu babi sumber daya sekarang?
programming-practices
files
delivery
Niklas Rosencrantz
sumber
sumber
Jawaban:
"Terlihat sangat berbeda" adalah masalah persepsi. Grafik saat ini harus terlihat bagus dengan resolusi layar yang sangat berbeda dari sebelumnya, dengan hasil gambar 100x100 yang dulu lebih dari cukup baik untuk sebuah logo sekarang akan terlihat sangat norak. Itu harus diganti dengan gambar 1000x1000 dari hal yang sama, yang merupakan faktor 100 di sana. (Saya tahu Anda dapat menggunakan grafik vektor saja, tetapi itu hanya menekankan intinya - kode rendering grafik vektor harus ditambahkan ke sistem yang tidak membutuhkannya sebelumnya, jadi ini hanya pertukaran dari satu jenis peningkatan ukuran ke yang lainnya.)
"Bekerja secara berbeda" juga merupakan masalah persepsi. Peramban hari ini melakukan lebih banyak hal secara signifikan daripada satu sejak 1995. (Cobalah berselancar di internet dengan laptop bersejarah pada suatu hari hujan - Anda akan menemukan itu hampir tidak dapat digunakan.) Tidak banyak dari mereka yang digunakan sangat banyak, dan penggunaannya mungkin sama sekali tidak menyadari 90 % dari mereka, tetapi mereka ada di sana.
Selain itu, tentu saja, adalah kecenderungan umum untuk menghabiskan lebih sedikit waktu untuk mengoptimalkan hal-hal untuk ruang dan lebih banyak pada memperkenalkan fitur-fitur baru. Ini adalah efek samping alami dari komputer yang lebih besar, lebih cepat, lebih murah untuk semua orang. Ya, adalah mungkin untuk menulis program yang seefisien sumber daya seperti pada 1990, dan hasilnya akan sangat cepat dan apik. Tapi itu tidak akan hemat biaya lagi; browser Anda akan membutuhkan waktu sepuluh tahun untuk menyelesaikannya, pada saat itu persyaratannya akan berubah sepenuhnya. Orang-orang biasa memprogram dengan sangat memperhatikan efisiensi karena mesin-mesin kecil yang lambat tadi memaksa mereka untuk melakukannya, dan semua orang juga melakukannya. Begitu ini berubah, hambatan untuk keberhasilan program bergeser dari mampu berjalan sama sekali menjadi berjalansemakin banyak benda mengkilap , dan di sanalah kita berada sekarang.
sumber
tendency to spend less time on optimizing things for space
Ini. Ketika saya menulis kode, saya tidak mengoptimalkan ruang atau kecepatan. Saya mengoptimalkan untuk pemeliharaan. Lebih penting bahwa basis kode dapat berubah dengan mudah daripada cepat atau kecil. Saya dapat berharap bahwa untuk setiap keluhan tentang kecepatan program, saya akan mendapatkan sepuluh permintaan untuk fitur baru dan nol permintaan untuk membuatnya lebih kecil.Jika Anda membandingkan Netscape Navigator dengan peramban modern, ada perbedaan besar dalam fungsi. Bandingkan saja HTML 3.2 Spec (51 halaman saat saya melakukan preview cetak) dengan HTML Spec saat ini (versi PDF adalah 1155 halaman). Itu peningkatan ukuran 20x.
Netscape Navigator tidak memiliki DOM dan tidak memiliki CSS! Tidak ada perubahan dinamis pada dokumen, tidak ada JavaScript yang memodifikasi DOM atau style-sheet. Tidak ada tab. Tidak ada audio atau video. Peramban modern adalah program yang jauh lebih kompleks.
sumber
EM
elemen HTML 3,2 - delapan atau sembilan kata penuh - dengan panjang yang sama dalam spesifikasi HTML 5 - bagi saya, lebih dari satu screenful termasuk materi sekitarnya yang menggambarkan elemen, di mana itu berlaku dan apa tujuan penggunaannya.Salah satu alasannya adalah bahwa data yang dikemas dalam aplikasi lebih besar karena mereka memiliki resolusi dan kualitas yang lebih tinggi. Ikon di masa Netscape adalah paling banyak 32x32 piksel, dengan kedalaman paling banyak 8 bit, (mungkin hanya 4,) sementara sekarang mungkin sekitar 64x64 dan warnanya benar dengan transparansi, artinya kedalaman 32 bit. Itu 16 kali lebih besar. Dan ruang sangat murah sehingga orang sering tidak repot-repot memeriksa opsi "terkompresi" saat menghasilkan PNG.
Alasan lain adalah bahwa aplikasi saat ini membawa sejumlah data yang membingungkan dengan mereka, yang aplikasi lama tidak. Ada aplikasi hari ini yang dikirimkan bersama dengan presentasi "memulai" dalam video .
Alasan lain adalah bahwa bahasa pemrograman saat ini cenderung cocok dengan lingkungan run-time yang kaya, yang cukup besar, masing-masing mencapai 100MB. Bahkan jika Anda tidak menggunakan semua fitur dari lingkungan run-time Anda, Anda masih harus mengemas semuanya dengan aplikasi Anda.
Tetapi alasan utamanya adalah bahwa saat ini ada berton-ton perpustakaan di luar sana yang dapat kita gunakan dalam aplikasi kita, dan kita telah mengembangkan budaya menggunakan perpustakaan untuk menghindari penemuan kembali yang konstan dari roda. Tentu saja, begitu Anda mulai menggunakan perpustakaan, beberapa pertanyaan muncul, dan kami telah mengembangkan kebiasaan memberikan jawaban paling liberal kepada mereka:
Apakah layak untuk memasukkan pustaka lain jika hanya akan digunakan oleh salah satu fungsi saya? - ya.
Apakah layak untuk menyertakan pustaka lain jika saya hanya membutuhkan sebagian kecil dari seluruh kekayaan fungsionalitas yang ditawarkan oleh pustaka itu? - ya.
Apakah layak untuk memasukkan perpustakaan lain jika dimasukkannya hanya akan menyelamatkan saya dari 2 hari kerja? - ya.
Apakah layak untuk menyertakan beberapa perpustakaan yang melayani tujuan yang kurang lebih sama hanya karena programmer yang berbeda pada daftar gaji saya sudah terbiasa dengan perpustakaan yang berbeda? - ya.
(Harap dicatat bahwa saya hanya mengamati kecenderungan ini, saya tidak membuat pernyataan apa pun tentang apakah saya setuju atau tidak setuju dengan mereka.)
Alasan lain yang layak disebutkan adalah bahwa ketika mencoba memutuskan aplikasi mana yang akan digunakan di antara beberapa pilihan, beberapa pengguna berpikir bahwa yang menempati lebih banyak ruang akan lebih penuh fitur, akan memiliki grafik yang lebih menarik, dll. (Yang omong kosong, tentu saja .)
Jadi, untuk menyimpulkan, apakah perangkat lunak berperilaku seperti gas? Apakah ia cenderung menempati semua ruang yang tersedia untuknya? Dalam arti tertentu ya, tetapi tidak sampai batas yang mengkhawatirkan. Jika kita melihat apa yang paling memakan ruang di drive kita, bagi kebanyakan dari kita jawabannya adalah bahwa itu bukan aplikasi, tetapi media seperti film dan musik sejauh ini . Perangkat lunak belum membengkak pada tingkat yang sama dengan kapasitas penyimpanan yang telah berkembang, dan tidak mungkin akan pernah demikian, sehingga di masa depan aplikasi cenderung mewakili sebagian kecil dari ruang penyimpanan yang tersedia bagi pengguna.
sumber
Sebagai tambahan untuk jawaban lainnya, 10 tahun yang lalu biasanya ada versi terpisah untuk versi terlokalisasi / internasional. Sekarang umumnya program-program akan menggabungkan dukungan lokalisasi penuh ke dalam setiap versi yang dirilis yang memenuhi ukuran program.
sumber
Salah satu alasannya adalah ketergantungan. Program dengan fungsionalitas yang kaya dan ketampanan membutuhkan banyak hal yang dilakukan - enkripsi, pemeriksaan ejaan, bekerja dengan XML dan JSON, mengedit teks dan banyak hal lainnya. Dari mana mereka berasal? Mungkin Anda menggulung sendiri dan menyimpannya sekecil mungkin. Kemungkinan besar Anda menggunakan komponen pihak ketiga (sumber terbuka berlisensi MIT mungkin) yang memiliki banyak fungsi yang sebenarnya tidak pernah Anda perlukan tetapi begitu Anda membutuhkan fungsi tunggal dari komponen pihak ketiga Anda sering harus membawa seluruh komponen di sekitarnya. Jadi Anda menambahkan semakin banyak dependensi dan seiring mereka sendiri berevolusi dan menumbuhkan program Anda yang bergantung padanya tumbuh pula.
sumber
Sementara grafis / kegunaan memang faktor yang berkontribusi, ada banyak sekali yang perpustakaan / kode kompilasi berlebih.
Contoh seberapa kecil kode yang masih BISA: MenuetOS, OS 64-bit penuh dengan aplikasi yang kuat yang sesuai dengan satu floppy disk.
Contoh bagaimana kode besar dapat tanpa alasan yang jelas: Saya melakukan output teks sederhana "Halo, Dunia!" di Ada baru-baru ini. Eksekusi yang dikompilasi adalah lebih dari 1 MiB !. Eksekusi yang sama dalam perakitan hanya KiB atau 2 (dan sebagian besar yang dapat dieksekusi overhead, kode yang berjalan sebenarnya adalah puluhan byte).
sumber
Sepele benar bahwa perangkat lunak harus dibangun agar sesuai dengan dua hal: Pengguna dan perangkat keras yang tersedia. Suatu program cocok untuk tujuannya jika ia melakukan apa yang diinginkan pengguna tepat waktu dengan perangkat keras yang dimilikinya. Baiklah ya Tetapi seiring dengan peningkatan perangkat keras pada dasarnya semua dimensi yang dapat diukur, jumlah program diskrit yang bergerak dari tidak layak ke peningkatan - ruang desain menjadi lebih besar:
sumber
Ini jelas benar tentang aplikasi Android. Empat tahun lalu, aplikasi sederhana memakan waktu sekitar 2-5 megabyte. Saat ini aplikasi sederhana membutuhkan ruang sekitar 10-20 megabyte.
Semakin banyak ruang yang tersedia, semakin besar ukuran aplikasi.
Saya pikir ada dua alasan utama dalam hal Android:
Google memperluas kerangka kerja Android, menambahkan banyak fungsi baru.
Pengembang tidak peduli lagi. Gambar termasuk dalam resolusi yang jauh lebih tinggi (tentu saja resolusi layar smartphone meningkat), perpustakaan pihak ketiga disertakan tanpa berpikir.
sumber
Banyak dari itu bermuara pada waktu pengembang dan biaya waktu itu. Kembali pada hari-hari ketika Visual Basic pertama kali tiba di tempat kejadian, itu bersaing dengan C / C ++ dan ketukan besar terhadap itu adalah bahwa Anda bisa menulis 'Hello World' di ANSI C untuk Windows di mungkin 15K. Masalah dengan VB adalah Anda selalu memiliki albatros dari 300K runtime library.
Sekarang, Anda bisa 10x ukuran program VB Anda dan itu masih akan hanya beberapa K lebih, tetapi 10x ukuran program C / C ++ Anda dan Anda sedang melihat beberapa BULAN pengembangan lebih lanjut.
Pada akhirnya penggembungan aplikasi Anda adalah harga kecil untuk membayar lompatan besar dalam produksi pengembangan, pengurangan harga dan luasnya kemampuan yang tidak akan pernah mungkin terjadi di masa pengembangan kerajinan tangan yang lama; ketika program kecil dan cepat tetapi juga lemah, tidak kompatibel satu sama lain, kurang fitur dan mahal untuk dikembangkan.
sumber
Seiring waktu, kebutuhan pengguna semakin berkembang dan semakin banyak menuntut, sehingga vendor / penulis berbagai perangkat lunak dipaksa untuk memenuhi kebutuhan tersebut atas nama persaingan.
Tetapi memenuhi kebutuhan baru berarti sering menambahkan kode baru. Kode baru berarti kerentanan baru untuk diperbaiki. Memperbaiki kerentanan baru dapat menambahkan kode atau membuka pintu ke kerentanan baru.
Setiap fitur yang ditambahkan untuk memenuhi kebutuhan pengguna mungkin memerlukan lebih banyak daya prosesor untuk kecepatan (kita semua mengeluh tentang kecepatan browser ini atau itu), sumber daya grafis baru untuk efek visual yang lebih baik ... dll.
Semua ini berarti menambahkan lapisan aplikasi (kode) baru, keamanan dan terkadang perangkat keras.
sumber
Banyak ukuran berasal dari perpustakaan built in. Banyak aplikasi hari ini dibangun menggunakan elektron yang membundel sejumlah besar dengan aplikasi. Jika Anda menginstal aplikasi di Linux biasanya lebih kecil karena sebagian besar aplikasi sudah diinstal melalui shared library yang juga digunakan oleh program lain.
sumber
Saat membuat perangkat lunak, jika Anda memerlukan fungsi A, Anda akan mengimpor modul A *. A * dapat memecahkan A, tetapi A * dapat memecahkan masalah lebih dari A, dan A * bisa besar. Semua modul besar menghasilkan perangkat lunak berukuran besar.
Mungkin bukan kasus yang sama, tetapi sesuatu seperti ini: Jika Anda hanya perlu mencetak "hello world" pada konsol menggunakan Java, Anda perlu JRE (> 60MB) diinstal.
Jika contoh Java tidak bagus, coba yang ini: Jika perangkat lunak perlu login ke file, itu mungkin menggunakan modul logging yang benar-benar dapat membuat log ke database, melalui jaringan dan beberapa fitur lainnya, tetapi fungsi tidak pernah digunakan dalam proyek.
sumber
code
. Saya berpendapat bahwa itu tidak benar-benar menjawab pertanyaan sama sekali. Bagian kedua menggunakan Java sebagai contoh (meskipun mencoba untuk mengklaim bahwa JRE harus dianggap sebagai bagian dari pertumbuhan ukuran aplikasi - yang lagi-lagi melewatkan pokok pertanyaan dan bukan contoh yang adil sama sekali dan terus mengabadikan kesalahpahaman tentang Jawa). Semua itu salah, atau mengulang poin dalam jawaban sebelumnya, yang ditulis dengan lebih baik.Itu tidak sepenuhnya benar. Sistem tidak akan melepaskan memori yang telah mereka konsumsi sampai sistem operasi berada di bawah tekanan memori. Ini adalah peningkatan kinerja. Jika Anda menjelajahi halaman dengan gambar aktif, Anda menavigasi. Anda mungkin menavigasi kembali, karena itu memerlukan gambar lagi. Jika sistem operasi memiliki RAM, tidak ada gunanya membersihkan memori sampai Anda yakin Anda tidak akan membutuhkannya lagi.
Menghapus memori segera akan mengambil siklus CPU dan bandwidth memori jauh dari pengguna ketika mereka kemungkinan besar ingin halaman web yang sangat responsif ditampilkan di layar.
Sistem operasi akan menggunakan semua memori non-aplikasi yang tersedia, yang sebagian besar digunakan untuk cache sistem file.
Manajemen memori adalah masalah yang sulit tetapi ada orang yang sangat pintar mengerjakannya sepanjang waktu. Tidak ada yang disia-siakan dengan sengaja dan tujuan utamanya adalah menyediakan komputer yang sangat responsif kepada Anda.
sumber
Mungkin benar bahwa program cenderung meluas untuk mengisi ruang yang tersedia, mirip dengan fenomena pinggiran kota tempat Anda menambahkan jalur baru ke jalan raya yang macet dan dalam beberapa tahun lalu lintas didukung kembali.
Tetapi jika Anda memeriksanya, Anda mungkin menemukan bahwa program mereka sebenarnya melakukan lebih banyak hal. Browser, misalnya, menjalankan grafik yang lebih bagus, memiliki alat pengembang yang licin yang tidak ada beberapa tahun yang lalu, dll. Mereka juga menautkan ke banyak perpustakaan, kadang-kadang hanya menggunakan sebagian kecil dari kode. Jadi, sementara program dapat meningkatkan ukuran untuk mengisi memori yang tersedia, beberapa di antaranya mungkin menjadi alasan yang sah.
sumber
Perpustakaan yang dibangun di atas objek yang tidak dioptimalkan memerlukan lebih banyak memori untuk memuat, menginstal, dan lebih banyak siklus komputasi untuk beroperasi. Kode objek sebagian besar mengasapi.
Cukup langkah melalui kode C ++ standar yang berjalan untuk melihat semua pemanggilan objek yang menegaskan () untuk memastikan semuanya adalah objek yang valid. Saat Anda mendesain lapisan demi lapisan objek yang membungkus objek, lapisan bawahnya membengkak dan buram. Pemrogram menjadi malas dan mengambil lebih banyak objek karena lebih cepat daripada mendesain ulang apa yang terbatas pada fungsionalitas yang diperlukan. Sangat sederhana.
Pertimbangkan ukuran kernel Linux C, hanya kernel, versus ukuran aplikasi yang dipesan lebih dahulu. Kernel dapat menjalankan seluruh mesin. Tapi itu tidak dibangun secepat aplikasi, butuh waktu lambat untuk membuat fungsionalitas terbaik.
sumber