前端- 关于SPA

前端- 关于SPA

三类

  • static page
  • dynamic pages
  • Single Page Application

https://academind.com/learn/web-dev/dynamic-vs-static-vs-spa/

1.静态页面 :html + css

2.动态页面 : framework 动态生成, eg JSP

3.SPA

angular(js), vue, react etc...

server 端 只返回一个html, js 操作dom + fetch data

Issue: SEO - 搜索引擎优化 (SSR: 搜索引擎带流量的,必须由服务器端渲染。)


前端开发:

Old Way

JSP 套模板,前后端耦合 , 设计+前段html -》 java工程师装换html 到jsp , 效率低下,容易出错。JSP 只能部署在servlet容器(如tomact ),无法使用nginx (nginx 高并发能力),因此性能较差。第一次请求JSP,需要编译成servet, 每次请求都是servlet通过输出流输出html页面。

流程: 客户端请求,服务端servlet(controller) - 后端控制路由和渲染, 然后分层 service 层 -> dao层, JSP

servlet VS JSP: https://www.zhihu.com/question/37962386/answer/87758781

related: jquery

功能:

  • 选择网页元素 + 过滤器
  • 操作元素 : eg $('h1').html('Hello');
  • 增加删除dom 元素
  • 事件 eg $(button).on('click', fn)
  • 浏览器兼容性(现在babel + polyfill)

New Way

前后端分离 - nginx serve html+static assets, proxy pass to appliaction server (eg tomcat)

主要通过ajax 调用后端接口 , 解耦,减少依赖(mocking),前后端可以单独部署 (以前的方式war包)。减少应用服务器压力,因为静态资源不会走应用服务器。

流程: load html + ajax, js dom

https://www.zhihu.com/question/267014376/answer/444793972 https://www.zhihu.com/question/28207685/answer/575863155 https://zhuanlan.zhihu.com/p/71937497 https://www.zhihu.com/question/328020258/answer/712683292 https://zhuanlan.zhihu.com/p/83505426 https://www.zhihu.com/question/375185573/answer/1103410656

SSR (server side rendering)

首屏渲染

browser 需要解析static asset + JavaScript interpret , SSR 思想是server 端直接把最终的html 这个发回来。

Server-side rendering (SSR), is the ability of an application to contribute by displaying the web-page on the server instead of rendering it in the browser.

优点: SAP的SEO问题, faster loading

缺点: complexity, 大的应用server端渲染take time

解决方案: SPA 框架有各自的解决方案, 或者puppeteer + headless chrome

https://www.educative.io/edpresso/what-is-server-side-rendering


SPA

The server returns one single, pre-generated HTML page which in turn contains JavaScript code that changes the page dynamically in the browser (this approach is known as a “Single Page Application” or “SPA”)

Screen Shot 2020-11-10 at 3.33.24 PM

页面不需要到server到重新获取,渲染主要依靠client side js + 调用server端api 获取数据, 前段路由

Why?

  • fast, 应为不需要update 整个page ,只有第一次会load html/ccss/img/scripts, 后续都是ajax 获取数据动态更新页面
  • cachinfg, 可以使用browser的cache
  • user experience
  • 框架支持

eg: gmail, github