가령 A = 게시판, B = 알림 관리, C = 관리자 패널... 이라고 할때, ABC를 모두 포함한 모듈을 제작하고 있습니다.

 

확실히 모듈화 측면에서 보면 말도 안되는 개발이지만 개발 시일이 촉박해서 그렇게 만들고 있습니다.

 

제가 궁금한 것은 이렇게 큰 모듈을 만드는게 성능상 불이익을 받을 수 있는가 입니다. 

 

  • ?

    한 사이트에서 쓸꺼면 그냥 합치는게 낫지 않을까요?
    저라면 합칠듯 합니다.

  • ? ?
    일단은 한 사이트에서 쓸거지만 향후 유사한 상황에서도 재사용을 하고 싶습니다. 사실 패키지 성격이고 내부적으로만 종속이 되기 때문에 굳이 쪼개서 번거롭게 할 필요성을 못 느끼긴 합니다. 하지만 성능상 이점이 있나 싶어서 여쭤봅니다.
  • ? ?

    php에서 성능이야 해괴하게 짜지 않거나 기가막힌 알고리즘을 짜지 않는 이상 별 차이 없지 않을까 싶네요

  • ? ?
    답변 고맙습니다.
  • profile
    음... 큰 모듈을 만들면 그만큼 함수 정의가 많아지니 아주아주아주~ 조금은 성능차이가 있겠죠.
    별 차이가 없을것 같긴 하지만요.
  • profile

    XE에서는 controller, model, view (+admin, mobile, api) 정도밖에 구분하지 않기 때문에 이 구조 안에서 많은 기능을 넣으면 파일 하나에 몇천 줄씩 들어가게 됩니다. 파일이 커질수록 현재 페이지와 무관한 코드를 많이 로딩하게 되니 성능이 안 좋아지는 건 당연하고요. 특히 트리거가 들어가는 파일이 커지면 전혀 상관없는 페이지에서도 부담이 커집니다.

    코드 복붙을 최소화하고 공통 기능을 별도의 함수로 빼내면 많이 절약이 되지만 이것도 한계가 있고, 결국 어느 시점에선가 파일을 쪼개야 합니다. 그러나 여러 모듈로 쪼갤 필요는 없다고 생각해요. 한 모듈 안에서도 XE에서 기본으로 제공하는 구조 외에 얼마든지 파일을 만들 수 있고, 꼭 필요한 곳에서만 include_once를 사용하거나 spl_autoload_register로 끌어다 쓸 수 있으니까요.

    이런 방법으로 많은 파일을 그때그때 불러다 쓰는 예로는 고급 메일 발송 모듈이 있습니다. 트리거가 들어가는 파일은 몇 줄 없지만, 메일을 보내려고 하면 어마어마하게 많은 파일이 쓱~ 인클루드되지요.
    https://github.com/kijin/xe-advanced-mailer

  • profile ?
    도움이 정말 많이 되었습니다. 감사합니다.
  • ?
    음... @기진곰님 이 트리거 말씀을 하셔서 module.handler를 보고 있는데, 일단 모듈의 기본 MVC는 최대한 다이어트를 하는게 조금이라도 속도를 빨라지게 하는 핵심같네요.

    클래스 파일의 줄 수 자체의 문제보다도 트리거 실행을 위해 getModule로 모듈의 함수들을 다 끌어와서 인스턴스를 만드는데 이게 속도를 느려지게 할 수 있을 것 같습니다. method_exists도 중복이 되고 있네요.
  • ? profile

    네, 트리거 실행시 상당히 많은 것이 로딩됩니다. 만약 모듈을 분리하신다면 트리거만 따로 모으는 것도 성능을 개선하는 한 방법이 될 수 있습니다.

  • profile ?

    아... 그럴 수도 있겠네요. 근데 지금 생각해보니까 아예 트리거 전용 클래스로 가령 document.trigger.php를 만들어놓으면 트리거 불러오는데에 getModuleInstance까지 쓸 필요도 없을 것 같은데...

     

    아니면 그냥 trigger 디렉토리를 따로 파서 그 안에 trigger_name.php 이런 식으로 트리거를 모아놓거나요.

  • ?
    아무튼 트리거 부분 지금 살펴보니까 개선의 여지가 상당히 있는 것 같습니다. 고수분들이 손 좀 봐주셨으면 하는 바램입니다.

    전 이만 의뢰받은 모듈 마저 만들러 가보겠습니다 ㅠㅠ