当前位置: 首页 > news >正文

前端性能优化——javascript

优化处理:

讲javascript脚本文件放到body标记的后面

减少页面当中所包含的script标记的数量

课堂练习:

脚本优化处理

使用原生JavaScript完成操作过程。

document.querySelector     document.querySelectorAll

classList以及类的操作API

Element.classList - Web API 接口参考 | MDN

高性能的网络请求

Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。fetch api是基于promise的设计,它是为了取代传统xhr的不合理的写法而生的。

传统网络请求:

fetch网络请求:

fetch() - Web API 接口参考 | MDN

formidable - npm

创建后端

koa2 -e koa-server

cd koa-server

npm install

npm install koa-cors

npm install formidable

进入到koa-server/app.js

添加:const cors = require("koa-cors")

app.use(cors())

index.js

const router = require('koa-router')()
const {formidable} = require('formidable')router.get('/', async (ctx, next) => {ctx.body = {status: 'koa2'}
})router.post('/add',(ctx,next)=>{let body=ctx.request.bodyconsole.log(body)// console.log(ctx.request.body.name)ctx.body ={status: 'success'}
})router.post('/upload',async(ctx,next)=>{let form=formidable({uploadDir:__dirname,keepExtensions:true})await new Promise((resolve,reject)=>{form.parse(ctx.req,(err,fields,files)=>{if(err){reject(err)return}console.log(fields)console.log(files)ctx.set('Content-type','application/json')ctx.status=200ctx.state={fields,files}ctx.body=JSON.stringify(ctx.state,null,2)resolve()})})})router.get('/string', async (ctx, next) => {ctx.body = 'koa2 string'
})router.get('/json', async (ctx, next) => {ctx.body = {title: 'koa2 json'}
})module.exports = router

前端页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="file" id="file" />
</body>
<script>fetch('http://localhost:3000/',{method: 'GET',// body:JSON.stringify({})   get请求不需要bodymode: 'cors'})// 服务端返回的数据格式  json()  text()  blob().then(res => res.json())// 服务端接受数据.then(data => {console.log(data)})fetch('http://localhost:3000/add',{method: 'POST',body:JSON.stringify({name:'张三'}),mode: 'cors'}).then(res => res.json()).then(data => {console.log(data)})const file = document.querySelector('#file');file.onchange = function () {// console.log(file.files)let uploadFile = file.files[0];let formData = new FormData();formData.append('file',uploadFile);fetch('http://localhost:3000/upload',{method: 'POST',body:formData,mode: 'cors'}).then(res => res.json()).then(data => {console.log(data)})}
</script>
</html>
高性能的动画处理

Window:requestAnimationFrame() 方法 - Web API 接口参考 | MDN

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="file" id="file" />
</body>
<script>fetch('http://localhost:3000/',{method: 'GET',// body:JSON.stringify({})   get请求不需要bodymode: 'cors'})// 服务端返回的数据格式  json()  text()  blob().then(res => res.json())// 服务端接受数据.then(data => {console.log(data)})fetch('http://localhost:3000/add',{method: 'POST',body:JSON.stringify({name:'张三'}),mode: 'cors'}).then(res => res.json()).then(data => {console.log(data)})const file = document.querySelector('#file');file.onchange = function () {// console.log(file.files)let uploadFile = file.files[0];let formData = new FormData();formData.append('file',uploadFile);fetch('http://localhost:3000/upload',{method: 'POST',body:formData,mode: 'cors'}).then(res => res.json()).then(data => {console.log(data)})}
</script>
</html>
视频演示

fetch请求和高性能动画处理

js语言层级优化(减少页面中的dom操作)

对比前,有很多的dom操作,并且直接写在循环里面了

优化:把它们转存一下

http://www.lryc.cn/news/317950.html

相关文章:

  • Docker容器化技术(使用Docker搭建论坛)
  • C# ListView 控件使用
  • 【string一些函数用法的补充】
  • 【Go】令牌桶限流算法
  • go的slice学习
  • 软件设计师17--磁盘管理
  • 学点Java打小工——Day2Day3一点作业
  • 【话题】2024年AI辅助研发趋势,有那些应用领域
  • 蓝桥杯——数组切分
  • 【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项
  • 数据库是什么?数据库连接、管理与分析工具推荐
  • 【C#算法实现】可见的山峰对数量
  • Selenium 隐藏浏览器指纹特征的几种方式
  • k8s发布nacos-server,nodeport配置注意事项
  • 伪分布式Spark集群搭建
  • Android 监听卫星导航系统状态及卫星测量数据变化
  • 鸿蒙培训开发:就业市场的新热点~
  • 【C++】string的底层剖析以及模拟实现
  • Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)
  • 电脑远程桌面选项变成灰色没办法勾选怎么办?
  • 2024.3.14
  • chatGPT的耳朵!OpenAI的开源语音识别AI:Whisper !
  • C语言冒泡排序
  • vue2 elementui 封装一个动态表单复杂组件
  • 基于智慧灯杆的智慧城市解决方案(2)
  • 「Paraverse平行云」亮相HKSTP OPENHOUSE活动
  • CubeMX使用教程(5)——定时器PWM输出
  • superset连接Apache Spark SQL(hive)过程中的各种报错解决
  • Pulsar IO实战
  • Linux/Ubuntu/Debian基本命令:文本操作