2013-09-05 5 views
0

Symfony 1.4 및 AJAX에서 속도 문제가 있습니다.Symfony1 AJAX 동작 속도 향상

내 라우팅 :

ajax_search: 
     url: /search.:sf_format 
     param: { module: article, action: articlesAjaxSearch, sf_format: html } 
     requirements: 
     sf_format: (?:html|js) 

내 JS :

jQuery.ajax({ 
    type: 'GET', 
    url: jQuery('#searchform').attr('action'), 
    data: form_data, 
    success: function(result) 
    { 
     jQuery("#searchform #searchresult").html(result).slideDown('fast'); 
    } 
}); 

내 조치 :

public function executeArticlesAjaxSearch(sfWebRequest $request) { 
      $this->getResponse()->setContent("<html><body>Hello, World!</body></html>"); 

      return sfView::NONE; 

    } 

이 짧은 버전입니다,하지만 난 속도를 개선 할 필요가 . AJAX 호출은이 HTML 컨텐트를 다시 가져 오기 위해 약 200ms가 필요합니다. 내가 심포니 일이 너무 오래 걸릴 이유가 이해가 안

Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} Action "article/articlesAjaxSearch" 115.39 ms (1) 

내 아약스 요청 속도를 향상시킬 수있는 솔루션을 필요로

Sep 05 09:25:58 symfony [info] {articleActions} Call "articleActions->executeArticlesAjaxSearch()" 
Sep 05 09:25:58 symfony [info] {sfWebResponse} Send status "HTTP/1.1 200 OK" 
Sep 05 09:25:58 symfony [info] {sfWebResponse} Send header "Content-Type: text/html; charset=utf-8" 
Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} Configuration 0.88 ms (8) 
Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} Factories 53.19 ms (1) 
Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} Action "article/articlesAjaxSearch" 115.39 ms (1) 
Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} Database (Doctrine) 0.01 ms (3) 
Sep 05 09:25:58 symfony [info] {sfWebDebugLogger} View "None" for "article/articlesAjaxSearch" 0.00 ms (1) 
Sep 05 09:25:58 symfony [info] {sfWebResponse} Send content (39 o) 

:

여기 내 로그입니다. 누구든지 나를 도와 줄 수 있기를 바랍니다.

ajax 요청의 전체 시간은 로직 구현없이 ~ 200ms가 소요됩니다.

+0

이 작업을 위해'sfWebDebugLogger'를 끄는 것은 많은 일을 느리게 할 것입니다. 여전히 타이밍을보고 싶다면'microtime()'을 사용하여 직접 구현하고 AJAX 응답으로 반환하십시오. 물론 hello world를 원한다면 일반 PHP 파일을 사용하여 구현하고 심포니를 완전히 건너 뜁니다. – halfer

+0

Cant는 webdebuglogger를 사용하지 못하지만, 나는 너무 자극적 인 env에서 시도해 보았습니다. – Wykk

+0

모듈에 대한 기본값으로 새로운 공장을 만들려면 알아야합니다. 하지만 그는 여전히 응용 프로그램 팩토리에서 상속 된 속성을 얻습니다. 기본 설정으로 팩터를 모듈에 대체하는 방법을 아는 사람이 있습니까? – Wykk

답변

1

난 그냥 제안 :

public function executeArticlesAjaxSearch(sfWebRequest $request) { 
    // ... 
    echo json_encode($answer); 
    exit; 
} 

당신은 별도의 응용 프로그램에 모듈을 넣을 수 및 filters 불필요한을 사용하지 않도록 설정합니다. 별도의 환경을 사용하거나 사용하지 않도록 설정하거나 factories의 빠른 구현을 사용할 수도 있습니다.

+0

이 작업 멋지게 :) thx 모든 오버 헤드를 제거 facotries.yml 쓸 수 있을까요? 뭔가를 제거했지만 아직 45ms 남았습니다 :/ – Wykk

+0

그 공장에서 필요한 기능이 있습니다. 예를 들어 sfPatternRouting은 꽤 비쌉니다. 클래스 sfNoRouting을 사용할 수 있습니다. URL을 변경해야합니다. 또는 직접 작성할 수도 있습니다. 그런 다음 sfNoLogger를 사용하여 로거 항목을 사용할 수 있습니다. – Marek

+0

팩토리 설정은 구성 배열의 항목 일 뿐이며 요청하지 않는 한 아무 것도로드되지 않습니다. – Marek