Daha büyük veya daha küçük odaklı markası bellek kullanımını nesne tüm kodu değiştirmeden olacak?

7 Cevap php

Adım DB fonksiyonları, işleme ve çıkış yazdırarak arayarak sadece basitçe bütün usul ... adımdır PHP ile yazılmış bir proje var. Ve o tamamen nesne yönelimli değiştirilir - orada App nesnesi için bir tek olduğunu ve çeşitli fonksiyonlar App nesnesi yoluyla çağrılır.

Biri sunucu üzerinde bellek kullanımı ya da ayak izi daha az olacağını iddia ediyor. Bu durumda olurdu? Ben usul çeşitli tasarım desenleri ile Nesne yönelimli programlama genellikle gerekenden daha fazla şeyler başlatır ise genellikle sadece minimal çıplak kullanır, ya da usul genellikle sadece çıplak minimal varken sadece nesneler etrafında var sanıyordum.

Yani aslında daha küçük sunucuda bellek kullanımını yapmak odaklı nesne tüm kodu değiştirmeden olacak?

7 Cevap

Muhtemelen daha yapacak, ancak anlatmak için bir yol gerçekten var. Kullanıcı kodu aslında bir cepten bir şekilde bunu yaparak geliştirir, o zaman daha az olabilir. Kullanılan bellek ve nesne yönelimli lik varlığı arasında doğrudan bir ilişki yoktur. Belki genel olarak, nesne yönelimli fazla bellek alır, ama kodun her iki seti de aynı derecede iyi yazılmış sadece, ve neredeyse hiç durumda bulunuyor.

Bu uygulamaya yönelik itiraz edilecek yükseltilmiş olan bir nedeni var mı? Bunu OOP bir gümüş kurşun değil ... bir ya da diğer, mix ve maç parçalar olmadığını biliyorum.

Sizin soru bana bu gibi geliyor: We have a unmaintainable code-base, will rewriting it in Java make it faster?

Birincisi, sorunu tespit etmek gerekir: kod okunmaz ve / veya korumak zordur ya da programın çalışma zamanı kaplayan çok büyük? Bu iki completely farklı sorunları vardır.

(Eğer yapmak gibi geliyor) korumak için zor bir kod tabanı varsa, başka bir paradigma kullanarak kodu yeniden tarafından o çözmek değil edeceğiz. Neden kodu okunamaz mı? Geliştiriciler Java ya da C # onu yeniden, sonra okunmaz kod yazıyoruz sadece odaklı okunamayan kod nesne verecektir. Bu durumda (vb, iyi olanları işe mevcut olanları yeniden eğitmek) ve geliştiricilerin becerilerini geliştirmek gerekir.

Eğer bellek ayak izi ile ilgili bir sorun varsa, o zaman herhangi bir diğer performans sorunu olarak bu yaklaşım gerekir. İlk measure, daha sonra bazı optimizasyon (daha bellek verimli hale getirmek için bazı kod parçasını yeniden) yapmak, ve sonra measure again. Önce Ölçme and sonra kötü şeyler yapmıyor emin olmak önemlidir. Ve hatta çok iyi programcılar bu hata yapmak, inan bana.

Ne yazık ki, ben de benim testleri yaptık. Ben test hızı yaptım, ve o aynı konuda, ama bellek kullanımı PHP memory_get_usage () almak için test ederken, ben OOP tarafında bir çoğunlukla daha büyük bir sayı gördü.

Prosedürel için 18,856 bayt için OOP için 116,576 bayt. Ben "Donanım ucuz" biliyorum, ama hadi! Kullanımında% 1.000 artış? Maalesef, bu pek iyi değil. Ve bir anda web sitenize isabet pek çok kullanıcıya sahip, ben RAM sadece yakmak, ya da tükendi eminim. Yanılıyor muyum?

Temelde, ne ben bütün cepten hayranları duyuyorum ..., sadece kadar hızlı hem usul işlev çağrıları yazılı olacak Sen daha fazla kaynak kullanır, ancak büyük ölçekli projeler ve multi-geliştirici çevre için daha iyi olacak olmasıdır. Bir denge bulunması gerekmektedir.

More devs (sloppy devs) and larger site

Con: app için kullanılan daha fazla RAM.

Pro: tüm app genelinde birçok arasında kodunu korumak için daha kolay.

One dev with a simple site

Con: Sitenizin büyür, ya da çok geliştiricileri bulunmaktadır başlarsa sizin prosedürel kod emerse, geliştirme biraz daha yavaş olabilir.

Pro: Düşük RAM, biraz daha hızlı. Kodunuzu (ve sadece iyi geliştiriciler yapabilirsiniz - haha) düzgün yazılmış ise, kodunuzu korumak için sadece kadar kolay olacaktır.

RAM savaşlarda, Usul kazanır. Idame savaşlarda, iyi kod kazanır. ;)

OOP fanlar OOP temiz olduğunu söylüyorlar. Ben gerçekten dağınık NYP gördüm, ve sonra herhangi bir dil veya tarzı büyük kod yazabilirsiniz geliştiriciler tarafından yazılmış, bazı GERÇEKTEN TEMİZ usul kodu gördüm. Onunla çalışmak bir zevk yaptı Kodu. Alt satırda özensiz geliştiriciler varsa, bu özensiz kodu geçireceksin, kullanmak hangi stilin önemi olmayacak olmasıdır.

Çünkü benim çok kendi kişisel kriterler, ben usul gerçekten temiz yazmak başlıca nedeni, bellek domuz OOP çıkmak, ve ben genellikle benim projelerin herhangi bir tek dev kulüpler.

Şerefe!

Cevap evet ve hayır hem de.

Daha nesne yönelimli mimariye geçiş By could bellek ayak izini azaltmak, ancak kod daha verimli ancak ve ancak.

Düz PHP herhangi bir fonksiyon çağrıları olmadan veya nesne aramaları oldukça hızlı. En kısa sürede işlev çağrıları veya nesne yapmaya başlamak gibi şeyler çok daha yavaş gitmeye başlar çağırır.

Eklemeli bir döngü yapmak için gelen A Python Vs Ruby Vs. Python Benchmark OO strateji, 3,7079 saniye sürdü yönelik işlevi 4,3501 saniye sürdü ve kullanarak ne 0,6164 saniye sürdü. Usul Vs vs OO ile basit bir "Hello World" uygulaması yapıyor. Ne bir saniye 4,1248 3,7656 vs vs 0,9309 saniye yeilded.

Yani kodu ne yaptığını ve nasıl bunu yapıyor bağlı olarak, nesneleri daha yoğun bellek veya daha az hafıza yoğun, ya da ne, hem daha hızlı ya da daha yavaş olabilir.

And then it is changed to totally object oriented -- there is a singleton for the App object, and various functions are invoked through the App object.

Bu aslında oldukça fazla opposite "Tamamen nesne yönelimli" bir gibi geliyor. Bu büyük olasılıkla bir azaltılmış bellek ayak neden değil ne "nesne yönelimli" araçlarının anlayış düzeyini gösterir.

O on average, nesne yönelimli uygulamalar büyük bir ayak izi var eğilimindedir muhtemelen gerçek olsa da, genel olarak, tasarım, programlama paradigması fazla bellek ayak izi üzerinde çok daha büyük bir etkiye sahip olacaktır.

Bellek kullanımı OO avantaj değil. OO avantajı kod daha sürdürülebilir hale gelecek olmasıdır. Eğer performans sorunları yaşıyorsanız değil daha verimli olması için yollar arıyor gitmek için gerek yoktur.

Diğer yorumlar için ek olarak, ben OO kodunuzu daha verimli hale olabilir ... fazlalığı azaltmak ve bellek ayak izi azaltmak yardımcı olduğunu söylemek istiyorum. Tabii ki, OO daha fazla yük vardır, ancak daha büyük projelerde daha verimli çalışmak gerekir.