아하하...;

dhunter의 이미지

서버가 막 초당 40 건 정도밖에 처리 못할정도로 무거운 php 스크립트가 있길래 곰곰히 리버스 엔지니어링 해보니까...

... "아무것도 안하는" 소스더군요 -_-a;

뭔가 심오하리만치 문자열 비교를 하다가 막판에 출력 앞에 무조건부정하는 비교문을 달아놓아서 완전 황 -_-a;

결국 소스를 아예 지우고 입력값이 아예 없을때의 리다이렉션만 처리해놓으니 순식간에 올라가는 처리능력... (...)

아하하;;;

차리서의 이미지

저도 비슷한 경험이 있습니다. 예전에 어딘가에서 주워온 (매우 위험한 표현이지만 달리 표현할 길이 없군요) 170년간 음력 변환 소스를 개인적인 용도로 잘 쓰고 있었습니다. 문제는, 원본에 들어있던 기능 중 음력의 윤달과 간지를 처리하는 기능이 필요가 없었기 때문에 엄청난 귀차니즘을 동원해서 (소스 전체를 제대로 살펴보지도 않고) 마지막 리턴 부분에서만 살짝 불필요한 리턴 값을 제거하고 썼었다는 점입니다. 지극히 개인적이고 부하량이 낮은 용도여서 처음에는 몰랐는데, 나중에 용도가 늘어나서 계산량이 조금 많아지다보니 속도가 장난이 아닌겁니다. 역시 php로 쓰고 있었는데, 달력 한 달 플러스 알파(한 달 전후로 1~2 주 추가)의 약 50개 날짜들을 변환하는 데에 무려 1초 이상 걸리더군요. o_O

한참 후에 소스를 다시 들여다보고 깜짝 놀랐습니다. 일단 전역 변수로 한 번만 잡고 계속 쓰면 되는 (절대 재대입하지 않는) 꽤 작지 않은 크기의 배열 자료를 매 함수 호출시마다 새로 할당해서 쓴다는 설계상의 문제점도 있었지만 (사실은 이게 더 컸겠죠), 함수 내부의 그 복잡한 루프와 비교문의 대부분이 단지 윤달 처리와 간지 처리용이었다는 사실을 깨달은거죠. 제대로 잘 살펴보면서 거꾸로 (리턴 부분부터 시작해서 코드 진행의 역방향으로) 불필요한 것들을 모두 없애다보니 전체 코드의 약 반 이상이 사라졌습니다. 물론 속도는 아주 쓸만해졌고요.

이제는 여차저차해서 쓸모 없어져버렸지만 한때 PostgreSQL UDF로 쓰려고 C로 옮겨봤던 적이 있는데, 그다지 비싼 연산이 아니더군요. :)

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!