Ajax 콜백에 가장 빠른 방법 / 구현 방법은 무엇입니까?


18

다양한 / 수많은 맵 이벤트에서 아약스를 통해 마커를로드하는 맵이 있습니다. 현재 hook_menu()json / js를 인쇄하는 항목에 대한 사용자 정의 페이지 콜백을 정의하고 있습니다.

내 페이지 콜백 내용을 반환하지 않고 내용 만 인쇄 하므로 Drupal은 전체 템플릿, 메뉴 등을 렌더링하지 않으므로 JavaScript 있는 페이지를 반환 할 수 있습니다 .

이것이 효과가 있지만 Drupal은 여전히 ​​완전히 부트 스트래핑한다고 생각합니다. 즉, 삭제하려는 오버 헤드가 많이 발생합니다.

내가보고 있었어요 고성능 자바 스크립트 콜백 핸들러 한마디로는 "고성능 자바 스크립트 콜백 핸들러"어느로 자신을 자랑, 외모 그것은 제공하는 것처럼 js.php칭찬 index.php하고 사용자 정의 / 제한 귀하의 요청을 직접 / Drupal은 기본적으로 부트 스트랩 최적화를 수행합니다.

불행히도 js 프로젝트에는 아직 D7 릴리스 ( 여기서 탄원서) 가 없으므로 시작으로 이어집니다 ...

Drupal에서 Ajax 콜백을 구현하는 가장 빠른 방법은 무엇입니까?

답변:


8

hook_menu()내 json / js를 인쇄하는 항목에 대한 사용자 정의 페이지 콜백을 정의합니다 .

그것이 Drupal 6이 제공 한 것입니다. 드루팔 7 AJAX 프레임 워크는 개보다 조금 할 수 있습니다. 예, Drupal을 부트 스트랩하지만 많은 기능을 무료로 제공합니다. 간단히 말해 ajax_deliver () 를 페이지 전달 방법으로 사용하고 명령을 브라우저에 보낼 수 있습니다.

... 버튼과 링크에 클래스를 추가하여 Ajax를 활성화 할 수 있습니다. 'use-ajax'클래스를 링크에 추가하면 Ajax 호출을 통해 링크가로드됩니다. 이 방법을 사용할 때 링크의 href에는 경로의 일부로 '/ nojs /'가 포함될 수 있습니다. Ajax 프레임 워크가 요청하면이를 '/ ajax /'로 변환합니다. 그러면 서버는이 요청이 실제 Ajax 요청을 통해 이루어 졌는지 또는 저하 된 상태인지를 쉽게 알 수 있고 적절하게 응답 할 수 있습니다.

그러나 성능상의 이유로 프레임 워크를 회피하고 싶다면 모듈에서 자바 스크립트에서 직접 PHP 파일을 호출하는 것을 막을 수는 없습니다. Drupal의 장점은 없지만 페이지를 완전히 제어 할 수 있습니다.


감사! 성능에 관계없이 실제로 Ajax Framework를 사용하고 있어야합니다 (지금 알고 있음). b / c ajax 페이지 요청 프로세스 개선은 해당 컨텍스트 내에서 일어날 수 있습니다. :)
electblake

2
예제 모듈을 살펴보면 많은 도움이 될 것이며 프레임 워크는 형태에 맞게 설계되었지만 어디서나 사용할 수 있습니다. 'use-ajax'클래스에 대해 약간의 답변을 편집했습니다.
Jeremy French

3
때로는 PHP 파일을 직접 호출하는 것이 좋습니다. 해당 파일에 bootstrap.inc를 포함시킨 다음 api.drupal.org/api/drupal/includes--bootstrap.inc/function/… 을 필요한 특정 수준으로 호출 할 수도 있습니다.
greggles

4

조금 늦었지만 특히 폴링에 해당 아약스 콜백을 사용하는 경우 (예를 들어 새 메시지 확인) 흥미로운 대안이 있습니다 : Drupal node.js integration .

폴링 대신 사용자 (페이지의 JS라고도 함)가 node.js 서버에 열린 연결을 유지하는 이벤트와 유사한 시스템을 구축 할 수 있습니다. 어떤 일이 발생하면 node.js를 통해 모든 사용자에게 직접 알릴 수 있습니다.


좋은 제안을하기에는 너무 늦지 않았습니다. 이런 종류의 일에 node.js를 사용할 생각조차하지 않았지만 갑자기 감사합니다!
electblake

3

Drupal에서 Ajax 콜백을 구현하고 싶기 때문에 JS 모듈을 사용하는 것이 좋습니다. 방금 코드를 간단히 살펴 보았으며 기본적으로 제안한 내용입니다 (그러나 세부 사항에 더 많은 관심을 기울임). 관리자는 드루팔 최고의 개발자 중 하나입니다.

사용 할 것 같습니다 module_load_include()아마 더 수동 또는 include 'sites/all/modules/contrib/...';다른 모듈에서 API를 사용해야하는 경우 접근 방식을.

당신이 말하는 바로 그 문제는 최근 화제가되었습니다. DrupalCon Chicago의 Dries 기조 연설에서 Drupal 8이 콜백 및 HTML이 아닌 출력 형식을 수행하기 위해 더 나은 API가 필요한 방법에 대해 이야기했습니다.


간단히 말해 JS.php & do / project / js를 계속 연구하십시오. D7 릴리스 관련 문제에 대해 탄원을 시작하겠습니다. 비디오 주셔서 감사합니다!
electblake

예, JS 프로젝트가 아직 D7로 포팅되지 않은 것은 부끄러운 일입니다. 그것은 가벼운 페이지 요청을 얻기가 너무 부끄러운 일입니다.
매트 콜린스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.