2010-08-02 36 views
8

Piszę kod PHP do tworzenia plików PDF przy użyciu biblioteki FPDF. Zasadniczo używam tych samych 4 linii kodu, aby wydrukować każdą linię dokumentu. Zastanawiam się, która z nich jest bardziej wydajna, powtarzanie tych 4 linii w kółko, czy też sprawienie, że funkcja będzie lepsza? Jestem ciekawy, ponieważ wydaje się, że funkcja ma większy narzut, ponieważ funkcja będzie miała tylko 4 linie.

Kod mam wątpliwość wygląda następująco:funkcje kontra powtarzający się kod

$pdf->checkIfPageBreakNeeded($lineheight * 2, true); 
$text = ' label'; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L', 1); 
$text = $valueFromForm; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L'); 
$pdf->Ln(); 
+0

Nie masz również opcji MACRO w PHP? – Shaihi

+0

Ile razy powtarzasz te 4 linie. –

+1

@Shaihi: Nie.PHP jest interpretowane, a nie kompilowane. (Bez względu na HiPHoP) – Piskvor

Odpowiedz

16

ten powinien odpowiedzieć: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself i http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html

Prawo Curly, wykonaj jedno, jest odzwierciedlenie w kilku podstawowych zasad nowoczesnego rozwoju oprogramowania:

  • Don Powtórz się

    Jeśli masz więcej niż jeden sposób wyrażania tego samego, w pewnym momencie dwa lub trzy różne reprezentacje najprawdopodobniej wypadną ze siebie w stosunku do siebie o . Nawet jeśli nie są one zgodne, to gwarantujesz, że są one równoznaczne z równoczesnym utrzymywaniem ich , gdy nastąpi zmiana . I nastąpi zmiana. Nie powinieneś powtarzać, że jest ważne, jeśli chcesz chcieć elastycznego i konserwowalnego oprogramowania .

  • tylko raz

    każda deklaracja zachowania powinny wystąpić tylko raz, a raz. Jest to jeden z głównych celów, , jeśli nie jest to główny cel przy refaktoryzacji kodu . Celem projektu jest wyeliminowanie zduplikowanych deklaracji zachowania , zwykle poprzez zastąpienie ich lub zastąpienie wieloma podobnymi implementacjami z ujednolicającą abstrakcją.

  • jednopunktowy Prawdy

    Powtórzenie prowadzi do niespójności i kod, który jest subtelnie złamane, bo zmieniłeś tylko niektóre powtórzeń, kiedy trzeba było zmienić wszystkie z nich. Często oznacza to również, że nie przemyśliłeś prawidłowo organizacji kodu. Dowolny kod oznacza niebezpieczny znak . Złożoność to koszt; nie płacić dwa razy.

2

funkcją jest z pewnością korzystne, zwłaszcza jeśli masz wrócić później, aby dokonać zmiany.

12

Zamiast zadając sobie pytanie co jest bardziej efektywne należy zamiast zadać sobie pytanie co jest bardziej linkujących.

Pisanie funkcji jest o wiele łatwiejsze w utrzymaniu.

11

Jestem ciekawy, ponieważ czuje się jak funkcji miałoby większy narzut becuse funkcja byłaby tylko długość 4 linie.

Z tego miejsca pochodzi spaghetti.

Zdecydowanie obuduj go w funkcję i wywołaj. Obciążenie, którego się obawiasz, jest najgorszym rodzajem przedwczesnej optymalizacji.

DRY - Nie powtarzaj się.

2

Nie martw się o obciążenie; martw się o siebie, rok w przyszłości, próbując to debugować.

W świetle powyższego, nie powtarzaj się i nie wykonuj drobiazgowych funkcji.

4

Stwórz funkcję. Obciążenie wywołaniem funkcji jest obecnie bardzo małe. Zasadniczo będziesz w stanie zaoszczędzić znacznie więcej czasu, znajdując lepsze algorytmy wysokiego poziomu niż manipulując przy tak niskich szczegółach. Użycie takiej funkcji jest łatwiejsze i łatwiejsze. Cóż bowiem za korzyść odniesie człowiek, jeśli osiągnie niewielką prędkość i straci poprawność programu?

+0

+1 dla parafrazy, v.odpowiedni :) – Piskvor

1

Oprócz wszystkich cennych odpowiedzi na znacznie ważniejszy temat łatwości konserwacji; Chciałbym dodać trochę czegoś na temat kosztów ogólnych.

Nie rozumiem, dlaczego obawiasz się, że funkcja czteroliniowa będzie miała większy narzut.

  1. W skompilowanym języku dobry kompilator prawdopodobnie byłby w stanie go wbudować w razie potrzeby.

  2. W języku interpretowanym (takim jak PHP) interpreter musi przeanalizować cały ten powtarzający się kod za każdym razem, gdy zostanie napotkany, w środowisku wykonawczym. Dla mnie sugeruje to, że powtarzanie może mieć jeszcze większy narzut niż wywołanie funkcji.

  3. Martwisz się o obciążenie związane z wywołaniem funkcji tutaj jest upiorna optymalizacja przedwczesna. W takich sprawach jedynym sposobem, aby naprawdę wiedzieć, która z nich jest szybsza, jest jej profilowanie.

Spraw, aby działało, naprawiało się, szybko. W tej kolejności.

0

Narzut jest w rzeczywistości bardzo mały i nie spowoduje dużej różnicy w aplikacji. Czy wolisz te małe koszty, ale łatwiejszy program do utrzymania, lub chcesz zaoszczędzić zaledwie milisekundę, ale zajmie godziny, aby poprawić małe zmiany, które się powtarzają.

Jeśli zapytasz mnie lub innego programistę, zdecydowanie chcemy pierwszej opcji. Więc dalej z funkcją. U może nie zachowuje dzisiaj kodu, ale kiedy to zrobisz, będziesz nienawidzić siebie za próbę ratowania tego tylko milisekundy

Powiązane problemy