2010-01-04 3 views
2

나는 aqbout 시간대와 날짜/시간을 물어 보았습니다. 그러나 이것은 좀 더 구체적인 질문입니다. PHP의 Objects에 관한 것입니다.PHP의 객체 : 많거나 적다면 더 좋을까요?

<?PHP 
//set the user's time zone on page load 
date_default_timezone_set("America/Los_Angeles"); 

//convert the timestamp from DB into the user's time 
$timestamp = '2008-05-01 13:44:19'; //this would normally be returned from mysql 
echo ConvertDateTime($timestamp, "America/Los_Angeles"); 

//here is the function to convert it 
function ConvertDateTime($timeString, $timeZone) 
{ 
    if ($d = new DateTime($timeString)) { 
     $d-&gt;setTimeZone(new DateTimeZone($timeZone)); 
     return $d-&gt;format("Y-m-d H:i:s"); 
    } 
    return null; 
} 
?> 

확인이 아마 일부 바보 queston하지만 난 정말 많이 알고하거나 일반적으로 내가 한 데이터베이스 개체 및 실행을 만들 것입니다 예를 들어 페이지에서 클래스와 객체에 올 때 많은 경험이없는 그 1 개의 객체가 설정된 페이지상의 모든 mysql 질의. 나는 항상 더 적은 물체가 더 좋을 것이라고 생각하지만,이 사이트에서 수백 개의 물체를 갖는 것이 동일한 물체 일 때 1 개의 물체와 비교하여 사용되는 속도와 자원이 같을 것이라고 읽었습니다.

내 질문에 위의 함수에서 함수를 호출 할 때마다 새 DateTime 개체가 만들어지고 내 상황에 따라 일부 페이지에서 100 번 발생할 수 있음을 알 수 있습니다. 그래서 싱글 톤처럼 사용하거나 심지어 데이터베이스 개체가 설정되어있는 헤더에서 dattim 개체를 1 번 설정할 수 있습니까? 아니면 함수에서 많은 개체를 만들도록해야합니까?

찬반 양론에 대해 설명하고 조언을 부탁드립니다. 일부는 내가 미리 최적화한다고 말하면서 2 년 넘게 현재 사이트를 최적화하여 원하는 곳으로 가져 왔습니다. 지금 나는 그 사이트를 재구성하고 있기 때문에 어떤 사용자로드가 기대되는지를 알기 때문에 나중에 대신 나중에 이와 같은 것을 고칠 것입니다.

답변

3

나는 문제없이되지 않은 singlton

싱글처럼 사용한다 - 예를 들어, 그들은 종종 어려운 테스트 (자동)합니다. 이유있는 그들이 이하의 하나 "큰"프레임 워크


(내가 그들의 다음 주요 버전 싱글 톤의 수를 줄일 수있다 젠드 프레임 워크와 심포니에 대해 생각하고)에 의해 좋아 어느

너무 부작용으로 갈 수있는 전역 변수/객체를 사용 에서 헤더

을 dattim 객체 1 시간을 설정할 수 있습니다; 변수가 "로컬"을 의미하는 경우에는 로컬 코드를 읽기 쉽도록 이해해야하며 일반적으로이를 이해하는 능력은 밀리 초보다 훨씬 중요합니다. 극단적 인 특정 경우에


유일한 (참) 솔루션은 프로파일 링하는 것입니다 : 당신은 당신의 스크립트/응용 프로그램이 빨리 가고 싶어? 적은 CPU를 사용하려면?

그런 다음 우선 프로필을 작성하십시오. 병목 현상을 파악하고 집중해야 할 것을 보여줄 것입니다.

(즉, 생각할 시간이 짧고 코드 및 테스트가 덜 걸릴 수 있습니다)으로 최적화 할 수있는 기회가 많으며 더 높은 성능을 얻을 수 있습니다./ 뭔가에게 그것을 유지하는 데 걸리는

  • 시간을 최적화

    • 최선의 공연이 발전하는 데 걸리는
    • 시간; 결국


      , 당신은 항상 사이에서 선택해야 다른 사람을 포함해서.

    새롭고 더 강력한 서버 (또는 두 번째 서버)가 결국 5 % 만 얻는 데 2 ​​주 미만의 시간을 소비합니다.

    (난 당신이 최적화 안 말하지 않았다 참고,하지만 당신은하지 오버 최적화해야합니다.)

  • +0

    테스트 및 물건 외에도, 나는 단지 1 개체를 사용하는 것이 나쁜지 알아 내려고 노력하고 있습니까? 때로는 엄청난 양의 물건을 사용하는 사람들을 볼 수 있습니다. 이유는 알지 못합니다. 물건을 처음 접했기 때문에 이유가있을 수 있습니다. 아직 무엇인지 아직 모르겠습니다. – JasonDavis

    +0

    @ jasondavis : 1 개만 사용하는 것보다 여러 개의 객체를 사용하는 것이 더 합리적이라면 하나의 객체 만 사용하는 것이 "좋지"않습니다. 일반적으로 중요한 것은 코드가 의미가 있다는 것입니다. ;; 일반적으로 코드를 지나치게 최적화 할 필요가 없습니다. 그런 종류의 최적화로 얻을 수있는 1 ~ 2 %의 CPU보다 시간이 더 중요하며 (지불 할 때 더 많은 비용이 소요됩니다) . ;; 2 일 동안 CPU의 25 %를 얻는 것이 좋습니다 ("캐시"로 작동하는 "쉬운"아이디어) .; 10 일 동안 1 ms를 얻는 것은 종종 가치가 없습니다. –

    0

    난 항상 적은 개체가 아마 더 나은 생각하지만 난 에 읽고 개체가 수백 개있는이 사이트는 동일한 속도이고 리소스가 1 개체와 비교하여 사용되는 사이트 인 경우 사실인지 확실하지 않습니다.

    추가 개체는 추가 메모리 공간이 필요합니다. 따라서 작업 경로가 영향을 미칠 수 있습니다 (그러나 눈에 띄지는 않을 수도 있고 사용자가 조치를 취해야 할 수도 있음).

    당신이 새로운 DateTime 개체가 매번 함수가 호출 될 때 생성되는 것을 볼 수 있습니다 내 상황에서 일부 페이지에 100 배 수 있습니다. 또는 당신은 같은 페이지에 여러 다른 시간을 표시하고 있습니까 (페이지의 결과를 캐시 - - 많은 장소 또는 그냥 같은 계산 된 시간 그래서 나는

    예, 당신이 싱글을 사용할 수있는 singlton처럼 사용한다 ?)

    +0

    안녕하세요 그것은 서로 다른 시간이며 캐싱은 거의 불가능하거나 가치가 없습니다 큰 사회적 네트워크 사이트로 거기에 수천 개의 캐시가있을 것입니다 실제로 페이지의 수백만있을 수 – JasonDavis

    0

    이 경우 함수가 호출 될 때마다 새 객체를 생성해도 메모리가 많이 사용되지 않으므로 함수가 남아있을 때마다 메모리가 해제됩니다.

    정확히 같은 $ timeString 및 $ timeZone을 사용하여 함수를 여러 번 호출하는 경우 결과의 캐싱을 추가 할 수 있습니다. 대부분의 호출이 고유 할 경우 캐싱을 추가하지 않을 것입니다. 속도면에서 성능 향상에 도움이되지만 모든 결과를 저장하는 것은 재사용하지 않고 메모리를 낭비하는 것입니다.

    +0

    네, 그것은 다른 시간이 될 것입니다, 나는 거의 모든 예제에서 1 개의 객체 또는 100 개의 객체를 페이지에서 100 번 수행해야한다고 생각하고있다. – JasonDavis

    +0

    각 호출마다 타임 스탬프와 시간대가 모두 바뀔 수 있다면 각각에 대해해야 할 것이다. 말하다. 그 중 하나가 일정하다면 작은 도메인 공간이고 다른 옵션이 될 수 있습니다. 그리고 나는 그것에 대해 뭔가를 말했기 때문에 시간대 사이의 오프셋을 사용하여 조회로 처리 할 수있는 시간 부분에 실제로 가능한 결과가 86400입니다. 문제를 다른 방식으로 살펴보고 스스로 해결할 수 있습니다. – Dragonaire

    관련 문제