2010-01-17 19 views
5

Jestem ciekawy, czy jest jakiś przyrost wydajności, jak przy użyciu mniejszej ilości pamięci lub zasobów w PHP:PHP array vs PHP Constant?

50 różnych zmiennych ustawień zapisanych w tablicy jak tego

$config['facebook_api_secret'] = 'value here'; 

lub 50 różnych zmiennych ustawień zapisany w stała się ten

define('facebook_api_secret', 'value here'); 

Odpowiedz

11

myślę, że to jest w sferze bycia mikro optymalizacji. Oznacza to, że różnica jest na tyle mała, że ​​nie warto używać jednego rozwiązania zamiast drugiego dla zachowania wydajności. Gdyby wydajność była tak ważna dla twojej aplikacji, nie używałbyś PHP! :-)

Użyj tego, co jest wygodniejsze lub ma więcej sensu. Wstawiam dane konfiguracyjne do stałych, choćby dlatego, że nie powinny być dozwolone zmiany po wczytaniu pliku konfiguracyjnego i do tego właśnie służą stałe.

+0

Rozumiem, po prostu zorientowałem się, że zobaczę, czy 1 był lepszy od drugiego, skoro mogą osiągnąć to samo. – JasonDavis

+1

Innymi stałymi sposobu mogą być uznane za lepsze, jest to, że inteligentny edytor lub IDE powinien mieć możliwość wykonania kodu dla nich. Ale uzupełnianie kodu nie działa dla kluczy łańcuchowych tablicy konfiguracji. –

1

Wzrost wydajności dla 50 zmiennych przy użyciu innej techniki kodowania/sprytnych sztuczek programowania jest niewłaściwym sposobem wykonywania czynności w PHP. Zawsze pamiętaj: Optymalizator jest sprytniejszy niż jesteś.

1

Nie otrzymasz żadnego wzmocnienia wydajności dla żadnego z nich. Prawdziwe pytanie brzmi, który z nich jest bardziej przydatny.

Dla wartości skalarnych (ciągi, znaki wewnętrzne itd.), Które są zdefiniowane raz, nigdy nie powinny się zmieniać i muszą być dostępne w każdym miejscu, należy użyć stałej.

Jeśli masz jakąś złożoną zagnieżdżonych konfiguracji, np

$config->facebook->apikey = 'secret_key'; 
$config->facebook->url = 'http://www.facebook.com'; 

może chcesz używać tablicy lub api konfiguracyjne przekazane przez jednego z wielu ram tam (Zend_Config nie jest złe)

+0

Stałe są dużo DUŻO szybsze niż klasa konfiguracyjna. Nie ma konstrukcji i nie -> getters() ze stałymi względem klasy. Nie wyglądają jednak ładnie :) – gus

+0

FYI: Przerwany link – James

3

W moich nieformalnych testach odkryłem, że dostęp do stałych jest trochę wolniejszy niż normalne zmienne/tablice.

i tak nic nie zmieni; bardziej niż prawdopodobne, że cokolwiek z nimi zrobisz, stanie się za tysięczną część sekundy.

Optymalizacja bazy danych (indeksowanie, używanie opcji WYBUCH w celu sprawdzenia zapytań) i konfiguracja serwera (przy użyciu APC) będą miały większy wpływ na dłuższą metę.