2013-05-27 2 views
0

이전에이 작은 함수를 작성하여 전달 된 인수를 기반으로 고유 한 ID를 만들었습니다. 내 질문은, 그게 더 나은 (성능) 방법을 해결하는 것입니다. 주어진 함수의 서명을PHP - 인수를 기반으로 고유 한 ID 생성

function id_make(/* POLYMORPHIC */) 
{ 
    return md5(serialize(func_get_args())); 
} 

echo id_make(__FILE__, 'something', ['item' => 'some_content']); 
+0

무엇을위한 성능? 저장 공간이 적습니까? 적은 계산 시간? –

+0

'_ _FILE_ _'자체는 파일 이름 일 뿐이지 만이 파일의 내용과 같은 컨텍스트를 제공하는 것이 더 적절할 수 있습니다. –

+0

@marc comput – n00b

답변

1

CRC32도 조금 빨리 다음 직렬화 인 MD5 (http://www.php.net/manual/en/function.crc32.php)

로 json_encode()를 약간 빠른 것으로 보인다().

+1

'json_encode' 또한''serialize'보다 유연하지 않습니다. (http://stackoverflow.com/a/5351788/1729885) 충돌 가능성이 약간 증가 할 것입니다. 예상 가능한 유스 케이스의 경우는 물론 가능하지 않습니다. –

1

는 개선 정도가 아니다 - 그것은 3 체인 기능은 당신이 그 (것)들을 원하는 것을 정확하게 할 행에서 호출, 그래서 아무것도 최적화하거나이 제거 할 수 있습니다.

3 함수가 내재적으로 컴파일 된 기능을 더 많이 또는 덜 부르다는 것을 감안할 때 충돌 가능성을 만들지 않고도 같은 수준의 유연성을 제공 할 수있는 대체 방법이 있다고 생각하지 않습니다.

아니,이 기능을 향상시키기 위해 여기서는 아무 것도 없습니다. 유연한 해싱이 필요한 경우 외부 코드에서 일부 최적화를 사용할 수 있습니다.

1

오히려 큰 개체를 인수로 전달할 때 성능 문제가 발생한다고 생각하십니까?

스크립트의 목적을 모르지만 도움이 될 수 있습니다. 어쩌면 당신은 물마루 인수를 반복해야하고 객체 일 때 해쉬로 대체 할 수 있습니다. 참조 : http://php.net/manual/en/function.spl-object-hash.php

하지만 내가 알기로 목적을 모르기 때문에 개체가 파괴 될 때 같은 해시를 다시 사용할 수 있습니다.