2013-02-26 1 views
0

클라우드 및 CSS 프레임 워크 트위터 부트 스트랩에 여러 데이터베이스를 사용하여 "typeahead"와 ajax를 사용하여 텍스트 필드에서의 성공을 파악하고 있습니다. 이제 모든의 keyup 이벤트 하나 아약스 호출에 불을 얻을 아래와 같이 쿼리를 발생 :어떻게하면 브라우저의 부하를 줄일 수 있습니까?

public function prod_identifier_typeahead($value) {    
    $db = ConnectionManager::getDataSource('incident_mgmt'); 
    $list = $db->rawQuery('select id, identifier from products where identifier like "'.$value.'%";');  
    $options = array(); 
    while ($row = $db->fetchRow()) { 
     $options[] = array('id' => $row["products"]["id"],'name' => $row["products"]["identifier"]);      
    }  
    $this->set('options', $options); 
    $this->set('_serialize', 'options');   

} 

모든 아약스 호출이 아약스 호출 쿼리 처리에 부하를 줄이기 위해 연결 개체를 부탁해는, 누군가가 나를 도울 수 사용?

+0

왜 'rawQuery'를 사용하고 '모델'을 사용하지 않고 건너 뛰고 있습니까? 이렇게하면 CakePHP 프레임 워크를 전혀 사용하지 않을 것입니다. 일을 더욱 악화시키기 위해서,'$ value'는 위생적으로/도망 치지 않을 것입니다. ** 따라서 귀하의 코드는 SQL 인젝션을 위해 매우 안전하고 개방적입니다. **이 장을 매뉴얼에서 읽으십시오 : http://book.cakephp.org/2.0/en/models/retrieving-your-data.html – thaJeztah

+0

나는 그 cakePHPs 규칙을 따르지 않는다는 것을 안다. 그러나 나는 여러 개의 데이터베이스를 가지고 있으며, 서로 통합되어있어 cakephpRUN을 무거 우며 기본값 대신 다른 데이터베이스의 데이터를 가져온다. rawQuey를 사용해야한다 ... 다른 옵션은 없다. have ... :) – Jhanvi

답변

1

케이크에는 데이터베이스에서 검색된 데이터를 저장하는 데 사용할 수있는 caching이 있습니다. 따라서 중복 요청은 데이터베이스에 영향을 미치지 않지만 다시 사용하지 않을 데이터로 캐시를 채우지 않도록주의해야합니다.

일반적인 사용 패턴을 최적화하려고합니다. 예를 들어, 사용자가 'abdc'를 입력하고 백 스페이스를 두 번 누른 다음 'cd'를 입력하십시오. 이 경우 'ab'와 'abd'에 즉시 캐시 히트되지만 5 분 후에는이 쿼리와 관련된 모든 것을 지우는 것이 안전 할 것입니다.

+0

그래서 ... 내 접근법은 적절하거나 내가 사이트의 모든 첫 번째로드에 하나의 여분의 캐시 파일을 작성하여 대체해야하며 그 파일을 typeahead..lease 가이드에서 데이터를 잡아 사용해야합니다 어떤 해결책을 내가 선호해야합니까? – Jhanvi

+0

작동하는 경우, 나는 그대로 두십시오. 성능 문제가 발생하기 시작하면 데이터를보고 캐싱 전략을 선택할 수 있습니다. –

+0

오른쪽 nw 내 테이블은 거대한 데이터를 가지고 있지 않으므로 잘 작동합니다 ... 그러나 테이블의 미래 데이터가 증가하면 모든 키 업에로드가 생성되고 심지어 연결을 생성하고 페치 할 시간이 필요하다고 생각합니다. 당신은 내가 어떻게 cakephp의 기능에 의해 캐싱 접근법을 적용해야하는지 설명해 주길 바란다. – Jhanvi

관련 문제