"Layak" membutuhkan konteks, seperti seberapa sederhana menulis dan membaca dan memelihara vs seberapa cepat membuat sesuatu bagi pengguna nyata lebih responsif, interaktif, membutuhkan lebih sedikit waktu bagi mereka untuk menunggu.
Menyimpan beberapa sen untuk membeli sekaleng soda tidak akan banyak gunanya bagiku jika aku harus menempuh perjalanan jauh untuk menghemat uang itu, terutama mengingat aku jarang minum soda akhir-akhir ini. Menyimpan beberapa sen per kaleng untuk pembelian satu juta kaleng soda bisa menjadi masalah besar.
Sementara itu menyimpan beberapa uang ketika dua orang tepat di sebelah saya dan satu menawarkan hal yang sama persis untuk beberapa uang lebih murah dan yang lainnya tidak, dan saya memilih yang lebih mahal karena saya suka topi mereka lebih baik seperti kasus bodoh pesimisasi.
Apa yang sering saya temukan orang-orang sebut "optimasi mikro" tampaknya aneh tanpa pengukuran, dan konteks, dan diskusi pengguna-akhir, ketika harus benar-benar ada ketiganya untuk mempertimbangkan optimasi seperti itu jika mereka tidak sepele untuk diterapkan. Bagi saya optimasi mikro yang tepat akhir-akhir ini berhubungan dengan hal-hal seperti tata letak memori dan pola akses, dan meskipun mereka mungkin tampak "mikro" dalam fokus, mereka tidak berpengaruh mikro.
Saya berhasil, belum lama ini, mengurangi operasi turun dari 24 detik menjadi 25 milidetik (sekitar 960 kali lebih cepat), dengan output yang identik (dijamin dengan tes otomatis), tanpa perubahan kompleksitas algoritmik, untuk pengerasan difusi panas volumetrik, melalui "mikro-optimasi" (yang terbesar berasal dari perubahan tata letak memori yang turun menjadi sekitar 2 detik, kemudian sisanya adalah hal-hal seperti SIMD dan analisis lebih lanjut dari cache cache di VTune dan beberapa pengaturan tata letak memori lebih lanjut).
Wolfire menjelaskan tekniknya di sini, dan dia berjuang dengan waktu yang diperlukan:
http://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/
Implementasi saya berhasil melakukannya dalam milidetik ketika ia berjuang untuk menurunkannya menjadi kurang dari satu menit:
Setelah saya "mengoptimalkan mikro" dari 24 detik menjadi 25 ms, itu adalah game-changer dalam alur kerja. Sekarang seniman dapat mengubah rig mereka secara realtime di lebih dari 30 FPS tanpa menunggu 24 detik setiap kali mereka membuat sedikit perubahan pada rig mereka. Dan itu benar-benar mengubah seluruh desain perangkat lunak saya karena saya tidak lagi memerlukan progress bar dan hal-hal semacam ini, semuanya menjadi interaktif. Jadi itu mungkin "mikro-optimasi" dalam arti bahwa semua perbaikan datang tanpa peningkatan kompleksitas algoritmik, tetapi itu adalah "mega-optimasi" yang berlaku yang membuat apa yang sebelumnya merupakan proses menyakitkan, non-interaktif menjadi realtime, interaktif yang benar-benar mengubah cara pengguna bekerja.
Pengukuran, Persyaratan Pengguna-Akhir, Konteks
Saya benar-benar menyukai komentar Robert di sini dan mungkin saya gagal menyampaikan maksud yang saya inginkan:
Baiklah, ayolah. Tidak ada yang akan berpendapat bahwa perubahan semacam ini tidak "sepadan." Anda dapat menunjukkan manfaat nyata; banyak yang disebut optimasi mikro tidak bisa.
Ini, meskipun bekerja di bidang yang sangat kritis terhadap kinerja dengan persyaratan waktu-nyata yang sering, satu-satunya waktu saya mempertimbangkan setiap optimasi mikro yang mengharuskan keluar dari jalan saya.
Dan saya menekankan bukan hanya pengukuran tetapi sisi pengguna. Saya orang aneh karena saya datang ke bidang saya saat ini (dan sebelumnya gamedev) sebagai pengguna / penggemar pertama, pengembang kedua. Jadi saya tidak pernah begitu bersemangat dengan hal-hal biasa yang membuat para programmer senang memecahkan teka-teki teknis; Saya menemukan mereka beban, tetapi akan menanggungnya melalui mimpi pengguna akhir yang saya bagikan dengan pengguna lain. Tapi itu membantu saya memastikan jika saya mengoptimalkan sesuatu, itu akan berdampak nyata pada pengguna dengan manfaat nyata. Ini adalah perlindungan saya terhadap pengoptimalan mikro tanpa tujuan.
Itu sebenarnya sama pentingnya dengan profiler dalam pendapat saya, karena saya memiliki rekan yang melakukan hal-hal seperti subdivisi mengoptimalkan mikro kubus menjadi satu miliar aspek hanya untuk tersedak model produksi dunia nyata seperti karakter dan kendaraan. Hasilnya sangat mengesankan dalam arti "demo teknologi", tetapi hampir tidak berguna bagi pengguna yang sebenarnya, karena mereka membuat profil dan mengukur dan membandingkan kasus yang tidak selaras dengan kasus penggunaan di dunia nyata. Jadi, sangat penting untuk memahami apa yang penting bagi pengguna terlebih dahulu, baik dengan belajar berpikir dan menggunakan perangkat lunak seperti itu atau berkolaborasi dengan mereka (idealnya keduanya, tetapi setidaknya berkolaborasi dengan mereka).