TD; DR :
내가 묻는 것에 대해 약간의 혼란이 있었으므로 여기에 질문의 원동력이 있습니다.
나는 항상 그 질문이 무엇인지 생각했습니다. 원래 잘 표현하지 않았을 수도 있습니다. 그러나 의도는 항상 " 모 놀리 식 단일 단위, 한 곳에서 모든 것을 수행하는 것, 하나의 파일, 단단히 결합 된 "코드 보다 본질적으로 느리게 모듈화 된, 분리 된, 느슨하게 결합 된, 분리 된, 리팩터링 된 코드입니다. 나머지는 내가 그 당시 나 지금이나 나중에 나올 세부 사항과 다양한 증상입니다. 어떤 규모에서는 확실히 느립니다. 조각 모음되지 않은 디스크와 마찬가지로 모든 곳에서 조각을 가져와야합니다. 더 느립니다. 확실 해요 하지만 걱정해야합니까?
그리고 질문은 ...에 관한 것이 아닙니다.
마이크로 최적화, 조기 최적화 등에 관한 것이 아닙니다. "이 부분이나 그 부분을 죽일 정도로 최적화"하는 것이 아닙니다.
그때는 무엇입니까?
시간이 지남에 따라 등장한 코드 작성 에 대한 전반적인 방법론과 기술 및 사고 방식에 관한 것입니다.
- "이 코드를 의존성으로 클래스에 삽입하십시오"
- "클래스 당 하나의 파일 작성"
- "데이터베이스, 컨트롤러, 도메인에서보기를 분리하십시오".
- 스파게티 균질 단일 코드 블록을 작성하지 말고 함께 작동하는 많은 개별 모듈 구성 요소를 작성하십시오.
그것은 현재 10 년 안에 대부분의 프레임 워크에서 보여지고 옹호되고 컨벤션을 옹호하며 커뮤니티를 통해 전달되는 코드의 방식과 스타일에 관한 것입니다. '모 놀리 식 블록'에서 '마이크로 서비스'로의 사고의 전환입니다. 기계 수준의 성능과 오버 헤드, 프로그래머 수준의 오버 헤드 측면에서 가격이 책정됩니다.
원래 질문은 다음과 같습니다.
컴퓨터 과학 분야에서 나는 프로그래밍에 관한 생각에서 주목할만한 변화를 발견했습니다. 나는 다음과 같은 조언을 자주 받는다.
- 더 작은 기능별 코드 작성 (이 방법으로 테스트 및 유지 관리 가능)
- 대부분의 메소드 / 함수가 몇 줄에 불과할 때까지 기존 코드를 더 작은 코드 조각으로 리팩토링하고 목적이 무엇인지 명확합니다 (더 큰 모 놀리 식 블록에 비해 더 많은 함수를 생성 함)
- 관심사 분리 등 하나만 수행하는 함수 작성 (보통 스택에 더 많은 함수와 더 많은 프레임을 작성 함)
- 더 많은 파일 생성 (파일 당 하나의 클래스, 분해 목적의 MVC, 도메인 아키텍처, 디자인 패턴, OO 등의 레이어 목적으로 더 많은 파일 시스템 호출을 생성하는 클래스)
이것은 2500 줄에 걸친 메소드와 모든 클래스와 신 객체를 사용하는 "오래된"또는 "오래된"또는 "스파게티"코딩 방식과 비교하여 변경된 것입니다.
내 질문은 이것입니다 :
기계 코드, 1 초 및 0 초, 조립 지침, HDD 플래터에 이르기까지 다양한 리팩토링 된 작고 작은 함수와 메소드가있는 완벽하게 클래스로 분리 된 OO 코드가 생성되는 것에 대해 걱정해야합니다. 더 많은 오버 헤드?
세부
OO 코드와 메소드 호출이 결국 ASM에서 처리되는 방식과 DB 호출 및 컴파일러 호출이 HDD 플래터에서 움직이는 액추에이터 암으로 변환되는 방식에 대해 친숙하지는 않지만 몇 가지 아이디어가 있습니다. 각 추가 함수 호출, 객체 호출 또는 "#include"호출 (일부 언어)은 추가 명령어 세트를 생성 하여 실제 "유용한"코드를 추가하지 않고 코드 볼륨을 늘리고 다양한 "코드 배선"오버 헤드를 추가한다고 가정합니다. . 또한 실제로 하드웨어에서 실행되기 전에 ASM에 대한 최적화를 수행 할 수 있다고 생각하지만 최적화도 그렇게 많이 할 수 있습니다.
따라서 제 질문은 잘 분리 된 코드 (수백 개의 파일, 클래스 및 디자인 패턴 등으로 분리 된 코드)가 실제로 얼마나 많은 오버 헤드 (공간 및 속도)를 포함하는지는 이 오버 헤드로 인해 하나의 모 놀리 식 파일의 모든 것 "
명확성을 위해 업데이트 :
나는 동일한 코드를 가져 와서 나누고, 리팩토링하고, 점점 더 많은 함수와 객체 및 메소드와 클래스로 분리 하여 더 작은 코드 조각 사이에 점점 더 많은 매개 변수가 전달 될 것이라고 가정 합니다. 확실히, 리팩토링 코드는 스레드를 계속 유지해야하며 매개 변수 전달이 필요합니다. 이상의 방법 이상의 클래스 이상의 공장 메소드 디자인 패턴, 더욱 오버 헤드 정보의 다양한 비트를 전달 결과 더 는 단일 모 놀리 식 클래스 또는 방법의 경우보다.
모든 코드의 최대 70 %가 ASM의 MOV 명령으로 구성되어 있으며 실제 계산이 아닌 적절한 변수로 CPU 레지스터를로드한다고합니다. 제 경우에는 PUSH / POP 명령으로 CPU 시간을로드하여 다양한 코드 조각 사이에 링크 및 매개 변수 전달을 제공합니다. 코드를 작게 만들수록 더 많은 오버 헤드 "연결"이 필요합니다. 이 연결이 소프트웨어 팽창 및 속도 저하에 추가 될까 걱정하고 다음 세기에 소프트웨어를 구축하는 현재 및 미래 세대의 프로그래머 때문에이 문제에 대해 걱정해야하는지, 그리고 어느 정도가 필요한지 궁금합니다. 이러한 관행에 따라 구축 된 소프트웨어와 함께 생활하고 소비해야합니다.
업데이트 : 여러 파일
오래된 코드를 천천히 대체하는 새 코드를 작성 중입니다. 특히 나는 이전 클래스 중 하나가 ~ 3000 줄 파일이라고 언급했습니다 (앞서 언급했듯이). 이제 테스트 파일을 포함하여 여러 디렉토리에 위치한 15-20 파일 세트가되고 일부를 함께 묶는 데 사용하는 PHP 프레임 워크는 포함하지 않습니다. 더 많은 파일도 제공됩니다. 디스크 I / O와 관련하여 여러 파일을로드하는 것은 하나의 큰 파일을로드하는 것보다 느립니다. 물론 모든 파일이로드되는 것은 아니며 필요에 따라로드되며 디스크 캐싱 및 메모리 캐싱 옵션이 존재하지만 여전히 메모리 loading multiple files
보다 더 많은 처리가 필요 하다고 생각합니다 loading a single file
. 나는 내 관심사에 그것을 추가하고 있습니다.
업데이트 : 종속성 모든 것을 주입하십시오.
잠시 후에 다시 돌아옵니다. 내 질문이 잘못 이해 된 것 같습니다. 아니면 일부 답변을 오해하기로 선택했을 수도 있습니다. 나는 약간의 답변이 지적되었으므로 마이크로 최적화에 대해 이야기하고 있지 않습니다 (적어도 나는 마이크로 최적화에 대해 말하는 것을 잘못 생각합니다). 코드의 모든 수준에서 나는 최근에 Zend Con에서이 스타일의 코드가 컨벤션의 핵심 요점 중 하나였습니다. 보기에서 논리를 분리하고, 모델에서 보거나, 데이터베이스에서 모델을, 가능하면 데이터베이스에서 데이터를 분리하십시오. 의존성-모든 것을 주입하십시오. 때로는 아무것도 하지 않는 배선 코드 (함수, 클래스, 상용구)를 추가하는 것을 의미합니다.하지만 이음매 / 후크 포인트 역할을하며 대부분의 경우 코드 크기를 쉽게 두 배로 늘립니다.
업데이트 2 : "코드를 더 많은 파일로 분리"가 성능에 크게 영향을 미치나요 (모든 수준의 컴퓨팅에서)
compartmentalize your code into multiple files
오늘날의 컴퓨팅 (성능, 디스크 사용률, 메모리 관리, CPU 처리 작업) 에 대한 철학은 어떤 영향을 미칩니 까?
나는 말하고있다
전에...
가상의 아직까지는 그리 멀지 않은 과거에 모델과 뷰, 컨트롤러 스파게티가 있거나 스파게티가 아닌 파일의 단일 블록을 쉽게 작성할 수 있지만 이미로드 된 후에는 모든 것을 실행 합니다. 과거에 C 코드를 사용하여 일부 벤치 마크를 수행하면 단일 900Mb 파일을 메모리에로드하고 큰 덩어리로 처리하는 것이 작은 파일을로드하고 더 작은 평화 식사로 처리하는 것보다 훨씬 빠릅니다. 결국 동일한 작업을 수행하는 덩어리.
.. 그리고 지금*
오늘 나는 원장을 보여주는 코드를 찾고 있습니다. .. 항목이 "주문"이면 주문 HTML 블록을 표시하십시오. 광고 항목을 복사 할 수있는 경우 아이콘과 그 뒤에 HTML 매개 변수를 표시하는 HTML 블록을 인쇄하면 복사 할 수 있습니다. 항목을 위나 아래로 이동할 수 있으면 적절한 HTML 화살표를 표시하십시오. 기타 Zend Framework를 통해partial()
본질적으로 "매개 변수를 가져 와서 호출하는 별도의 HTML 파일에 삽입하는 함수 호출"을 의미합니다. 원하는 세부 정보에 따라 원장의 가장 작은 부분에 대해 별도의 HTML 함수를 만들 수 있습니다. 하나는 화살표 위, 아래 화살표, 하나는 "이 항목을 복사 할 수 있습니다"등입니다. 웹 페이지의 작은 부분을 표시하기 위해 여러 파일을 쉽게 만들 수 있습니다. 내 코드와 비하인드 젠드 프레임 워크 코드를 사용하면 시스템 / 스택은 20-30 개의 서로 다른 파일을 호출 할 수 있습니다.
뭐?
코드를 여러 개의 작은 개별 파일로 분할하여 생성되는 시스템 의 마모에 관심이 있습니다.
예를 들어, 더 많은 파일을로드한다는 것은 파일 시스템의 다양한 위치와 실제 HDD의 다양한 위치에 파일을 배치하는 것을 의미합니다. 이는 더 많은 HDD 탐색 및 읽기 시간을 의미합니다.
CPU의 경우 더 많은 컨텍스트 전환 및 다양한 레지스터로드를 의미합니다.
이 하위 블록 (업데이트 # 2)에서는 여러 파일을 사용하여 단일 파일에서 수행 할 수있는 동일한 작업을 수행하여 시스템 성능에 영향을주는 방법에 대해 더 자세히 관심이 있습니다.
Zend Form API와 간단한 HTML 사용
Zend Form API를 최신의 최신 OO 사례와 함께 사용하여 유효성 검사를 통해 HTML 양식을 작성하고 POST
도메인 객체로 변환 했습니다.
그것을 만드는 데 35 파일이 필요했습니다.
35 files =
= 10 fieldsets x {programmatic fieldset + fieldset manager + view template}
+ a few supporting files
이 파일들은 모두 간단한 HTML + PHP + JS + CSS 파일로 대체 될 수 있으며, 총 4 개의 경량 파일 일 수 있습니다.
더 낫습니까? 그만한 가치가 있나요? ... 35 개의 파일과 수많은 Zend Zramework 라이브러리 파일, 4 개의 간단한 파일을로드한다고 상상해보십시오.