Saya kenal dengan optimasi. saya melihat program orang lain dengan pandangan berbeda - inilah pendapat saya:
Biasanya optimasi mikro dianggap tidak layak dengan penjelasan berikut: mungkin mempercepat program kurang dari satu persen, tetapi tidak ada yang peduli dengan dorongan kecil itu - itu hanya sedikit perubahan yang harus diperhatikan.
lucunya, satu perubahan seperti itu menghasilkan 99% sepuluh perubahan semacam itu membuat program lebih cepat terlihat. bagi banyak insinyur, perubahan pada pendekatan mereka dalam menulis suatu program dapat membuat suatu program mengeksekusi beberapa kali lebih cepat. hanya dengan menyadari efisiensi dan menulis seperti itu dapat membuat program Anda beberapa kali lebih cepat tanpa banyak pekerjaan tambahan. keuntungan seperti itu bukan optimasi mikro, imo.
Catatan: saya tidak pernah menyarankan optimisasi sudut tajam dalam diskusi ini.
Selain itu, mungkin ada beberapa event handler yang menyala seribu kali per detik dan keluar dengan sangat cepat - sebelum dipecat lagi. Tidak ada yang peduli seberapa cepat itu - membuatnya lebih cepat tidak dapat dicatat, karena sudah "secepat dapat diamati".
dan kemungkinan sudah melakukan lebih banyak pekerjaan daripada yang diperlukan karena 1kHz jauh lebih tinggi daripada banyak kasus membutuhkan. apa sumber event handler ini, dan apa pengaruhnya? jika hanya memperbarui UI dan acara dapat dikumpulkan dan digabungkan, maka pengiriman 1kHz tentu saja berlebihan (jauh lebih dari 1% - lebih seperti 25x). untuk sistem yang memiliki sumber mulitple dan ditransmisikan secara serial, maka 1kHz mungkin tidak cukup cepat (misalnya MIDI).
Namun dalam konsumsi energi perangkat seluler merupakan faktor penting. Handler acara yang sama yang dioptimalkan untuk berjalan sepuluh persen lebih cepat akan menghasilkan lebih sedikit energi yang dikonsumsi dan itu lebih tahan baterai dan perangkat yang beroperasi lebih lama. Seberapa akurat penilaian terakhir tentang perangkat seluler? Adakah contoh kehidupan nyata yang mengonfirmasi atau membantahnya?
berdasarkan pada program yang saya lihat, tidak banyak orang yang mempertimbangkan (atau peduli dengan) optimasi semacam itu, meskipun mengubah pendekatan Anda pada program penulisan dapat menghasilkan keuntungan luar biasa (> 10x atau lebih cepat). banyak yang telah saya lihat (di sisi pengembangan aplikasi) hanya menulis lalu mengambil pendekatan top down atau "hail mary" ketika (/ jika) masalah kinerja menyusul mereka. sama halnya, banyak yang bahkan tidak akan meluangkan waktu untuk profil sampai kejadian seperti itu. pada saat itu, kebisingan dari begitu banyak inefisiensi senyawa membuatnya sangat sulit untuk mendapatkan informasi yang berguna dari seorang profiler. contoh pendekatan hujan es akan mengoptimalkan area yang salah (dengan atau tanpa mencari area masalah), atau hanya melempar lebih banyak core pada area masalah; ini terjadi daripada memperbaiki inefisiensi yang ada.
untuk program yang sudah ada (di antara program seluler yang telah saya lihat), pengoptimalan bukan masalah besar ketika ditulis. jadi "ya" mereka (dalam kasus khas) sepadan dengan waktu, asalkan itu dalam anggaran dan prioritas. dalam hal itu, sepuluh perubahan yang membuat program lebih cepat terlihat dapat dilakukan dalam beberapa jam, dan kurang dari sehari.
"menulis dengan malas dan profil dalam retrospeksi" sebagai satu-satunya tindakan untuk meningkatkan program adalah ide yang mengerikan: meluangkan waktu untuk belajar bagaimana menulis program yang efisien (seperti yang tertulis, bukan dengan menyatukannya di akhir) adalah yang terbaik pendekatan (imo); gunakan algoritma yang tepat, melarang penyalinan yang sia-sia, alokasi, perhitungan (+ banyak, banyak kategori lainnya). tentu saja, menganalisis kinerja dalam retrospeksi memiliki kelebihan, tetapi jika Anda menulis program menjadi efisien sejak awal, Anda akan memiliki tingkat efisiensi yang sama sekali baru karena Anda belajar banyak dan mempertimbangkan serta mengevaluasi pelaksanaan dari berbagai perspektif.
yang lain adalah bahwa program harus (sering) ditulis untuk digunakan kembali, program yang ditulis dengan buruk akan memperkenalkan perubahan yang dapat merusak program klien ketika inefisiensi dihapus (atau hanya tetap tidak efisien untuk menghindari melanggar program yang ada).
satu manfaat besar dari mempertimbangkan ketika Anda menulis adalah bahwa Anda memiliki ide yang sangat jelas tentang bagaimana program akan beroperasi (walaupun bukan gambaran lengkap), Anda dapat menggunakan informasi ini untuk membantu dalam desain antarmuka dan bagaimana menyimpan datanya. . sebenarnya, seorang insinyur dapat mengimplementasikan sesuatu yang beberapa (misalnya> 10x) kali lebih cepat daripada solusi standar "satu ukuran cocok untuk semua" yang disediakan dengan OS.
akhirnya, itu juga sangat berharga di luar perangkat seluler. ada banyak program yang tidak efisien di luar sana, ditulis dengan pola pikir bahwa perangkat keras akan lebih cepat dalam dua tahun (sering rasional, bahkan untuk program yang ditulis hari ini!). sementara itu tidak salah , itu terlalu optimis. juga, paralelisasi memiliki tujuan tetapi itu adalah "solusi default" yang salah untuk banyak program. banyak dari program yang ada ini dapat diperbaiki dengan terlebih dahulu menghilangkan ketidakefisienan yang ada.
jadi ... biasanya ada satu ton dari kasus-kasus 1%, 2%, 7% (dan jauh lebih buruk) di dunia nyata. memperbaikinya atau (yang lebih penting) tidak menulis / memaparkannya dapat memberikan manfaat besar. banyak dari kasus-kasus tersebut dapat dengan mudah ditemukan dan diperbaiki (asalkan insinyur memiliki pengalaman dengan ini). Namun, itu bisa sangat menyebalkan untuk mengoreksi dan menguji ulang setelah fakta. jika sebuah program ingin optimal, idealnya akan ditulis seperti itu sejak awal.
sebagai pengguna akhir, sangat menjengkelkan untuk terus menunggu program lambat dan melemparkan dua kali perangkat keras pada masalah yang diciptakan oleh program lambat / tidak efisien: T: "apa yang akan Anda lakukan sekarang karena Anda memiliki dua kali inti dan dua kali memori?" A: "mendapatkan kembali daya tanggap dan produktivitas yang saya miliki sebelum saya meningkatkan perangkat lunak saya - itu saja". cukup tidak pengertian dari pengembang (imho).