'Temiz kod' ile performans sonuçları

5 Cevap php

Yerimden bizim temel ürün, birkaç 'modüller' ile bir web uygulaması üzerinde büyük refactor planlıyoruz. Modülleri gerçekten modülleri değil, her şey monolitik: Ben o ana kaygılarından biri çünkü aktardı. Uygulama smarty çiftleşmiş ve MySQL veritabanı erişim için Armut kullanarak PHP ile yazılmış. Bu uygulamaya ay alacağını değil eğer güzel olurdu rağmen biz gerçekten, veritabanı bağımsızlığı ile ilgili değiliz.

Bizim ana kaygıları geliştirme zamanı / maliyet sonra, çünkü ilgisiz yerlerde ve (her modül temelde önceki birinden kopyala / yapıştır olduğu en yaygın işlevselliği almak için güvenmek bir ses ortak mimariye sahip değil haşhaş hataların katlanarak artıyor vardır ) uyum.

Ben esas ASP.NET MVC web MVC ilkesi ile biraz tecrübe, var. Ben sunduğu temiz ayırma ve test edilebilir gibi. Bir yerel makinede bu çalışırken Ancak, uygulama sadece olması gerektiği çok daha yavaştır.

Alright, enough introduction, off to the questions: - Should I rely on caching modules? Does this remove most of the overhead using a good architecture provide? Something like APC.

  • Uygulama ağırlıklı olarak okunur. Yazma (bir kayıt tek bir alanını değiştirmek) çoğunlukla tek değerlerdir. Bu iyi olan PHP için herhangi OR / M?
  • Ayrıca esnek bir MVC framework arıyor. Ben Zend, CakePHP, belki Symfony biliyor musun?

Zor kısmı tam bir rewrite yapmak mümkün olma lüksü yok olmasıdır. Biz aşamalı bir anda çok dağınık kod tabanını geliştirmek gerekecek. Bu yeni kod yazma, ya da hata tespit ederken yapılmalıdır. Ben gerçekten, gerçekten yapabilmek istiyorum bir şey (bu bazen olur) daha sonra tekrar haşhaş önlemek için, bu düzeltmeden önce yeni bir hata için bir regresyon test yazmak değildir.

Şu anda düşünüyorum yığını içerir:

  • Seçim MVC çerçevesi
  • (Log4php?) Açılıyor
  • Seçtiğiniz bir OR / M (dinamik olmak zorunda değildir, kod üretimi çok ince)
  • Seçim IoC konteyner
  • Biz gerekirse belki soyutlanmış Smarty Şablon, böylece biz onu dışarı geçiş yapabilirsiniz.
  • Seçtiğiniz opcode önbellek (şimdi birini kullanıyorsanız, sistem yöneticisinin sormak zorunda, hangisi unuttum)

Beni endişelendiren asıl nokta PHP temiz kod oluşturma performans etkileri olduğunu. O (farklı dosyalarda zorunlu ayrılık) ile aksi hat kodu için soyutlamalar oluşturmak NET / Java web yığını gibi bir şey aksine bir çözümlü dil bulunuyor görünce başka bir seviyede yeni sorunlar yaratabilir.


Not: retag daha uygun etiketleri ile geldi, ben güncel olanları emin değilim.

5 Cevap

Temiz bir kurulum olması genellikle, bir performans sorunu değildir. En performans konuştuğunuz veritabanları ya da diğer dış sistemlerle harcanmaktadır.

Bunlar için orada dışında optimize değer olabilir bir veya iki noktaları genellikle ama temiz bir tasarım ile başlaması gerektiğini, sonra darboğazları tespit etmek (xdebug veya ZendDebugger gibi) profilcisini kullanmak.

Temiz bir yazılım tasarım yolu daha önemli bir "optimize" tasarım 0.01% performans artışı daha fazladır. Usuallyit unmaintainable bir "optimize" kod tabanı hakkında endişe daha fazla donanım satın almak ve çalıştırmak için bile ucuz.

Ben yönetime aşağıdaki argümanlar ile testleri kurmak için bütçeleme zaman stres ediyorum:

  1. Geliştiriciler bir hatayı düzeltmek zaman, onları hata için bir test yazmak için izin verir. Bugs çok daha sık muhtemelen gerekenden daha yeniden ortaya çıkması, ve bu tamamen durdurmak için ucuz ve etkili bir yoldur.
  2. Geliştiriciler yeni işlevler oluştururken, onlara bunun altında testleri yazmak için izin verir. O noktada işlevselliği ile tamamen aşina olduğundan, bu otomatik test "güvenlik ağı" oluşturmak için least expensive zamanıdır.

Uzun bir test sizi nasıl candy kapladıkları yapmak; o zaman% 1 ya da% 50 olsun, düz yöneticisine ver, ama stres bir güvenlik ağı olarak otomatik test yapı gibi birçok böcek isabet kullanıcıları duracak ve geliştiriciye yerine arıza giderme ve yeni bir gelişme için zaman kazandıracak.

Bildiğim kadarıyla bir spagetti kod bileşeni ile bir MVC bileşeni yönetmek gibi, biz büyük bir proje ile benzer bir sorunu vardı. Ne iyi çalıştı sadece bir dizin alarak ve bu MVC app için yeni docroot (bizim durumumuzda Zend Framework) şekilde yapıyordu:

old part:
http://site.com/data.php
http://site.com/other.php

new part: http://site.com/app/controller/action/...

Kimlik Re, seçimler bir çift var. Muhtemelen en mantıklı MVC giriş için login.php komut yönlendirmek ve daha sonra bir GET parametre olarak geçirilen gerekli bilgi ile gitmek istediğiniz orijinal sayfaya geri geçmektir. Bu miras ve yeni sistemleri aynı anda ve şeffaf var sağlayacaktır.

Ben XDebug çekin istiyorsunuz önce yavaşlık Re, ben alır sorunlu bir parçası ve sadece çıkış sürelerini izole etmeye çalışacaktı. Daha hızlı IMHO.

De nesne yönelimli kod veritabanı odaklı web uygulamasında sapghetti php kodu daha kötü yapmalıdır yapılandırılmış herhangi bir iyi bir neden yoktur. Sen darboğazları nerede bulmak ve buna göre optimize etmek için bazı profilleme yapmak gerekir.

Eğer sert (ama nadir değildir) durum var.

Bildiğim kadarıyla hataları en aza indirmek için kod düzenleme gibi, bütün verebileceğim KURU kapağın bir ucudur.

Onların çok yavaşlık bunları size gösterir, by this technique, çünkü performans sorunları için, bu, bulmak kolaydır.