16

PHP 및 JavaScript와 같은 해석 된 프로그래밍 언어에서 절차 적 접근 방식에 대한 객체 지향 접근 방식의 영향은 무엇입니까?속도 비교 - 절차 언어와 OO 비교 절차

특히 내가 찾고있는 것은 웹 애플리케이션을 생성하고 절차 적 및 객체 지향적 접근 방식을 선택할 때 고려해야 할 사항의 체크리스트로 속도뿐 아니라 유지 보수성을 최적화하기위한 것입니다. 인용 된 연구 및 테스트 사례는이 기사를 더 자세히 살펴보면 도움이 될 것입니다.

결론 : OO 대 프로 시저를 통역 언어로 사용할 때 얼마나 큰 성능이 실제로 발생합니까?

답변

17

어쩌면 나는 미쳤지 만 해석 언어를 사용하는 경우 속도가 걱정되는 것은 창고에 페인트 할 색을 파악하는 것과 같습니다. 이런 종류의 최적화가 전적으로 성숙한 아이디어라는 생각조차하지 마십시오.

'유지 관리 가능성'이라고 말하면 머리에 못을 박았습니다. 나는 가장 생산적이고 유지 보수가 가능한 방식을 택할 것입니다. 나중에 속도가 필요하다면, 인터프리터 언어 내에서 절차 대 객체 지향 코딩 패러다임을 전환하는 것으로부터 오는 것은 아닙니다.

+0

나는 지옥의 대장을 가졌습니다. 그는 프로그래밍에 대해서는 알지 못했지만 모든 것을 알고 있다고 생각했다. (그는 유닉스 타임 스탬프에서 한 번 강의하면서 "유닉스 타임 스탬프는 유럽의 타임 스탬프와 같다. 이상한 일을한다./mm/yyyy "ROFL, 바보 같은 사람). 그래서 그가 OO PHP를하고 있다는 것을 알았을 때 그는 뒤집어서 "우리 사이트를 느리게 만들 것"이라고 말했다. 나는 내가 OO 프로그래밍을 계속할 수 있도록 그가 가득 찼음을 증명할 수있는 어떤 종류의 연구를 찾고 있었다. – cmcculloh

+2

http://clientsfromhell.net/ – Xeoncross

+0

OOP는 덜 생산적이고 덜 유지 보수 가능하다. –

5

결론 : 해석의 오버 헤드가 메소드 디스 패칭의 오버 헤드를 압도하기 때문에 아니오.

2

인터프리터 언어를 사용하는 경우 차이는 발생하지 않습니다. 성능이 문제가되는 경우 해석 된 언어를 사용하지 않아야합니다. 둘 다 똑같이 수행 할 것입니다.

0

저는 실제로 웹 사이트에서 파이썬으로 이처럼 작은 테스트를 수행했습니다. 그리고 웹 사이트에서 속도가 거의 같고 절차 적 접근 방식이 초당 10 만분의 1 정도이기는하지만 OO 코드가 너무 빨라서 반복 작업을 한 번 이상 계속하지 않았습니다.

정말, 그건 (내 경험으로는) 중요하지 않습니다.

1

성능은 언어가 아닌 구현에 의해 특징 지어 질 것입니다. 가장 느린 언어를 사용할 수 있으며 규모에 맞게 설계하면 세계에서 가장 큰 사이트가 될 수 있습니다.

최적화의 첫 번째 규칙을 기억하십시오.

하지 마십시오.

:

10

불행히도, 나는 내 테스트도 수행했습니다. 테스트 속도는 같았지만 거의 같았습니다.하지만 PHP에서 memory_get_usage()를 사용하는 메모리 사용량을 테스트 할 때 OOP 쪽에서 압도적으로 큰 수를 보았습니다.

OOP의 경우 116,576 바이트에서 절차상의 경우 18,856 바이트. 나는 "하드웨어가 싸다"는 것을 알고 있지만, 어서와! 사용량이 1,000 % 증가 했습니까? 죄송합니다. 최적이 아닙니다. 그리고 한 번에 많은 사용자가 귀하의 웹 사이트를 때리는 데, 나는 당신의 RAM이 그냥 태워 버릴 것이라고 확신합니다. 내가 잘못?

1

내 경험에 의하면,로드가 많은 사이트는 절차가없는 것보다 OOP 코드로 인해 쉽게 응답하지 않게됩니다. 이유는 이해하기 쉽습니다.

OOP에는 절차 코드보다 메모리에서 더 많은 메모리 할당 (MALLOC) 및 더 많은 작업이 필요합니다. 작업을 수행하는 데 더 많은 CPU 시간이 필요합니다.본질적으로 '오버 헤드'이며, 프로 시저 코드를 감싸고, 특히 데이터베이스 작업을 수행 할 때 CPU 실행 부담을 가중시킵니다.

OOP의 편리함과 같은 많은 프로그래머가 간단한 인터페이스 뒤에 숨겨진 작은 검정 상자를 만들었습니다. 그러나 사용자로드가 많은 상황에서 영원히 반응하는 사이트를 되 살리기 위해 돈을 잘 지불했습니다. OOP를 제거하고 간단한 절차 함수로 대체하는 것은 큰 차이를 만들었습니다.

사이트가 매우 바쁠 것으로 예상되지 않으면 꼭 OOP를 사용하십시오. 트래픽이 많은 시스템을 구축하는 경우에는 처리에서 모든 CPU 사이클을 제거하고 가능한 출력에서 ​​모든 바이트를 제거해야합니다.