2009-05-20 7 views
2

나는 내 사이트를위한 간단한 포럼에서 작업 해왔다. 마지막 방문 이후 읽지 않은 게시물 + 포럼을 표시하는 기능을 추가하고 있습니다.이것이 내가 원하는 것을하기위한 좋은 방법인가? (PHP에서)?

기본적으로 각 사용자 계정으로 포럼에 마지막으로 액세스 한 날짜가 저장됩니다. 사용자가 사이트로 돌아 오면 모든 post_id 및 post_parent_forum 값을 가져 오는 쿼리가 실행되고 배열에 추가됩니다.이 값은 SESSION 변수에 저장되며 키는 post_id (고유 한 값) 및 값 포럼 ID (게시물은 몇 개의 포럼에 표시되기 때문에 고유하지 않습니다). 포럼 지수

, 내가 forum_id이 배열이 있다면, 그것은 "읽지 않음"으로 표시한다 있는지 각 포럼()와 in_array 사용. 스레드 목록에

는, I는 해당 "읽지 않음"으로 표시되어 있으면, 각 스레드 ID의 키가 배열되어 있는지 array_key_exists()를 사용한다. 소식을 볼 때

는 항목 스레드의 ID에 동일한 키를 가진 어레이에서 제거된다.

이 방법이 합리적입니까, 아니면 포럼이 인기를 얻으면 문제가 발생합니까? 각 포럼 목록에서 20 개의 array_key_exists() 검사를 실행하는 것에 대해 우려했습니다. 합리적으로 빠른가요?

사이드 노트에서 ... 나는 세션 저장 배열과 직접 작업 할 수 있습니까? 아니면 일반 변수에 값을 할당하고, 키를 제거하고, 이전 세션 var를 설정 해제하고 다시 설정해야합니까? 업데이트 된 배열로?

+0

사용자가 로그온하고 로그 오프 한 다음 다시 로그온하면이 방법이 유용할까요? 그러면 모든 게시물이 "읽음"으로 표시되지 않습니까? – peirix

+0

아니요. 마지막 액세스 시간표가 여전히 계정에 저장되기 때문에 불가능합니다. 따라서 마지막 액세스 이후에 추가 된 항목 만 (이 예에서는 1 분 또는 그 이하). –

+0

"마지막 방문 이후"는 마지막 페이지 새로 고침이 아닌 마지막 성공 로그인 (현재 로그인 이전 로그인) 이후를 의미합니다. – stefs

답변

1

PHP 배열은 해시 테이블입니다! 해시 키 조회는 비용이 많이 들지 않으므로 아니기 때문에이 문제로 인해 성능 문제가 발생한다고 생각하지 않습니다.

와 in_array는 다른 문제 (전체 배열을 검색)이지만, 정말 - 여전히 문제가되지 않습니다. 조숙 한 최적화를 조심하십시오!

나는 세션 저장 배열

예와 직접 작업 할 수 있습니다. $_SESSION은 (보통) 세션 파일 내용의 병어를 제거하여 session_start()을 호출 할 때 채워지는 배열입니다. 스크립트가 끝나거나 session_write_close()이 호출되면 $ _SESSION 배열은 serialize()입니다. 정말 마술이 아닙니다. 모든 $_SESSION전역 변수 (윽) 후

당신이 그렇게해야하는지는 또 다른 문제이다. 당신이 갈 수

+0

나는 그 일을 더 빨리 (그리고 게으른) 생각했다 .... 대신에 또는 읽기, 수정, 해제 및 재설정. –

+1

일이 너무 복잡하지 않으면 그 점에 아무런 문제가 없습니다. 하지만 용감한 남자를 미치게 만들 수있는 세션 괴물을 보았습니다. 내가 깨끗하게 지내고 싶다면 보통 문지기 역할을하는 수업을 작성하십시오. – stefs

0

그냥 다른 경로 ...

는 사용자 테이블에 last_activity 타임 스탬프 필드가 사용자가 새로운 페이지를로드 매번 업데이트합니다.

각 게시물/포럼에 대해 last_updated timestamp 필드가 있습니다.

는 포럼/게시물 그냥 타임 스탬프를 비교할 수 있습니다 "읽지 않은"경우 참조하십시오.

+0

활동 타임 스탬프가 게시물을 보는 것과 관계없이 업데이트됩니다. –

+0

당신이 무슨 말을하고 있는지 확실하지 않습니다. 사용자 활성 ts는 모든 페이지로드마다 업데이트됩니다. 포스트/포럼 TS는 모든 댓글/스레드/모든 업데이트됩니다. 페이지를 마지막으로로드 한 시간과 개체가 마지막으로 업데이트 된 시간을 알 수 있습니다. 당신은 그 정보를 가지고 읽지 않은 물건을 얻을 수 있어야합니다? – Galen

+0

게시물 타임 스탬프가보기에서 업데이트되면 다른 사람이 게시물을 읽었을 때도 게시물을 읽음으로 등록합니다. 그렇지 않은 경우 사용자가 첫 번째 페이지를로드 한 후 모든 게시물에 "읽기"가 표시됩니다. –

0

내 연습은 말한다 : 그들은 자원에서 가장 비싼이기 때문에 (특히 텍스트로 가득 포럼과 같은 프로젝트), 해시 테이블의 성능에 대해 걱정하지만, DB 관련 문제에 대해 생각하지 않습니다. 필자는 PHP 성능과 관련된 문제를 만난 적이 없었습니다. MySQL의 문제는 항상 훨씬 빨라졌습니다.

관련 문제