2016-08-06 10 views
1

저는 NodeJS를 처음 접했고 조언이 필요합니다. 나는 사용자리스트를 보여주는 페이지를 가지고 있는데, 나는 몽구스를 사용하여 콜렉션에서이리스트를 검색한다. 다음보기로 결과를 보내백엔드 또는 프론트 엔드에 컬렉션을 나열하십시오.

1) 페이지가로드되기 전에 백엔드에서 쿼리를 확인하십시오 :

// app.js 
var users = Users.find({}, function(err, results){ 
    res.render('list', { users: results}); 
}); 

2) 후 프론트 엔드에서 쿼리를 확인 나는이 목록을 표시하기위한 두 가지 방법을 알고 페이지가 비동기식으로로드되었습니다. 예, 각도

// users.js 
var User = $resource('/getUsers'); 
User.query(function (results){ 
    $scope.users = results; 
}); 

// users.html 
<ul> 
    <li ng-repeat="user in users"{{ user.name }}></li> 
</ul> 

// app.js 
app.get('getUsers', function(req, res){ 
    Users.find({}, function(req, results){ 
     res.json(results); 
    }) 
}); 

나는 모든 것이 분명 해지기를 바랍니다. 모범 사례 및/또는 성과 측면에서 할 수있는 최선의 방법은 무엇입니까?

감사

사용자 경험의 관점에서
+0

때로는 실제로 서버와 클라이언트에서 모두 렌더링됩니다. 그것은 정말로 달려 있습니다. – elclanrs

+0

참.목록을 정기적으로 새로 고쳐야하고 첫 번째 방법을 계속 수행해야한다면 뷰에 정적 내용을 보내고 클라이언트가 목록을 새로 고쳐야하는 경우 json을 보내는 두 가지 출력 방법이 필요하다는 것을 의미합니다. – Tinostarn

답변

1

, 그것은 컨텐츠 업데이트는 업데이트 된 HTML에 대한 서버를 쿼리, 실제로 클라이언트에 렌더링 (또는 경우에만 먼저 서버에서 렌더링하기 위해 거의 항상 더 나은이며, 콘텐츠 - 클라이언트에서 렌더링하는 것보다 종종 우수함). 전체 클라이언트 측 렌더링은 일반적으로로드 시간이 더 길고 클라이언트에서 특히 모바일에서 중요한 CPU 리소스를 사용하고 페이지에서 비동기 요청 및 많은 부분 업데이트로 인해 약간의 깜박임이 발생하는 결과를 가져옵니다.

그렇다면 클라이언트 측 렌더링이 의미가있는 상황이 있습니다. 일부 콘텐츠가 너무 길어서 한 번에로드 할 수 없으며 페이지와 진행률 표시기를 표시하는 것이 좋습니다. "우리는 귀하의 데이터를로드 중입니다 ...". 그럼에도 불구하고 대부분의 콘텐츠 지향 웹 사이트와 포털에서 거의 완벽한 서버 측 렌더링이 더 좋은 방법입니다.

+0

나를 위해 분명히 보입니다. 가능한 한 많이 "올드 스쿨"스타일을 유지할 것입니다. 필자는 두 번째 방법 인 MEAN 스택 자습서를 많이보고 비동기 적으로 표시 할 모든 데이터를로드하므로이 질문을합니다. 음, 표시 할 데이터의 양에 달려 있다고 말할 수 있습니다. – Tinostarn

+0

Andrew에게 +1 할 것입니다. 당신은 나보다 더 간결하게 많은 좋은 점들을 가져옵니다. :) –

1

플레이 악마 옹호자를 여기에 나열하려면 @Andrew Skylyarevsky와 의견을 달리해야합니다.

콘텐츠 중심 사이트가 평균적으로 서버 측 앱보다 더 많은 프론트 엔드 무거운 앱으로 간주됩니다. 사용자가 자신의 필요에 맞게 많이 맞춤화 된 콘텐츠를 제공하고 실적이 목표 인 경우 페이지를로드하고 상호 작용하는 데 필요한 최소의 콘텐츠 만 고객에게 제공하는 최상의 사용자 환경을 경험할 수 있습니다. 모든 추가 데이터는 프런트 엔드 무거운 응용 프로그램에서 볼 수있는 asyc 호출을 통해 반환되어야합니다. 서버 측에서 많은 양의 응용 프로그램을 렌더링 한 경우 사용자는 서버 측 페이지를 다시로드하기 위해 콘텐츠에 대한 후속 요청을 기대할 수 있습니다.

프론트 엔드 접근법의 단점 중 하나는 사용자가 데이터가 돌아와 렌더링 될 때까지 기다려야하는 초기로드 시간입니다. 그러나 이것은 다양한 기술을 통해 완화 될 수 있고 완화되어야합니다. 서버 vs 프론트 엔드 구현은 개발자와 같은 정도로 많은 노력과 복잡성을 필요로합니다. 그러나 사용자 (공연자)에게 거의 겉으로 드러나지 않는 경험을 찾고 있다면 프런트 엔드 무거운 응용 프로그램을 통해 잘 구현되고 생각되어야합니다. 백 엔드에서 수행해야하는 작업이 있지만 대부분의 기술은 전면에서 수행됩니다. 사용자를 백그라운드에서 실행하고 후속 요청을 실행하는 데 필요한만큼의 서비스를 제공하는 것이 이러한 방법 중 하나입니다. 이 경험을 조정하는 것은 쉽지 않습니다.

브라우저의 프런트 엔드에있는 여러 엔터프라이즈 수준 응용 프로그램에서 작업 한 경험이 있음을 알아 두어야합니다. 또한 많은 서버 측 응용 프로그램을 프런트 엔드 응용 프로그램으로 마이그레이션하여 성능과 사용자 경험 측면에서 이점을 확인했습니다. 그래서 나는 편향되어있다. 생각을위한 음식.

+0

+1 @ Patrick Motard. 이것은 StackOverflow를 매우 훌륭하게 만듭니다. 나는 너에게 전적으로 동의한다. 결국 결국 균형 잡힌 행동에 관한 것이다. 또한 클라이언트 측에 서버 측 응용 프로그램을 마이그레이션하여 특정 시나리오에서 성능이 크게 향상되는 것을 확인했습니다. 그러나, 나는 또한 반대의 작업을 수행했다. 클라이언트 쪽 물건을 서버 쪽으로 옮겼다. 클라이언트 측의 문제는 일부 프로젝트는 거대한 프레임 워크 관련 (jQuery, GWT, Angular, KnockoutJS 등) 코드 기반으로 시작하여 텍스트 기사를 렌더링하기 만하면 좋은 의도로 시작한다는 것입니다. 이는 UX에 엄청난 피해를 입히고 어떤 것도 무효로 만듭니다. 서버 측에서 이득을 얻습니다. –

+0

확실히 동의합니다. 해결할 쉬운 해결책이 아닙니다! 어느 누구도 크기에 맞지 않습니다. –

+0

클라이언트 쪽에서 고려해야 할 다른 문제는 물론 JavaScript 코드베이스의 크기입니다. 1 Mb 자바 스크립트는 요즘 놀랍지 만 모바일에서는 3G를 통해로드하는 데 수 분이 걸리기 때문에 일부 사용자에게는 자바 스크립트가 전혀 열리지 않을 수도 있습니다. 나는 현재 모바일 웹을 위해 주로 개발하고 있는데, 그 이유는 서버 측 렌더링에 크게 편향되어 있기 때문이다. –

관련 문제