2012-04-08 3 views
5

나는이 질문의 제목이 약간 오도 될 수도 있음을 알고있다; JSON은 데이터 형식을 지정하는 방법이며 AJAX는 새로 고치지 않고 서버에서 /로 서버로/서버로 업데이트를 푸싱하는 방법이라는 것을 알고 있습니다. 나는 합법적으로이 분야에 대한 많은 경험이 없기 때문에 묻습니다.CakePHP : JSON 대 AJAX

감안할 때 내가 CakePHP의 웹 응용 프로그램을 가지고 : I 업데이트 클라이언트 측 스크립트를 사용하여 다음/푸시 데이터를 끌어 JSON을 사용하기

  • 을 선택하면 단순히 취향의 문제를입니다 그 페이지?
  • AJAX를 사용하여 서버에서 전체 HTML 스 니펫을 가져 와서 페이지에 삽입하면됩니까?

두 가지 사이의 유일한 차이점은 JSON은 서버 및 대역폭 사용에 대한 부하가 적어 개발자가 사용하기에 더 편한 언어라는 것을 의미합니다 (JSON은 클라이언트 쪽 스크립팅이 더 많음을 의미 할 수 있음) ?).

누군가 나를 위해이 문제에 대해 밝힐 수 있습니까?

+0

좋은 질문 - 저는 믿지만 프로그래머 교환에 속합니다. –

+0

@MichaelDurrant 나는 프로그래머 교환에 관해 모른다. OP가 끝난 후의 프로그래밍 철학이기 때문에 진정한 '답'이 무엇인지 잘 모르겠습니다. 어쩌면 포럼에 있습니까? 그런 다음 다시 한 번 '내 새 앱에 클라이언트 측 또는 서버 측 템플릿을 더 잘 사용할 수 있습니까?'라는 질문에 자신을 상상할 수 있습니다. Stackoverflow에이 질문에 그것에 대해 다룹니다. – Mosselman

+0

@Purren 당신은 StackOverflow에 관한 두 가지 질문을했습니다.이 질문과 대답은 1 년 전의 질문입니다. 지역 사회를 위해 지역 사회를 개선하기 위해 노력하십시오. – Mosselman

답변

3

좋은 질문입니다. 특히 Backbone.js와 같은 것들이 점점 인기를 얻고 있습니다.

단계별로 살펴 봅니다.

첫 번째로, HTML이 아닌 JSON을 생성하는 서버의 부하가 거의 비슷합니다. 대부분의 리소스는 데이터 객체를 HTML 또는 JSON으로 변환하지 않지만 클라이언트 요청을 수락하고, 프레임 워크를로드하고, 케이스에 CakePHP를로드하고, 요청을 라우팅하고, 더 많은 구성 요소를로드하고, 데이터베이스 연결을 설정합니다. 쿼리를 던지고 결과를 받아들이고 배열/객체로 변환 한 다음 해당 데이터를보기 용 문자열 (JSON 또는 HTML)로만 출력하기 시작합니다. 문제는 PHP와 같은 서버 측 언어가 일을 반복하고 값을 문자열로 출력하는 것에 깊은 인상을받지 않지만 어려움없이이를 수행 할 수 있다는 것입니다.

실제로 JSON 출력을 시작할 때 성능 차이가 크지는 않습니다. 최소한, 대부분의 것들을 위해 충분히 크지는 않습니다.

JSON을 사용하고 싶다면 복잡한 기능이있는 경우입니다. 예를 들어 tweetdeck의 피드와 같이 업데이트가 필요한 작은 구성 요소와 데이터 조각이 많이있는 피드; 싱글 짹짹, 짹짹, 팔로워 수 목록 등. 매번 완전한 HTML 세트를 다시 다운로드하기보다는 이러한 작은 정보를로드하는 것이 좋습니다. 당신은 잠재적으로 변경 될 수있는 많은 것들을 가지고 있기 때문에 JSON과 클라이언트 측 템플릿을 사용할 것입니다.

그러나 블로그, 전자 상거래 웹 사이트, 위키 등의 '일반적인'응용 프로그램에서는 이와 같이 세밀한 작업이 필요하지 않습니다. 이 경우 AJAX (정의를 사용)를 사용합니다.

일부 이유는 JSON을 반환하는보기를 먼저 만든 다음이를 렌더링하기 위해 클라이언트 쪽 템플릿을 만드는 것보다 HTML보기를 만드는 것이 더 쉽고 더 개발자 친화적이기 때문입니다. 서버 측 템플리트에서 특정 조건을 점검하고, 루프를 작성하고, 필요할 때 추가 데이터를 가져 오는 것이 더 쉽습니다. 어쨌든 모든 것을 그만큼 잘 수행하지는 못할 것입니다.

또 다른 이유는 서버 측에서 정적 HTML을 사용하여 비 AJAX 페이지도 대체 할 수 있다는 것입니다.따라서 AJAX가 클라이언트에서 사용 가능할 때, AJAX를 통해 내용을로드하고 바꾸는 것은 당신이 가지고있는 HTML에서 ''와 ''의 내용을 말할 수있게 해줍니다. 그러나 AJAX가 없을 때, 그 페이지. 이제는 자바 스크립트 클라이언트와 비 자바 스크립트 클라이언트를 모두 지원합니다. 서버 측 및 클라이언트 측 템플리트를 사용하여이 작업을 수행 할 수도 있지만 이중 작업이 필요하거나 콧수염과 같은 것을 사용해야합니다.

이뿐 아니라 JSON을 사용하여 클라이언트에서 모든 렌더링을 수행 할 때 단점은 페이지 렌더링에 일부 정보가 필요하지만 사용자의 손에 넘어 가지 않아야한다는 것입니다. 신용 카드 데이터, 사회 보장 번호, 실제 이름 등을 상상할 수 있습니다. 서버 측에서 렌더링하기 전에 코드에서 일종의 확인을 실행해야합니다. 클라이언트 측에서 동일한 검사를 수행하려면 클라이언트에게 모두 보내야합니다. 사용자에게 제공합니다. 물론 클라이언트 측에 보내기 전에 서버 측에서 모든 데이터를 먼저 처리 할 수는 없지만 HTML 템플릿에서 수행하는 작업이 점점 더 많아지고 있음을 의미합니다.

요약하면 :

을 나를 위해 서버 또는 클라이언트 측 HTML 렌더링의 성능은 현실에서 분명하지 않습니다. JSON을 많이 사용하지만, 일반적으로 뷰와 관련없는 것들에 사용합니다. AJAX 호출을 통해 무언가를 저장 한 다음 JSON에서 상태 보고서를 반환하는 것과 같습니다. 그래서 if data.status == 'awesome' 같은 것들을 할 수 있습니다. 그러나 만약 내가 완전히 AJAX 정상적인 웹 사이트라면, 나는 pjax (아래)와 같은 것을 사용하여 서버에서 HTML 조각을로드합니다. 내 눈에 자바 스크립트는 기존 HTML로 일을해야하며 너무 많이 결합해서는 안됩니다. 많은 작은 조각의 데이터를 동시에 추적해야하는 실제로 복잡하고 실시간 인 응용 프로그램을 만들 때 예외가 있으므로 클라이언트 측 템플릿에는 모든 곳이 아니라 그 위치가 있습니다.

pjax를 살펴 보시고, 서버 측에서 동적으로 HTML 조각을 페이지의 요소로로드하는 자바 스크립트 라이브러리입니다. http://pjax.heroku.com/

DHH는 Basecamp의 설치 방법과 방법에 대한 해커 뉴스의 답변에 답변했습니다. 대부분 서버 측 스크립트, 작은 클라이언트 MVC.

https://news.ycombinator.com/item?id=3603898

또 다른 흥미로운 링크. LinkedIn은 성능 측면에서 클라이언트 측 템플릿을 사용하는 방법을 설명합니다. http://engineering.linkedin.com/frontend/leaving-jsps-dust-moving-linkedin-dustjs-client-side-templates