$oContext->init();에 대한 분석 다시시작~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | function init() { // set context variables in $GLOBALS (to use in display handler) $this ->context = & $GLOBALS [ '__Context__' ]; $this ->context->lang = & $GLOBALS [ 'lang' ]; $this ->context->_COOKIE = $_COOKIE ; $this ->setRequestMethod( '' ); $this ->_setXmlRpcArgument(); $this ->_setJSONRequestArgument(); $this ->_setRequestArgument(); $this ->_setUploadedArgument(); $this ->loadDBInfo(); // If XE is installed, get virtual site information if (Context::isInstalled()) { $oModuleModel = getModel( 'module' ); $site_module_info = $oModuleModel ->getDefaultMid(); if (!isset( $site_module_info )) { $site_module_info = new stdClass(); } // if site_srl of site_module_info is 0 (default site), compare the domain to default_url of db_config if ( $site_module_info ->site_srl == 0 && $site_module_info ->domain != $this ->db_info->default_url) { $site_module_info ->domain = $this ->db_info->default_url; } $this ->set( 'site_module_info' , $site_module_info ); if ( $site_module_info ->site_srl && isSiteID( $site_module_info ->domain)) { $this ->set( 'vid' , $site_module_info ->domain, true); } if (!isset( $this ->db_info)) { $this ->db_info = new stdClass(); } $this ->db_info->lang_type = $site_module_info ->default_language; if (! $this ->db_info->lang_type) { $this ->db_info->lang_type = 'en' ; } if (! $this ->db_info->use_db_session) { $this ->db_info->use_db_session = 'N' ; } } // Load Language File $lang_supported = $this ->loadLangSelected(); // Retrieve language type set in user's cookie if ( $this ->get( 'l' )) { $this ->lang_type = $this ->get( 'l' ); if ( $_COOKIE [ 'lang_type' ] != $this ->lang_type) { setcookie( 'lang_type' , $this ->lang_type, time() + 3600 * 24 * 1000, '/' ); } } elseif ( $_COOKIE [ 'lang_type' ]) { $this ->lang_type = $_COOKIE [ 'lang_type' ]; } // If it's not exists, follow default language type set in db_info if (! $this ->lang_type) { $this ->lang_type = $this ->db_info->lang_type; } // if still lang_type has not been set or has not-supported type , set as English. if (! $this ->lang_type) { $this ->lang_type = 'en' ; } if ( is_array ( $lang_supported ) && !isset( $lang_supported [ $this ->lang_type])) { $this ->lang_type = 'en' ; } $this ->set( 'lang_supported' , $lang_supported ); $this ->setLangType( $this ->lang_type); // load module module's language file according to language setting $this ->loadLang(_XE_PATH_ . 'modules/module/lang' ); // set session handler if (Context::isInstalled() && $this ->db_info->use_db_session == 'Y' ) { $oSessionModel = getModel( 'session' ); $oSessionController = getController( 'session' ); session_set_save_handler( array (& $oSessionController , 'open' ), array (& $oSessionController , 'close' ), array (& $oSessionModel , 'read' ), array (& $oSessionController , 'write' ), array (& $oSessionController , 'destroy' ), array (& $oSessionController , 'gc' ) ); } session_start(); if (isset( $_POST [session_name()])) { session_id( $_POST [session_name()]); } // set authentication information in Context and session if (Context::isInstalled()) { $oModuleModel = getModel( 'module' ); $oModuleModel ->loadModuleExtends(); $oMemberModel = getModel( 'member' ); $oMemberController = getController( 'member' ); if ( $oMemberController && $oMemberModel ) { // if signed in, validate it. if ( $oMemberModel ->isLogged()) { $oMemberController ->setSessionInfo(); } // check auto sign-in elseif ( $_COOKIE [ 'xeak' ]) { $oMemberController ->doAutologin(); } $this ->set( 'is_logged' , $oMemberModel ->isLogged()); $this ->set( 'logged_info' , $oMemberModel ->getLoggedInfo()); } } // load common language file $this ->lang = & $GLOBALS [ 'lang' ]; $this ->loadLang(_XE_PATH_ . 'common/lang/' ); // check if using rewrite module if ( file_exists (_XE_PATH_ . '.htaccess' ) && $this ->db_info->use_rewrite == 'Y' ) { $this ->allow_rewrite = true; } else { $this ->allow_rewrite = false; } // set locations for javascript use if ( $_SERVER [ 'REQUEST_METHOD' ] == 'GET' ) { if ( $this ->get_vars) { foreach ( $this ->get_vars as $key => $val ) { if ( is_array ( $val ) && count ( $val )) { foreach ( $val as $k => $v ) { $url .= ( $url ? '&' : '' ) . $key . '[' . $k . ']=' . urlencode( $v ); } } elseif ( $val ) { $url .= ( $url ? '&' : '' ) . $key . '=' . urlencode( $val ); } } $this ->set( 'current_url' , sprintf( '%s?%s' , Context::getRequestUri(), $url )); } else { $this ->set( 'current_url' , $this ->getUrl()); } } else { $this ->set( 'current_url' , Context::getRequestUri()); } $this ->set( 'request_uri' , Context::getRequestUri()); } |
분석하기에 앞서... 최종 결과에 대한 디버그 값을 찍어보자~
Context 클래스의 init() 실행 전후를 비교하면 아래와 같습니다. (저도 이렇게 보니 한결 보기 편하네요~^^)
한가지 짚고 넘어가자면 lang 변수에 658개의 프로퍼티가 할당되어 있네요... 이러면 정말...
서버에 부하가 심하지 않나요? --; 특히 저사양에서... 아직 잘 모르지만 그렇습니다. 658개나... 필요한지...
다국어라는 특징때문에 한개의 파일에 번역 파일이 있는건 좋지만... 항상 퍼포먼스도 생각해야 하는지라...
아무튼 잘 모르고 하는 소리니... 그러려니 하십시요^^
생각해 보니... 메모리만 많으면... 연산하는것도 아니라서... 부하 문제는 없겠네요~
결국 Context 클래스의 init() 실행하면,
Context -> context 값
Context -> db_info 값
Context -> lang 값
각종 로그인 정보, 세션정보, site 정보 등을 찾아서 세팅하는 것을 볼 수 있습니다.
자세히 적으려니... 아직 뼈대를 좀 보고 깊이 파는게 좋을 것 같습니다.
우선, 레이아웃과 스킨관련쪽 로드까지 파헤치고 전체적인 출력 관련을 확인하고... 다시 돌아와야지요~