1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 前端性能优化之资源传输优化 渲染优化 Web 加载和渲染原理

前端性能优化之资源传输优化 渲染优化 Web 加载和渲染原理

时间:2020-11-03 21:48:17

相关推荐

前端性能优化之资源传输优化 渲染优化 Web 加载和渲染原理

一、资源传输优化

使用压缩Gzip,如下所示: 对传输资源进行体积压缩,可高达 90%配置Nginx启用Gzip启用Keep Alive,如下所示: 一个持久的TCP连接,节省了连接创建时间Nginx默认开启Keep AliveHTTP资源缓存,HTTP缓存是client、cache、server之间,提高重复访问时资源加载的速度。HTTP缓存,如下所示:Cache-Control/ExpriesLast-Modified + If-Modified-SineEtag + If-None-MatchService Workers,如下所示: 加速重复访问离线支持延长了首屏时间,但是页面总加载时间减少兼容性只能在localhosthttps下使用HTTP/2的优势,如下所示: 二进制传输请求响应多路复用Server push搭建HTTP/2服务,如下所示:HTTPS适合较高的请求量 服务端渲染SSR的好处,如下所示: 加速首屏加载更好的SEO对于React SSR,可以使基于Next.js实现SSR。对于是否使用SSR,-如下所示: 架构大型、动态页面、面向公众用户搜索引擎排名很重要

二、渲染优化

PNGIconFont,如下所示: 多个图标到一套字体,减少获取时的请求数量和体积矢量图形,可伸缩直接通过CSS修改样式,颜色、大小等 从IconFontSVG,如下所示: 保持了图片能力,支持多色彩独立的矢量图形XML语法,搜索引擎SEO和无障碍读屏软件读取Flexbox的优势,如下所示: 更高性能的实现方案容器有能力决定子元素的大小、顺序、对齐、间隔等双向布局Flexbox的使用,如下所示:Flex container容器Flex items元素 优化资源加载的顺序,资源优先级,如下所示: 浏览器默认安排资源加载的优先级使用preload、prefetch调整优先级preloadprefetch适用场景,如下所示:preload,提前加载较晚出现,但对当前页面非常重要的资源prefetch,提前加载后继路由需要的资源,优先级低 预渲染页面,预渲染的作用,如下所示: 大型单页应用的性能瓶颈,JS下载+解析+执行SSR的主要问题,牺牲TTFB来补救First Paint,实现复杂Pre-rendering打包时提前渲染页面,没有服务端参与 使用React-Snap,如下所示: 配置postbuild使用ReactDOM.hydrate()内联样式,避免明显的FOUC样式闪动Windowing窗口化提高列表性能,windowing的作用,如下所示: 加载大列表、大表单的每一行严重影响性能Lazy loading仍然会让DOM变得过大windowing只渲染可见的行,渲染和滚动的性能都会提升 对于使用react-window,如下所示: 配置一个一维列表List配置一个二维列表Grid配置滚动到指定元素 使用骨架组件减少布局移动,Skeleton/Placeholder的作用,如下所示: 占位提升用户感知性能 使用react-placeholder,如下所示: 预置的placeholders自定义的placehlder

三、Web 加载和渲染原理

对于从输入URL到页面加载显示完成都发生了什么,如下所示:UI thread:搜索or URL-> 搜索引擎or请求的站点Network threadDNS查找IP,建立TLS连接,如果收到 301 再来,然后设置UA等信息,发送GET请求,Web server上的应用处理请求,读取Response,分析数据类型,安全检查,通知UI数据准备就绪Render process:由UI threadNetwork thread,再到Main threadMain thread:解析文本构建DOM,边解析DOM边加载子资源,JS阻塞解析async/defer。然后解析CSS,计算computed styles,构造布局树位置和大小Raster Thread、Compositor Thread:创建绘制记录,确定绘制的顺序,将页面拆分图层,构建图层树,复合线程象素化图层,创建一个复合帧 首屏加载及优化,如下所示:Web增量加载的特点决定了首屏性能不会完美过长的白屏影响用户体验和留存首屏,相当于初次印象首屏,用户加载体验的3个关键时刻,测量指标,First Contentful Paint(FCP)、Largest Contentful Paint(LCP)、Time to Interactive(TTI)若资源体积太大,可以使用资源压缩、传输压缩、代码拆分、Tree shaking、HTTP/2、缓存等若首页内容太多,可以使用路由/组件/内容lazy-loading、预渲染/SSRInline CSS等若加载顺序不合适,可以使用prefetch、preloadJavascript内存管理,JS是怎样管理内存的,内存泄露会严重影响性能,什么情况下会造成内存泄露,如下所示: 变量创建时自动分配内存,不使用时自动释放内存,GC内存释放的主要问题是如何确定不再需要使用的内存所有的GC都是近似实现,只能通过判断变量是否还能在局部变量,函数执行完,没有闭包引用,就会被标记回收全局变量,直至浏览器卸载页面时释放引用计数,无法解决循环引用的问题标记清除,MARKSWEEP避免意外的全局变量产生避免反复运行引发大量闭包避免脱离的DOM元素

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。