[JQUERY] 왜 생성 된 HTML 대신 JSON의를 반환하는 나쁜 관행인가? 아니면 무엇입니까?
JQUERY왜 생성 된 HTML 대신 JSON의를 반환하는 나쁜 관행인가? 아니면 무엇입니까?
해결법
-
1.사실, 양쪽에 조금 해요 :
사실, 양쪽에 조금 해요 :
당신은 Ajax 요청에서 돌아 오는 것과 페이지의 전체 부분을 교체 할 때 HTML을 사용하여의 주요 장점은 다음과 같습니다
나는 일반적으로 정말 적어도 서버에서 고려 사물의 "성능"편을하지 않습니다
마지막으로 한 가지 definitly 중요한 것은 :
그리고 다른 답변에 대답 : 당신이 페이지 이상의 부분을 업데이트해야하는 경우,이 솔루션은 여전히 존재 / 하나의 큰 문자열 그 그룹의 여러 HTML 부분 내부의 모든 부품을 보내는 해킹 및 JS에서 관련 부분을 추출합니다.
예를 들어, 모양이 마음에 몇 가지 문자열을 반환 할 수 있습니다 :
<!-- MARKER_BEGIN_PART1 --> here goes the html code for part 1 <!-- MARKER_END_PART1 --> <!-- MARKER_BEGIN_PART2 --> here goes the html code for part 2 <!-- MARKER_END_PART2 --> <!-- MARKER_BEGIN_PART3 --> here goes the json data that will be used to build part 3 from the JS code <!-- MARKER_END_PART3 -->
(나는 시간의 꽤 부부, 대부분 HTML 데이터를 JSON으로 캡슐화하기에 너무 큰있을 때 사용했습니다) 그건 정말 잘 보이지 않지만, definitly 유용 : 당신은 페이지 그 부분에 대한 HTML을 보내는 필요 프레 젠 테이션, 당신은 당신이 데이터를 필요로하는 상황에 JSON을 보내는 ...
... 그리고 그 압축을 풀려면 JS 부분 문자열 방법은 트릭을 할 것입니다, 나는 가정 ;-)
-
2.나는 주로 여기서 언급 된 의견에 동의합니다. 난 그냥 그들을로 요약하고 싶었 :
나는 주로 여기서 언급 된 의견에 동의합니다. 난 그냥 그들을로 요약하고 싶었 :
-
3.잘,
잘,
나는 별도의 일들이 방법을 좋아하는 그 드문 사람 중 하나 있어요 : - 서버는 데이터를 (모델)을 제공하기위한 책임이있다; - 클라이언트가 보여주는 (보기)와 데이터를 (모델)를 조작하기위한 책임이있다;
따라서, 서버 (이 경우 JSON은 더 나은에서) 모델을 제공에 초점을 맞추어야한다. 이 방법을 사용하면 유연한 접근 방식을 얻는다. 당신이 모델의보기를 변경하려면, 그 변화를 동일한 데이터를 전송하는 서버를 유지하고 단지 클라이언트, 자바 스크립트 구성 요소를 변경하는 뷰에 데이터. 상상, 당신은뿐만 아니라 데스크탑 애플리케이션으로 모바일 장치에 데이터를 제공하는 서버가 있습니다.
서버와 클라이언트 코드가 결코 당신이 PHP / JAVA / 등을 JS로 전환 지킬 때 일어나는 것이다 초점을 잃어 동시에 구축 할 수 있기 때문에 또한,이 방법은 생산성은 증가
일반적으로, 나는 그들이 마스터 JS하지 않기 때문에 그들은 가능한 한 그것을 피하려고, 그래서 대부분의 사람들은, 서버 측에서 최대한을 선호 생각합니다.
기본적으로,이 각도에서 작업하는 그 사람들과 같은 의견을 가지고있다. 제 생각에는 웹 애플리케이션의 미래입니다.
-
4.나는 내가 추가 할 수 있습니다 생각 뭔가 흥미가 있습니다. 나는 오직 전체보기를 한 번로드하는 응용 프로그램을 개발. 그 시점에서 그것은 단지 아약스와 서버에 다시 전달. 그것은 오직 (이 여기에 중요하지 내 이유) 한 페이지를로드 할 필요가 있었다. 흥미로운 부분은 내가 표시 할 자바 스크립트와 부분보기에 작동 할 몇 가지 데이터를 반환 할 특별한 필요가 있다고 제공됩니다. 나는 두 개의 액션 메소드에 두 통화로이 분할 할 수 있지만, 내가 뭔가 조금 더 많은 재미와 함께 가기로 결정.
나는 내가 추가 할 수 있습니다 생각 뭔가 흥미가 있습니다. 나는 오직 전체보기를 한 번로드하는 응용 프로그램을 개발. 그 시점에서 그것은 단지 아약스와 서버에 다시 전달. 그것은 오직 (이 여기에 중요하지 내 이유) 한 페이지를로드 할 필요가 있었다. 흥미로운 부분은 내가 표시 할 자바 스크립트와 부분보기에 작동 할 몇 가지 데이터를 반환 할 특별한 필요가 있다고 제공됩니다. 나는 두 개의 액션 메소드에 두 통화로이 분할 할 수 있지만, 내가 뭔가 조금 더 많은 재미와 함께 가기로 결정.
확인 해봐:
public JsonResult MyJsonObject(string someData) { return Json(new { SomeData = someData, PartialView = RenderPartialViewToString("JsonPartialView", null) }, JsonRequestBehavior.AllowGet); }
당신은 요청할 수 있습니다 RenderPartialViewToString ()는 무엇입니까? 그것은 바로 여기 차가움이 작은 덩어리입니다 :
protected string RenderPartialViewToString(string viewName, object model) { ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }
그것은 하나의 액션 JsonResult에 대한 방법과 ParticalViewResult 하나를 호출하는 것보다 오버 헤드가 더 또는 덜 초래하는 경우 잘 모르겠어요 그래서 나는 여기에 대한 성능 테스트를 완료하지 않은,하지만 난 여전히 매우 담담했다 생각했다. 그냥 문자열로 부분 뷰를 직렬화하고 그것의 매개 변수 중 하나와 JSON과 함께 보냅니다. 나는 다음의 적절한 DOM 노드로 그것을 그 매개 변수를 사용하고 때리고 JQuery와 사용 :)
나 당신이 내 하이브리드의 생각을 알려주세요!
-
5.응답이 더 이상 클라이언트 측 처리를 필요로하지 않는 경우, HTML 내 의견으로는 OK입니다. 보내기 JSON는 해당 클라이언트 측 처리를 수행하도록 강요합니다.
응답이 더 이상 클라이언트 측 처리를 필요로하지 않는 경우, HTML 내 의견으로는 OK입니다. 보내기 JSON는 해당 클라이언트 측 처리를 수행하도록 강요합니다.
나는 한 번에 모든 응답 데이터를 사용하지 않을 때 다른 한편으로는, 내가 JSON을 사용합니다. 예를 들어, I 값가는 하나 개를 결정 선택된 값 등등 제 채우기 위해 사용될 수 세 체인 선택 일련있다.
-
6.IMV,이 데이터의 프리젠 테이션에서 데이터를 분리에 대한 모든,하지만 내가 파스칼과 함께 해요, 반드시 그 분리는 클라이언트 / 서버 경계를 넘어 될 수 있음을 따르지 않습니다. 당신은 (서버)에 이미 분리를 가지고 당신이 JSON을 다시 전송하고 클라이언트에 대한 사후 처리가, 아니면 그냥 HTML을 다시 보내 여부, 클라이언트에게 뭔가를 보여주고 싶은 경우, 사용자의 요구에 전적으로 의존한다. 일반적인 경우 다시 HTML 보내 당신에게있는 거 "잘못"을 말하는 것은 너무 문 IMV 담요 단지까지입니다.
IMV,이 데이터의 프리젠 테이션에서 데이터를 분리에 대한 모든,하지만 내가 파스칼과 함께 해요, 반드시 그 분리는 클라이언트 / 서버 경계를 넘어 될 수 있음을 따르지 않습니다. 당신은 (서버)에 이미 분리를 가지고 당신이 JSON을 다시 전송하고 클라이언트에 대한 사후 처리가, 아니면 그냥 HTML을 다시 보내 여부, 클라이언트에게 뭔가를 보여주고 싶은 경우, 사용자의 요구에 전적으로 의존한다. 일반적인 경우 다시 HTML 보내 당신에게있는 거 "잘못"을 말하는 것은 너무 문 IMV 담요 단지까지입니다.
-
7.JSON은 매우 versatil 경량 형식입니다. 나는 클라이언트 측 템플릿 파서 데이터로 사용하기 시작했다 때 나는 그것의 아름다움을 발견했다. 내가 (높은 서버 부하를 발생) 서버 측에서 유식 및 뷰를 사용하던 이전하면서 내가 지금은 일부 사용자 지정 JQuery와 함수를 사용하여 모든 데이터를 템플릿 파서로 클라이언트 브라우저를 사용하여, 클라이언트 측에서 렌더링, 설명하겠습니다. 그것은 서버의 resourses을 저장하고 다른 손으로 브라우저에서 매일 자신의 JS 엔진을 향상시킬 수 있습니다. 클라이언트 분석의 속도가 지금보다 더 중요한 문제가되지 않습니다 그래서 그들은 클라이언트 측의 resourses을 많이 소비하지 않도록, JSON 객체는 ususally 매우 작다. 나는 느린 브라우저보다는 때문에 매우로드 서버의 모든 사람들을위한 느린 사이트와 일부 사용자에게 느린 웹 사이트가있는 것을 선호합니다.
JSON은 매우 versatil 경량 형식입니다. 나는 클라이언트 측 템플릿 파서 데이터로 사용하기 시작했다 때 나는 그것의 아름다움을 발견했다. 내가 (높은 서버 부하를 발생) 서버 측에서 유식 및 뷰를 사용하던 이전하면서 내가 지금은 일부 사용자 지정 JQuery와 함수를 사용하여 모든 데이터를 템플릿 파서로 클라이언트 브라우저를 사용하여, 클라이언트 측에서 렌더링, 설명하겠습니다. 그것은 서버의 resourses을 저장하고 다른 손으로 브라우저에서 매일 자신의 JS 엔진을 향상시킬 수 있습니다. 클라이언트 분석의 속도가 지금보다 더 중요한 문제가되지 않습니다 그래서 그들은 클라이언트 측의 resourses을 많이 소비하지 않도록, JSON 객체는 ususally 매우 작다. 나는 느린 브라우저보다는 때문에 매우로드 서버의 모든 사람들을위한 느린 사이트와 일부 사용자에게 느린 웹 사이트가있는 것을 선호합니다.
당신이 그것을 변경하거나 훨씬 더 쉽게 당신이 그것을 할 수있는 또 다른 서비스로 데이터를 통합하려는 내일 경우, 다른 한편으로는, 그래서 프리젠 테이션에서 서버 당신 추상적 그것에서 순수한 데이터를 전송.
그냥 내 2 센트.
-
8.내 생각에 가장 좋은 방법이다 깨끗한 분리 할 클라이언트를 원하는 경우, 다음은 자바 스크립트에 의해 생성 된 DOM의 100 %를 가지고 의미가 있습니다. 당신은 UI를 구축하는 방법을 모든 노하우를 가지고있는 MVC 기반 클라이언트를 구축 할 경우, 사용자는 하나 개의 자바 스크립트 파일을 한 번 다운로드하고는 클라이언트에 캐시입니다. 그 초기로드 후 모든 요청은 Ajax를 기반으로 만 반환 데이터입니다. 이 방법은 내가 찾은 깨끗한과 프리젠 테이션의 깨끗한 독립적 인 캡슐 레이션을 제공합니다.
내 생각에 가장 좋은 방법이다 깨끗한 분리 할 클라이언트를 원하는 경우, 다음은 자바 스크립트에 의해 생성 된 DOM의 100 %를 가지고 의미가 있습니다. 당신은 UI를 구축하는 방법을 모든 노하우를 가지고있는 MVC 기반 클라이언트를 구축 할 경우, 사용자는 하나 개의 자바 스크립트 파일을 한 번 다운로드하고는 클라이언트에 캐시입니다. 그 초기로드 후 모든 요청은 Ajax를 기반으로 만 반환 데이터입니다. 이 방법은 내가 찾은 깨끗한과 프리젠 테이션의 깨끗한 독립적 인 캡슐 레이션을 제공합니다.
서버 쪽은 단지 데이터를 전달에 초점을 맞추고 있습니다.
제품이 가능성이 모두 당신이 변화는 DOM을 생성하는 소스 JS이다 완전히 페이지의 디자인을 변경할 수 있지만하도록 요청하면 내일 그래서 당신의 기존 이벤트 핸들러를 재사용 할 수 있으며 100 % 프리젠 테이션에서 분리하기 때문에 서버가 태평
-
9.당신의 UI에 따라, 당신은 당신의 DOM에 다른 요소를 두를 업데이트 (또는 그 이상)해야 할 수도 있습니다. 당신의 응답이 HTML에있는 경우, 당신은 어디에서 어떤 일이 일어나는지 알아 내기 위해 구문 분석하는 건가요? 아니면 그냥 JSON 해시를 사용할 수 있습니다.
당신의 UI에 따라, 당신은 당신의 DOM에 다른 요소를 두를 업데이트 (또는 그 이상)해야 할 수도 있습니다. 당신의 응답이 HTML에있는 경우, 당신은 어디에서 어떤 일이 일어나는지 알아 내기 위해 구문 분석하는 건가요? 아니면 그냥 JSON 해시를 사용할 수 있습니다.
당신은 그것을 결합 / HTML 데이터와 JSON을 반환 할 수 있습니다 :
{ 'dom_ele_1' : '<p>My HTML part 1</p>', 'dome_ele_2' : '<div>Your payment has been received</div>' }
-
10.HTML은 많은 중복을 가지고 있으며, 데이터 즉, 태그, 스타일 시트 등을 표시하지 .. JSON 데이터에 비해 HTML 크기가 더 다운로드로 이어지는 더 큰 수와 시간을 렌더링 그래서 또한 브라우저는 새로운 데이터를 렌더링 바쁜하게됩니다.
HTML은 많은 중복을 가지고 있으며, 데이터 즉, 태그, 스타일 시트 등을 표시하지 .. JSON 데이터에 비해 HTML 크기가 더 다운로드로 이어지는 더 큰 수와 시간을 렌더링 그래서 또한 브라우저는 새로운 데이터를 렌더링 바쁜하게됩니다.
-
11.당신은 목록 또는 트리보기 또는 자동 완성으로 서버에서 정보를 요청하는 위젯 자바 스크립트가있을 때 보내기 JSON은 일반적으로 이루어집니다. 이 구문 분석 및 원료 사용되는 데이터를 그대로 내가 JSON을 보낼 것이다 때이다. 그러나 당신의 단지거야 쇼 HTML은 그 훨씬 덜 작품은 그것을 서버 사이드를 생성하는 경우 단지 브라우저에 표시됩니다. 당신이 잘못 갈 수 있도록 브라우저는 = ""직접 innerHTML을 가진 DOM에 HTML을 삽입에 최적화되어 있습니다.
당신은 목록 또는 트리보기 또는 자동 완성으로 서버에서 정보를 요청하는 위젯 자바 스크립트가있을 때 보내기 JSON은 일반적으로 이루어집니다. 이 구문 분석 및 원료 사용되는 데이터를 그대로 내가 JSON을 보낼 것이다 때이다. 그러나 당신의 단지거야 쇼 HTML은 그 훨씬 덜 작품은 그것을 서버 사이드를 생성하는 경우 단지 브라우저에 표시됩니다. 당신이 잘못 갈 수 있도록 브라우저는 = ""직접 innerHTML을 가진 DOM에 HTML을 삽입에 최적화되어 있습니다.
-
12.나는 그것이 디자인의 구조에 따라 생각, 그것은 HTML보다 JSON을 사용하는 것이 단지 더 섹시하지만 문제는 그것을 유지하기 위해 쉽게 할 수 있도록 하나가 그것을 처리 할 방법이다.
나는 그것이 디자인의 구조에 따라 생각, 그것은 HTML보다 JSON을 사용하는 것이 단지 더 섹시하지만 문제는 그것을 유지하기 위해 쉽게 할 수 있도록 하나가 그것을 처리 할 방법이다.
예를 들어, 내가 전체 사이트의 동일한 HTML / 스타일을 활용 리스팅 (listing) 페이지가 있다고, 나는 HTML의 그 부분을 포맷 할 수있는 전역 함수를 작성합니다 내가 할 일은 함수로 JSON 객체를 전달합니다.
-
13.클라이언트 측에서 약간의 계산을 수행 할 필요가없는 한 HTML 응답은 대부분의 경우에 충분하다.
클라이언트 측에서 약간의 계산을 수행 할 필요가없는 한 HTML 응답은 대부분의 경우에 충분하다.
-
14.상황에 따라 다릅니다.
상황에 따라 다릅니다.
때로는 JSON을 피하기 위해 필수적이다. 우리의 프로그래머는 예를 들어 JS에서 문제가 프로그래밍을해야합니다.
인라인 JSON보다 더 나은 사용 아약스 서비스 : 나의 경험은 나에게 말한다.
조만간 JS는 문제가된다
from https://stackoverflow.com/questions/1284381/why-is-it-a-bad-practice-to-return-generated-html-instead-of-json-or-is-it by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] .html 중에서 JQuery와 ()으로 .Append VS () (0) | 2020.10.22 |
---|---|
[JQUERY] jQuery를 click```bind` (예)와 live```delegate```on` trigger` 및 기능 차이? (0) | 2020.10.22 |
[JQUERY] 자바 스크립트를 추가 한 후 불을하지 않습니다 [중복] (0) | 2020.10.22 |
[JQUERY] JQuery와 모바일 스크립트 설정 (0) | 2020.10.22 |
[JQUERY] GET을 사용하여 새 페이지에있는 jqGrid의 열 값에서 연결 (0) | 2020.10.22 |