前端性能优化

前端系列-性能优化方面 前端性能方面 阅读详情

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

事件委托

事件委托(也叫事件代理)利用了事件冒泡,把监听函数绑定在父容器上。在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。

使用事件委托的优点:

a.减少DOM操作,使事件处理时间减少。
b.减少内存空间的使用,提升性能。

简单例子:

let myUl = document. getElementByld("my-ul"); 
myUl.addEventListener('click',function(e){ 
	if(e.target.tagName == "LI"){
		//如果点击的目标的标签名为LI
		alert(e.target.innerText)
	}
})

函数防抖与节流

可见文章:https://blog.youkuaiyun.com/qq_32442973/article/details/118739927

webp

WebP是Google推出的一种同时提供有损压缩与无损压缩的图片文件格式,派生自图像编码格式VP8,支持透明图层和多图片动图。

WebP可对网页图片有效进行压缩而不影响图片清晰度,从而节省带宽,提高图片下载速度。在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%,比PNG文件小26%。

Google提供了 WebP文件解码器(libvpx)和 命令行工具(webpconv),用于JEPG、png等格式图片与WebP格式之间的转换。WebP目前支持Chrome内核、Edgel8+、Safari 14+、Android的WebView等
浏览器,不支持ie。

方法一:前端js判断加载

对浏览器进行判断是否支持WebP,先加载一张base64的WebP格式,根据宽高来判断是否支持。如果支持则加载默认的WebP格式的图片,如果不支持则把img标签里的图片后缀换成常规的jpg或png即可。

function checkWebp(callback) { 
	var img = new Image(); 
	img.onload = function () { 
		var result = (img.width>0) && (img.height>0); 
		callback(result);
	};
	img.onerror = function () { 
		callback(false);
	};
	img.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVIA4IBYPKNKwAQCdASoBAAEADsD+JaQAASFRDFGJ';
}
function showlmage(flag){ 
	var imgs = Array.from(document.querySelectorAll('img')) 
	imgs.forEach(function(i){ 		
		var src = i.attributes['data-src'].value
		if(flag){
			i.src = src
		}else{
			src = src.replace(/\.webp$/,'.jpg')
		}
	})
}
checkWebp(showlmage)

方法二:前端picture标签

如果浏览器支持WebP格式,就会加载 a.webp,否则会加载a.jpg。

<picture class="pic">
	<source type="image/webp" srcset="a.webp"> 
	<img class="img" src="a.jpg">
picture>

方法三:服务端响应不同格式

支持webp图片的浏览器在向服务器发送请求时,会在请求头Accept中带上image/webp,然后服务器根据是否含有这个头信息来决定返回webp或其它格式图片。很多云服务器和CDN带有这种WebP自适应功能。

seo优化

seo(Search Engine Optimization)即搜索引擎优化,就是通过总结搜索引擎的运作规则,对网站进行合理的优化以提高网站在搜索引擎的排名。 搜索引擎通过爬虫(蜘蛛)程序按一定规则抓取收录你的网页,分析处理后按关键字建立索引,以便为用户提供快速检索网页的服务。seo就是通过挖掘用户搜索习惯,设 定用户所搜索的关键词,优化网站定位和布局,填充优质网站内容,使网页符合爬虫胃口,获得搜索引擎信任,在不损害用户体验的情况下使网站排名靠在搜索引擎前列,从而提高网站访问量。

做法:

  1. 提高页面加载速度。使用CSS图标,背景图片压缩,使用雪碧图,减少HTTP请求数等。
  2. 结构、表现和行为的分离。尽量不要把CSS和js放在同一个页面,采用外链的方式。
  3. 优化网站分级结构,调整页面布局。在每个内页加面包屑导航,页面内容尽量不要做成flash、视频。
  4. 集中网站杈重,可以使用"rel=nofollown"属性,告诉爬虫无需抓取此页,从而将权重分绐其他的链接。
  5. strong、em标签强调关键字。strong标签在搜索引擎中能够得到高度的重视。
  6. 利用a标签的title属性。在不影响页面功能的情况下,尽量绐a标签加上title属性,更有利于爬虫抓取信息。
  7. img应使用"alt"属性加以说明,这个属性可以在图片加载不出来的时候显示在页面上相关的文字信息。
  8. H标签的使用,自带权重,放在该最重要的标题上面。
  9. 精心设置meta标签,如title, keywords,description等,反映网站的定位。内容与关键字要对应,增加关键字的密度。
  10. 增加网站的404页面,利于提高用户体验,主要防止爬虫丟失。
  11. 重要内容不要用JS输出,爬虫不识别JS代码里的程序内容。
  12. 尽量少使用iframe框架,爬虫一般不会读取其中的内容。
  13. 添加外链。选择与网站相关性比较高,整体质量比较好的网站交换友链,巩固稳定关键词排名。
  14. 填充优质的原创内容。

base64编码

Base64是一种编码算法,使用64个可打印字符(“A-Z,a-z,0-9, +,/”,'='号就是65个)来对任意数据进行编码。

通常用于将二进制数据(如图片)转化为可打印字符,方便存储和http传输。

Base64不是真正的加密算法,可以被任何人编码解码。可以使用base64在线编码解码工具。

前端应用:

1.html直接嵌入Base64编码图片,避免不必要的外部资源请求。

<img alt="logo" src="data:image/png;base64,iVBORwOKGgoAAAANSUhEUgAAADIA..." />

.bg{
	background:url(data:image/png;base64,iVBORwOKGgoAAAANSUhEUgAAADIA...)
}

(不适用色彩丰富的大图片,其编码后字符串较大,增加html/css体积,影响页面加载速度)

2.canvas的toDataURL

将canvas画布内容转为base64编码格式后传递到后端,后端base64解码保存。

3.FileReader的readAsDataURL

将上传的文件转为base64格式提交到服务器,如用户头像。

字体图标

字体图标( iconfont) 将svg矢量图标作成字体,采用字体格式来显示网页中的的纯色图标。同字体使用一样,在css中通过@font-face定义,通过color, font-size等改变图标的颜色,大小等样式。

uni-app种使用字体图标

先
https://blog.youkuaiyun.com/qq_45018844/article/details/120757230
再
https://blog.youkuaiyun.com/qq_45018844/article/details/120827906

普通项目使用字体图标

https://blog.youkuaiyun.com/qq_48386796/article/details/119061059

lazy-load

lazy-load(懒加载)就是按需加载图片,等图片出现在浏览器当前视窗内再去加载,这样不用一次性加载全部内容,减少首屏时请求数,缓解浏览器和服务器压力,节省流量。

实现原理:
若在src中填入图片地址,浏览器就可以发起请求,加载一张图片。要实现懒加载,可以定义一个虚拟src属性即data-src存放原图地址,而属性src填写
一张低质量的空白占位图。当页面滚动时,遍历图片判断是否在可视区域内,如果在则将data-src中真实地址放到src中,实现按需加载。另外页面滚动是一个触发频繁的事件,可以利用防抖或节流函数优化一下。

gzip压缩

gzip是一种数据压缩格式,是HTTP协议上的GZIP编码。

一般用于服务器将静态文件压缩后传输到客户端,可压缩到原大小的4 0% ,大大节
省网络带宽,提高访问速度。

启 用g z i p需 要 客 户 端 和 服 务 端 的 共 同 支持,现在主流浏览器和常见服务器都是支持gzip的。

gzip工作原理

  1. 浏览器若支持g zip ,请求头中会设置属ttaccept-encoding: gzip来标识浏览器支
    持gzip压缩。
  2. 服务端配置启用gzip压缩,收到请求后解析请求头,判断浏览器是否支持gzip ,
    若支持,响应时对请求的资源进行压缩并返回gzip文件给客户端。并在http响应头
    中设置content-encoding:gzip,表可甘萃端使用了 gzip的压缩方式。
  3. 浏 览 器 接 收 响 应 后 判 断 内 容 是 否 被 压缩,如是则解压缩,然后显示页面内容。

cdn

CDN ( Content Delivery Network,内容分发网络),是一组分布在多个不同地理
位置的WEB服务器(缓存服务器),用于有效的向用户分发内容。

主要原理

就是将源站的静态资源(图片视频、html/css/jss安装包apk等)缓存到位于不同区域的CDN节点服务器上,通常是终端网络提供商的机房,当用户访问网站时,会去离用户距离最近的CDN服务器上获取,从而避免了网络拥塞,提高了访问速度,缓解了源站压力。

具体流程

  1. 用 户 输 入 要 访 问 的u r l ,浏 览 器 通 过 域名解析(本地DNS系统和CDN专用DNS服务器)得到CDN负载均衡设备的IP地址。
  2. 浏览器向CDN负载均衡发出访问醺黑CDN负载均衡根据用户IP地址及URL,判断距离、有无内容、负载情况后返回用户所属区域的最佳cdn缓存服务器IP。
  3. 用户向cdn缓存服务器发起请求,服务器响应用户请求。
  4. 如果这台缓存服务器上没有用户想要的内容,再由缓存服务器向源服务器请求。
  5. 缓存服务器从源服务器得到内容后,一方面在本地进行缓存,另一方面将获取的数据返回给客户端。

light-hourse

Lighthouse是Google开源的一个自动化的网站性能测评工具。主要功能是检测网站的性能,分析网络应用和网页,收集现代性能指标并给出最佳实践的建议。

使用

  1. Lighthouse已集成到chrome浏览器开发者工具中,位于’Audits’面板下,高版本
    chrome 直接显示 lighthouse 项。点击’Generate report’后生成并展示测评结果,结果包含了性能(Performance),访问无障碍(Accessibility),最佳实践(Best Practice),搜索引擎优化(SEO),PWA(Progressive Web App)五个部分。
  2. 或在项目中安装全局包lighthouse,需要Node 8及以上版本。执行
    lighthouse http://www.test.com 默认会在当前目录下生成一个HTM L格测评报告。

Tree Shaking

TreeShaking即掩树优化意思是从包中删除所有引入但没有被实际用到的代码 ( 也
称为死代码Dead Code ) 来缩减打包后的体积。形象比喻为将‘废树叶’摇下来,是DCE( dead code elimination) 代码清除技术的一种。

Tree Shaking由来:

当javascript应用体积越来越大时,一个有利 于 减 少 体 积 的 办 法 是 拆 分 为 不 同 的 可 重用模块,如CommonJs、AMD、CMD模块化方案。
随着模块化的发展 ,开发人员还想进一步的移除多余的代码 , ES6模块的出现使 其成为可 能 , 打包工具Rollup团队率先提出并实现了Tree Shaking, Webpack 2.0版开始接入 , 至今不少打包工具都支持TreeShaking。

Tree Shaking 原理:

ES6模块静态化和静态分析是Tree shaking的基础。
静态分析就是不执行代码,在编译时从字面量上对代码进行分析从而正确判断到底加载了哪些模块 。 再分析程序流 , 判断哪些变量未被使用引用,进而删除对应代码。

早先CommonJS是动态require一个模块 , 可以嵌套在函数和if语句中 ,只有代码执行后才知道是否需要该模块 ,很难在译阶段通过静态分析去做优化。

ES6模块使用静态导入语法import , 且只能作为模块顶层的语句出现,这种静态化
在编译阶段就可以高度确定模块间的依赖关系 , 不依赖代码的运行结果 , 所以可以进行可靠的静态分析。

在webpa ck中由webpa ck通过静态分析标记出模块导出值中哪些没有被用过 , 然 后利用插件uglify(代码压缩优化工具)进行清除,删掉这些没被用到的方法。

在Webpack中使用Tree Shaking:

  1. 使用ES6模块语法,Tree Shaking只支持import,不支持require。
  2. 新 的webpack 4正式版 , 通过指定package.json 中的 si de Effects 属性,向compiler提供提示 , 表明项目中的哪些文件 是“ pure(纯的ES6模块 ) , 没有副 作用的 ” , 由此可以安全地删除文件中未使用的部分。
  3. 生产模式配置选项。配置optimization.used Exports 为 true ,启动标记功能(默认有)。

预加载

预加载就是将所有所需的资源提前请求加载到本地,这样后面在需要用到时就直接
从缓存取资源。

如果请求的内容过于庞大,没有使用预加载的页面就会长时间的展现为一片空白,使用预加载则可以减少等待的时间,拥有更好的体验。

前端容灾

指因为各种原因后端接口无法提供数据(如接口出错,依赖库出现问题,流量高峰挂了,断电断网等),前端依然能保证页面信息的正常展示。

主要方式是提前将数据存储在可靠的地方,在需要时能够高效便捷地获取到数据展示。通常有:

Localstorage

将数据存到Localstorage,通常接口路径作为key,返回数据作为value。若请求接口失败, 就读取L o c a l st orage ,将之前的数据取出来展示,并提示错误信息,以缓冲时间。

CDN容灾

除了 Localstorage同时也备份一份静态数据到CDN,在接口请求和Localstorage都没 有数据的情况下,从CDN获取备份数据。

Service Worker

可以利用Service Worker离线存储保个html页面。

webpconv:一个nodejs模块,可将webp图像转换为其他格式,反之亦然 webpconv 一个模块,可将webp图像转换为其他格式,反之亦然。 安装 $ npm install webpconv -save 如何使用 //require the module var webpconv = require ( 'webpconv' ) ; //input webp and output other format webpconv . dwebp ( "input.webp" , "output.jpg" , function ( err , resp ) { if ( err ) { throw ( err ) ; } else { console . log ( JSON . stringify ( resp ) ) ; } } ) ; //input o 立即下载

相关推荐

webview 项目服务端gzip实现

NULL 博文链接:https://xiaoa7.iteye.com/blog/908333

WebP 文件及其编码解码工具(WebPconv)

1. webp 文件 与JPEG相同,WebP 是一种有损压缩利用预测编码技术。 WebP 是 Google 新推出的影像技术,它可让网页图档有效进行压缩,同时在质量相同的情况下,WebP 格式图像的体积要比 JPEG 格式图像小 40%(WebPconv | WebP File Converter | Romeolight),进而让整体网页下载速度加...

weixin_30364147的博客 1010

xnconvert绿色版(webp转jpg) 万能图片转换工具

xnconvert绿色版(webp转jpg) 万能图片转换工具,是一款简单易用的批量图像格式转换软件。你可以轻松的实现图像格式的转换、缩放图像比例、添加滤镜特效、水印等等。 尤其适合将网页下载的webp格式图片,转化为jpg格式

推荐使用:WebP Convert - 图像转换利器!

**WebP Convert** 是一个强大的PHP库,用于将JPEG和PNG图像智能地转化为高效的WebP格式,帮助您充分利用WebP的性能优势。这个库支持多种转换方法,并能在您的系统中选择最适合的一种。 ## 项目简介 WebP Convert 提供了一种灵活且高效的方式,通过简单的接口就能实现图像向WebP格式的转化。它不仅提供了多个转换引擎,如`cwebp`、`vips`、`imagic

gitblog_00057的博客 507

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8883

WebpCvt(webp转换工具) 一款监视目录webp转换为 jpeg的小工具

WebPConvert是一款解决webp格式兼容问题的实用工具。它能自动监控指定目录,将新增的webp文件高效转换为jpeg或png格式,在保持质量的同时节省存储空间。软件兼容主流编辑器与浏览器,操作简单,特别适合传统软件不支持webp或存储空间紧张的使用场景,可有效提升图像处理的工作效率。

owmei的博客 366

CREO5.0二次开发+VS2019配置详解

CREO5.0+VS2019配置更新 一、CREO5.0 配置 二、Visual Studio 2019配置 新建MFC DLL项目 文件>新建>项目,选择MFC DLL,如下图所示 项目名称CREO1 2、配置设置 打开项目属性: 配置资源管理器设置: 设置包含目录、库目录(根据自己CREO的安装位置来设置): 包含目录: 库目录: 预处理器设置: 把下面文字复...

liuyi2517的博客 1万+

uniAdmin框架H5前端上传图片压缩问题

项目场景: 采用uniapp后台框架uniAdimin开发运营管理系统,需要同时支持上传图片和视频,前端实现图片上传前压缩以及大小限制提示。 解决方案一: 采用helang-compress 组件压缩图片,使用方法如下:插件地址及使用方法如下: 图片压缩(自定义 压缩尺寸&压缩质量) - DCloud 插件市场 遇到的问题是:该压缩方式返回的是base64格式的编码,而在使用uniCloud.uploadFile上传图片时并不支持base64格式。 // helang-compres.

专注软件服务 2183

电脑技巧:Hyper-V安装UOS操作系统图文教程

今天给大家分享微软官方Hyper-v虚拟机管理软件安装UOS操作系统图文教程,感兴趣的朋友也可以下载试一试,当然有啥问题也可以互相沟通交流!

IT技术分享社区 4707

EndNote X9 快速上手教程(毕业论文参考文献管理器)

EndNote X9 快速上手教程一、EndNote X9安装1.安装2 安装之后重要步骤二、第一次打开 EndNote三、参考文献引用1. 导入知网文献2. 参考文献引用四、常见问题1. 引用文献中出现%J的问题2 参考文献中出现et.al1 在文章中引用的编号的地方出现2 在参看文献列表里出现 一、EndNote X9安装 1.安装 打开文件夹 安装前,一定要读 #Readme.txt 文件 一定要把License.dat和ENX9Inst.msi放在同一文件夹,安装的时候会自动激活。 我的安装路

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2万+

【面试】【前端】【性能优化】前端性能优化总结

前端性能优化是提升用户体验的重要手段,面试中涉及的问题往往从理论到实践全面考察候选人对优化的理解。以下从性能优化的原则、方法、工具和常见问题解答入手,提供全面的总结。前端性能优化的核心是提升页面加载速度和响应效率,同时改善用户体验。通过合理的策略(如缓存、懒加载、压缩资源等)和工具(如 Lighthouse、Webpack),可以构建出高性能的前端应用。

qq_59344127的博客 1727

【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】

因为没有用到纹理,但介于是UI层,没有MainTeX的时候,会提示报错,所以这里加上了MainTex,最后不在片段着色渲染出来既可。这样UI层级显示正常了,但旋转后的模糊效果,跟背景拼接不上,有很大的偏移。猜测是屏幕UV采样错误导致,只要找到屏幕UV数值,更正过来就可以了,RenderTexture设置一下Size既可,其他的先不管。没有贴图,用Shader实现外描边流光效果。将主相机拖入Render Camera。新建一个RenderTexture。

暴走约伯的博客 1149

前端性能优化全面指南

前端性能优化是提升用户体验的关键,页面加载速度、响应时间和交互流畅度直接影响用户的留存率和满意度。以下是常用的前端性能优化方法,从网络层、资源加载、JavaScript 执行、渲染性能等方面进行全方位优化。

qq_34820371的博客 1606

PCL:SAC-IA+ICP配准

【代码】SAC-IA+ICP配准。

m0_71596228的博客 1018

小秋SLAM入门实战ubuntu所有文章汇总

ubuntu 终端如何停止快速打印的输出以及恢复命令 ubuntu 终端如何快速打开当前路径下的图形化窗口界面? killall -9用途用法 ps -xu | grep这个命令的用途 linux 下 top命令显示的是内存是堆内存吗? zip分割和合并 关闭除当前 GNOME 终端窗口以外的所有其他 GNOME 终端窗口 如何在安装系统后设置短密码 【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】 【webots安装使用教程】 Linux系统下查看当前运行的进程和线程的几种方法

小秋 AI SLAM 入门实战教程 1406

前端面试前端性能优化篇

不论是什么样的前端面试,总会问到的一个问题:前端性能优化。相信如果这个问题没有答好,在面试中会很被动。于是,趁着这个天天宅的时期,好好的整理了一番。Start~1、核心资源预加载2、大体积资源按需加载(Webpack拆包)1、优化react事件,避免使用闭包函数2、使用持续化数据结构Immutable对redux进行管理3、优化生命周期定义基础组件BaseComponent取代React.Component4、使用纯组件PureComponent5、添加Key值注:以上总结的可能不完整,可以在评论区补充,我

loveX001的博客 485

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

前端项目性能优化

前端项目性能优化 一、前端项目架构优化 1、加载性能 1、资源内容使用CDN加载,请求开启Gzip压缩 利用CDN加载资源内容 cdn全称content delivery network。它是依靠部署在各地区的边缘服务器,达到用户就近获取内容,降低网络拥塞,提高用户访问速度和命中率的目的。它主要的关键技术是内容存储和分发技术。 浏览器提前解析DNS <link ref="dns-prefetch" href=""> 只有部分浏览器支持 http请求次数 .

donyFeng6的博客 1809

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

图解前端性能优化

花了一段时间,以思维导图的形式整理了一下前端性能优化的一些知识点,包括前端性能监控、2019年前端性能优化清单以及前端性能优化策略的选择,再附上一些参考链接,希望对大家有帮助! 1、window.performance 是干啥的? window.performance 是用来测量网页和 web 应用程序的性能,他提供一组精确的数据,通过一些简单的计算,就可以得出一些有关网页的性能数据。 perfo...

weixin_34292924的博客 206

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: k8s入门之Ingress(七)
下一篇: 如何向开源项目(Apache-InLong)提交代码
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值