1

저는 한동안 SPA (Single Page Web App) 작업을 해왔습니다. 프론트 엔드는 BackboneJS/Marionette를, 백엔드는 자바 스프링 :(을 사용합니다. 하지만 내가 느리게 느낄 수있는 것은 애플리케이션 시작에 있으며, 애플리케이션의 다양한 부분에 대한 데이터를 채우기 위해 다양한 API 엔드 포인트에 대한 많은 요청이 이루어집니다. 나는 이것이 느린 것 같니? 그것들은 AJAX 요청이며 따라서 비동기 적으로 완료 되었습니까? 가장 좋은 방법은 무엇입니까? 처음에 나는 어떻게 든 1 개의 거대한 요청으로 모든 것을 결합한다고 생각했지만 그게 좋은 생각인지 확실하지 않았습니다. 또한 코드 예제도 좋습니다.단일 페이지 웹 앱. 응용 프로그램 시작시 많은 요청이 OK입니까?

+1

응용 프로그램에 따라 localstorage에서 캐싱을 사용하고 백그라운드에서 시작 및 새로 고침 정보에 대한 캐시 된 정보를 표시 할 수 있습니다. 최신 데이터를 빠르게로드하지는 않지만 일부 데이터를 빠르게로드합니다. – HoLyVieR

답변

1

페이지로드시 무엇이 있어야하는지 알았으므로이 모든 데이터는 기본 html과 함께 제공되어야하며 개체는 함께 초기화되어야합니다.

require([ 'MyModel', 'load'], function(MyModel, load) { 
    var myModel = new MyModel(load.mymodel); 
    ... 
}) 
+0

whats''? 일부 서버 측 템플릿 태그? 그럼 여러 파일이'load' 파일을 필요로한다면, 일단 내가 믿으면 그것을 다운로드 할 것인가? –

+0

@JiewMeng 예 서버 쪽 템플릿. 중요한 점은 ** 전송 된 HTML에 이미 ** 모든 정보가 포함되어 있어야하므로 초기로드시 콜백이 필요하지 않습니다. 나중에 데이터를 업데이트해야한다면'myModel.fetch()'를 호출하고 AJAX를 정상적으로 사용할 수 있습니다. 로드는 파일이 아니며 페이지로드시 정의 된 모듈입니다. 하지만 원하는대로 보낼 수는 있습니다. 한 가지 방법을 보여 줬습니다. – Andrew

0

하나의 거대한 요청이 나쁜 생각이 아니다 : 나는, AMD는 그래서 그것을 좋아 할 것

<script data-main="app" src="/lib/require.js"></script> 
<script> 
define('load', function(){return { 
    mymodel : <c:out value="${mymodel}" default="{}" />, 
     ... 
};}); 
</script> 

app.js를 사용합니다. 동기화를 위해이 기능을 원할 수도 있습니다.

동적 콘텐츠를 HTML에 넣으면 프런트 엔드 코드를 캐싱 할 수 없습니다. 예를 들어 모바일 앱에 프런트 엔드를 정적으로 패키지 할 수 없습니다. 또한 초기 렌더링 시간이 느려질 수 있습니다. 단, 앱이 하나가 아닌 두 번의 요청을 요구하기 때문에 전체적으로로드하는 데 다소 시간이 걸립니다.

관련 문제