服务端在返回 html 以前,在特定的区域,符号里用数据填充,再给客户端,客户端只负责解析 HTML 。css
html 仅仅做为静态文件,客户端端在请求时,服务端不作任何处理,直接以原文件的形式返回给客户端客户端,而后根据 html 上的 JavaScript,生成 DOM 插入 html。html
客户端渲染和服务器端渲染的最重要的区别就是到底是谁来完成html文件的完整拼接,若是是在服务器端完成的,而后返回给客户端,就是服务器端渲染,而若是是前端作了更多的工做完成了html的拼接,则就是客户端渲染。前端
2.拼接字符串必然引发性能的消耗。node
3.服务端渲染性能消耗在服务端,当用户量比较多时,缓存部分数据以免过多数据重复渲染。web
4.客户端渲染,如当下火热的 spa 框架,Angular、React、Vue,在首次渲染时,大可能是将原 html 中的数据标记(如 {{ text }} )替换。客户端渲染较难的一点是数据更新之后,页面响应式更新时如何节省资源,直接 DOM 的读写,是很消耗性能的。 Vue 2.0 + 有 Vnode,进行 diff 后,渲染到页面上。数据库
缺点:后端
盲目选择使用何种渲染方式都是耍流氓。如企业级网站,主要功能是展现没有复杂的交互,而且须要良好的SEO,则这时咱们就须要使用服务器端渲染;而相似后台管理页面,交互性比较强,不须要seo的考虑,那么就可使用客户端渲染。api
另外,具体使用何种渲染方法并非绝对的,好比如今一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其余的页面采用客户端渲染,这样就完成了先后端分离。浏览器
1.加速或减小HTTP请求损耗:使用CDN加载公用库,使用强缓存和协商缓存,使用域名收敛,小图片使用Base64代替,使用Get请求代替Post请求,设置 Access-Control-Max-Age 减小预检请求,页面内跳转其余域名或请求其余域名的资源时使用浏览器prefetch预解析等;缓存
2.延迟加载:非重要的库、非首屏图片延迟加载,SPA的组件懒加载等;
3.减小请求内容的体积:开启服务器Gzip压缩,JS、CSS文件压缩合并,减小cookies大小,SSR直接输出渲染后的HTML等;
4.浏览器渲染原理:优化关键渲染路径,尽量减小阻塞渲染的JS、CSS;
5.优化用户等待体验:白屏使用加载进度条、loading图、骨架屏代替等;
1.强缓存和协商缓存强缓存是利用http头中的Expires和Cache-Control两个字段来控制的,用来表示资源的缓存时间
2.协商缓存:浏览器第一次请求一个资源的时候,服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间;当浏览器再次请求该资源时,request的请求头中会包含If-Modify-Since,该值为缓存以前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源的最后修改时间判断是否命中缓存;其中Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的惟一标识
3.Access-Control-Max-Age:缓存能够被缓存的时间
4.DNS 预解析:浏览器会在加载网页时对网页中的域名进行解析缓存,这样在你单击当前网页中的链接时就无需进行DNS的解析,减小用户等待时间,提升用户体验。
5.<link rel="dns-prefetch" href="www.ytuwlg.iteye.com" />
6.Gzip页面压缩,像服务器发送压缩文件,同时服务器须要设置解析