2010-11-19 2 views
13

나는 ajax 요청에 의해 즉석에서 생성 된 많은 html을 가진 장고 웹 애플리케이션을 만들고있다. 지금 당장 장고의 템플릿 언어를 사용하여 html을 작성한 다음이 새로운 HTML을 JSON 객체의 문자열로 전달한 다음 jQuery로 페이지에 삽입합니다.Javascript 또는 Django로 템플릿을 만드시겠습니까?

이것은 매우 잘 작동하지만 Javascript는 현대 브라우저에서 매우 빠르며 너무 많은 자바 스크립트 템플릿 라이브러리가 만들어져 모든 클라이언트를 푸시해야하는지 궁금합니다.

그래서 내 질문은 : 내 모든 평균 "페이지"와 그것으로부터 오는 모든 요청이 ~ 300 개의 템플릿 (각 약 15 줄 정도의 5 개 정도의 대체가 있음)을 HTML로 컴파일해야한다는 것을 감안할 때 평생 동안 브라우저에서 템플릿을 만드는 데 상당한 성능 이점이 있습니까?

또한 누구나 '빠른'자바 스크립트 템플릿 라이브러리를 사용할 수 있습니까? 나는 언더 스코어에 대해 좋은 점을 들었다. js, mustache.js 및 jQuery 템플릿.

+0

클로저 템플릿은 Google 컴파일러에서 컴파일 할 수 있기 때문에 빠릅니다. – Evgeny

+0

이 문제도 있었지만 많은 양의 이미지 갤러리에 관련된 데이터 양 때문에 HTML을 돌려 보내는 것은 무리가 있습니다. 나는 클라이언트와 서버 측 수염과 그것을 해결했다 - 나는 콧수염을 좋아한다. –

답변

4

Django 템플릿을 사용하는 (대규모) 이점은 생성하려는 페이지와 상관없이 동일한 기능을 유지하는 템플릿 언어 하나만 사용하면된다는 것입니다. 성능 문제가있는 것으로 확인되면 caching template fragments을 고려해야합니다.

+0

s/Django/Jinja2/g을 사용하면 훨씬 더 복잡해집니다.) – Evgeny

+0

물론 인용구를 신중하게 사용한다면 Django 템플릿이 JSON을 생성 할 수 없다는 말은 없습니다 ... –

0

왜 HTML을 JSON으로 전달합니까? HTML을 다시 보내고 jQuery의 $.html() 함수를 사용하여 <div> 또는 무엇이든 넣습니다.

자바 스크립트로 템플릿을 작성하는 경우는 Pure입니다. 당신이 jQuery를 사용한다면 (나는 그것을 권하고 싶다), it already has a template engine.

+0

My 응답 객체에는 다른 정보 (dom과 uid의 요소를 어디에 연결해야하는지)가 포함되어 있습니다. $ .html 함수를 사용하지만 새 html이 포함 된 JSON 사전의 키를 전달합니다. –

0

이중 목적의 템플릿을 만들 수 있습니다. 즉, js로 대체 할 수있는 자리 표시 자로 렌더링 될 수 있으며 동시에 서버 출력용으로 렌더링 될 수 있습니다. 단지 몇 개의 템플릿 만이 이중 목적을 가질 필요가 있습니다 - js로 대체 될 단편.

나는 이그나시오에 동의한다. 자바 스크립트에 별도로 쓸 필요가 없도록 각 템플리트의 복사본 하나를 유지하는 것이 훨씬 낫다.하지만 나는 분명히 개선의 여지가있다. 위에서 언급 한.

템플릿을 서버의 출력용 일반 문자열뿐만 아니라 강력한 자바 스크립트 기능 코드로 컴파일하는 것이 가장 좋습니다.

Closure templates 소이 (Soy)라고 불리는이 문제는 멋지게 해결되지만 파이썬으로는 잘 작동하지 않지만 Java 및 Javascript로 작업합니다. 다행히 언젠가 거기에 대한 파이썬 지원이있을 것입니다.

비록 그럴 경우에도 .get_absolute_url(), 필터 등을 파이썬과 자바 스크립트에서 모두 자동으로 작동하도록하기 때문에 템플릿 언어가 더 제한적일 수 있습니다.

3

하이브리드 클라이언트 및 서버 템플릿 아키텍처가 좋지 않다고 생각합니다. 한 환경에서만 템플릿을 코딩하면됩니다.

페이지 서버 쪽을 생성 할 때마다 처리 시간과 네트워크 대역폭이 소모됩니다. 이것은 호스팅 된 서버를 사용하는 경우 지불하는 것입니다.
사용자의 브라우저가 일반적으로 응답하지 않는 컴퓨터에서 유휴 상태로 대기하는 동안.

클라이언트 (HTML + JS)에서 템플릿을 보내는 경우 사용자가 세션을 삭제하거나 삭제하지 않을 경우 템플릿을 캐시 할 수 있습니다.
동일한 콘텐츠를 여러 번 제공하기 위해 네트워크 트래픽을 줄입니다. 데이터는 일반적으로 동등한 렌더링 HTML보다 작습니다.

오늘날의 Javascript 엔진은 실제로 실행 속도가 빠릅니다. 렌더링 작업을 클라이언트에 전송할 때마다 서버의 처리 시간을 절약하고 데이터를 더 빠르게 전달할 수 있습니다.

우리는 클라이언트에서 모두 실행되므로 우리는 초고속 클라이언트 렌더링을 위해 PURE을 생성했습니다. 우리의 앱은이 지방 분권의 결과로 매우 빠르게 보입니다.

+0

조언을 주셔서 감사합니다. 나는 PURE를 점검 할 것입니다. –

관련 문제