Yazmaya ve okumanın ve sürdürmenin ne kadar basit olduğu gibi, "bir şey değerinin" bağlamda olması gerektiği gibi, kullanıcının bir şeyi ne kadar hızlı hale getirdiği gibi daha duyarlı, etkileşimli ve beklemeleri için daha az zaman gerektirir.
Birkaç kuruşa bir kutu gazoz almak için para biriktirmek, özellikle de bu günlerde nadiren soda içtiğim göz önüne alındığında, bu paraları kurtarmak için bir mesafeye seyahat etmek zorunda kalmam durumunda, bana pek iyi gelmeyecek. Bir milyon kutu soda satın almak için kutu başına birkaç kuruş tasarruf etmek büyük bir anlaşma olabilir.
Bu arada, iki kişi hemen yanımda olduğunda ve biri birkaç penni için aynı şeyi teklif ettiğinde, diğeri ucuza geldiğinde, diğeri ise daha ucuz olanı seçti ve daha pahalı birini seçtim çünkü şapkaları aptalca bir dava gibi görünüyor. kötüye kullanma.
Sık sık "mikro optimizasyonlar" diyen insanları, benim için önemsiz olmadıklarında, bu tür optimizasyonları göz önünde bulundurmak için mutlaka üçü olması gerektiğinde, ölçümlerden, bağlamdan ve kullanıcı sonu tartışmalarından merakla mahrum görünüyorlar. Bana göre uygun bir mikro-optimizasyon bu günlerde bellek düzenleri ve erişim düzenleri gibi şeylerle ilgilidir ve odakta "mikro" gibi görünseler de, mikro etkide değildirler.
Çok uzun zaman önce, bir işlemi 24 saniyeden 25 milisaniyeye (yaklaşık 960 kat daha hızlı) düşürdüm, aynı çıktılarla (otomatik testlerle güvence altına alındı), hacimsel ısı difüzyonu için, algoritmik karmaşıklıkta değişiklik yapmadan "mikro-optimizasyonlar" (bunların en büyüğü yaklaşık 2 saniyeye inen bellek düzenindeki bir değişiklikten geldi, geri kalanı SIMD ve VTune'daki önbellek kayıplarının analizi ve bellek düzeninin yeniden düzenlenmesi gibi şeylerdi).
Wolfire buradaki tekniği açıklıyor ve gerekli zaman ile mücadele etti:
http://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/
Uygulamam bunu bir dakikadan daha azına indirmek için uğraşırken milisaniyede yapabildi:
"Mikro-optimizasyon" yaptıktan sonra 24 sn'den 25 ms'ye düşürdüm, bu iş akışında bir oyun değiştiriciydi. Artık sanatçılar, ekipmanlarını her küçük değişiklikten sonra 24 saniye beklemeden, 30 FPS'de gerçek zamanlı olarak kulelerini değiştirebiliyor. Ve bu aslında yazılımımın tasarımını değiştirdi, çünkü artık ilerleme çubuğuna ve bu tür şeylere ihtiyacım yoktu, hepsi etkileşimli hale geldi. Bu, tüm iyileştirmelerin algoritmik karmaşıklıkta herhangi bir iyileştirme olmadan ortaya çıktığı anlamında bir "mikro-optimizasyon" olabilir, ancak daha önce ağrılı ve etkileşimli olmayan bir işlem yapan aslında "mega-optimizasyon" idi. Gerçek zamanlı olarak, etkileşimli bir şekilde kullanıcıların çalışma şeklini tamamen değiştirdi.
Ölçüm, Kullanıcı Sonu Gereksinimleri, Bağlam
Robert'ın buradaki yorumunu gerçekten beğendim ve belki de istediğim şeyi yapamadım:
Hadi, hadi. Hiç kimse bu tür bir değişimin “buna değmeyeceğini” iddia edemez. Maddi bir fayda gösterebildiniz; birçok mikro optimizasyon denilen olamaz.
Bu, çoğu zaman gerçek zamanlı gereklilikleri olan çok kritik bir alanda çalışmasına rağmen, yolumdan çıkmayı gerektiren herhangi bir mikro-optimizasyonu düşündüğüm tek zaman.
Ve sadece ölçümleri değil, kullanıcı tarafını da vurgularım. Şu anki alana (ve daha önce gamedev'e) ilk önce bir kullanıcı / hayranım, geliştirici olarak geldiğimde tuhafım. Bu yüzden, teknik bulmaca çözme gibi programcıları heyecanlandıran olağan şeyler beni hiç bu kadar heyecanlandırmamıştı; Onlara bir yük buldum, ancak diğer kullanıcılarla paylaştığım kullanıcı sonu rüyası boyunca onların arasından geçecekti. Ancak bu, eğer bir şeyi optimize edersem, kullanıcılar için gerçek fayda sağlayan gerçek bir etkiye sahip olacağından emin olmamı sağladı. Bu amaçsızca mikro optimizasyona karşı korumam.
Bu aslında benim açımdan profilci kadar önemli, çünkü bir küpün mikro-optimize alt bölümlerini milyarlarca fasete dönüştüren, sadece karakter ve araçlar gibi gerçek dünya üretim modellerinde boğulmak gibi şeyler yapan meslektaşlarım vardı. Elde ettikleri sonuçlar “teknoloji demosu” anlamında etkileyiciydi, ancak gerçek kullanıcılar için neredeyse işe yaramazdı, çünkü gerçek dünyadaki kullanım durumlarıyla uyuşmayan davaları profillendiriyor ve ölçüyorlardı. Bu nedenle, ilk önce kullanıcılar için neyin önemli olduğunu, yazılımı düşünmeyi ve kullanmayı düşünerek veya onlarla birlikte çalışarak (ideal olarak her ikisi için de, ama en azından bunlarla işbirliği yaparak) anlamak çok önemlidir.