前端代码优化小技巧

news2024/11/26 2:00:30

导读

今天分享一下开测前端代码的一些优化,及使用的一些小技巧,来优化我们的网站,前端开发中最常见的问题就是很少使用ES6方法导致代码冗余,不够清晰,定时器和闭包导致内存溢出及泄露,网站中css导致排版错乱,请求图片过多,导致网站加载缓慢,网站中兼容各种浏览器的问题。

ES6语法和JS优化技巧

逻辑与运算

if() else() 可以简化为 flag==1?true:false

includes 处理多重条件

if(code==='202' || code === '203' || code === '204') 可以简化为if(['202','203','204'].includes(code))

map的使用

var arr=['1','2','3'];

假如我们有一个需要把这些数据都转为Number类型呢?是不是第一时间想到了for循环,其实还有更简单的方法。

arr=arr.map((v)=>Number(v));

var str=[['1','2'],['2','3']];

every:"一假则假"

注意哦 every不会对空数组进行检测

arr.every((currentValue,index,array)=>{   //适合用于全选
   // currentValue = 当前执行元素
   // index = 当前索引值
   // array = 执行的数组
})

arr.some((currentValue,index,array)=>{
   // currentValue = 当前执行元素
   // index = 当前索引值
   // array = 执行的数组
})

arr.filter((currentValue,index,array)=>{
    // currentValue = 当前执行元素
    // index = 当前索引值
    // array = 执行的数组
})

1.闭包会形成一个不销毁的栈内存,过多的栈内存累积会影响页面的性能。

使用定时器注意的问题

如果针对的是不断运行的代码,不应该使用setTimeout,而应该使用setInterval,因为setTimeout每一次都会初始化一个定时器,setInterval只会在开始的时候初始化一个定时器。

网页中CSS使用技巧

采用CSS雪碧图(CSS Sprit / CSS 图片精灵)技术,把一些小图合并在一张大图上,使用的时候通过背景图片定位,比如我们的icon图标可以汇总为一张图片。

.main{
     background:url('../img/sprit.png') no-repeat;
     background-size:x y; /*和原图的大小保持一致*/
}
.box{
     background-position:x y; /*通过背景定位,定位到具体的位置,展示不同的图片即可*/
}

避免使用CSS表达式

/*CSS表达式*/
.box{
    background-color:expression((new Date()).getHours()%2?'red':'blue')
}

避免图片有空的 src 属性

在有些浏览器下,图片空的 src 属性也是会向服务端发送请求的,这些无意义的请求是会增加服务器的压力的。

使用预加载:预加载和延迟加载看似相反,其实它们有两个不同的目的,延迟加载是为了更快的完成页面的加载,而预加载是指提前将页面需要的组件下载下来并缓存,减少页面的响应时间。

尽可能使用CSS动画

避免css的重绘重排

1.重绘(Repaint)

重绘是一个元素外观的改变所触发的浏览器行为,例如改变outline、背景色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。重绘不会带来重新布局,所以并不一定伴随重排。

2.重排(Reflow)

渲染对象在创建完成并添加到渲染树时,并不包含位置和大小信息。计算这些值的过程称为布局或重排。

网站中一些兼容优化

1.获取滚动条的兼容

var scrollTop = document.documentElement.scrollTop || document.scrollTop

2.阻止浏览器默认行为兼容

preventDefault : function(event) {
if(event.preventDefault) {
      event.preventDefault()
}else {
      event.returnValue = false
    }
}

3.阻止事件冒泡的兼容

stopPropagation : function(event) {
if(event.stopPropagation) {
   event.stopPropagation()
}else {
   event.canceBubble = true
}
}

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础——对于C语言缺点的补充(2)

上篇文章中说到,为了解决C语言会出现人为定义的函数和库函数出现重定义的错误,C引入了一个新的概念,即命名空间,通过认为定义命名空间,来解决上述问题。 在本篇文章中,将继续介绍C相对于C语言不足来进行的补…

linux之信号

Linux之信号 什么是信号信号的产生方式signalsignactionkill信号集信号屏蔽 什么是信号 信号机制是一种使用信号来进行进程之间传递消息的方法,信号的全称为软中断信号,简称软中断。 信号的本质是软件层次上对中断的一种模拟(软中断&#xff…

Hello Qt!

目录 1. 什么是Qt 2. Qt中的模块 3. 下载安装 4. QtCreator 4. Hello Qt 解释 .pro 解释 main.cpp 解释 mainwindow.ui 解释 mainwindow.h 解释 mainwindow.cpp 5. Qt 中的窗口类 5.1 基础窗口类 5.2 窗口的显示 6. Qt 的坐标体系 7. 内存回收 1. 什么是Qt 是一…

✔ ★【备战实习(面经+项目+算法)】 11.6 学习

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

【斗破年番】萧炎给彩鳞承诺遭删,熏儿限时返场,古河沦为打工人

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料,在斗破年番69话的最新剧情中,一场感人至深的情感戏份被删减了。在原著中,萧炎曾向美杜莎承诺,他会集齐材料,为她炼制出天雁九行翼。然而&a…

简单2招GET模型参数量计算和输入尺寸随卷积大小变化推导

本文将介绍两种简单且实用的方法,用于计算深度学习模型的参数量,并推导了输入尺寸随卷积大小的变化过程。这些方法可以帮助读者更好地理解模型的复杂度和输入尺寸的变化,为模型设计和优化提供指导。 比如论文中,通常会比较几种模…

机器学习概论

一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术 2…

龙迅LT6911UXC替换LT6911UXE 支持单PORT 4K60HZ 带HDCP

LT6911UXC 描述: 龙迅LT6911UXC是一个高性能的HDMI2.0到MIPI DSI/CSI & LVDS转换器。HDMI2.0输入支持高达6Gbps的数据速率,这为60Hz的视频提供了足够的带宽。同时,还支持使用HDCP2.2来进行数据解密。对于MIPI DSI/CSI输出,LT…

【二进制转换和与其有关的操作符详解】

文章目录 1.二进制与进制转换2. 2进制转8、10、16进制2.1 2进制转10进制2.2 2进制转8进制2.3 2进制转16进制 3. 8、10、16进制转2进制3.1 10进制转2进制3.2 8进制转2进制3.3 16进制转2进制 4.原码、反码、补码5.移位操作符&#xff08;<< >>&#xff09;5.1左移操作…

英飞凌TLF35584规格书中文

官网&#xff1a; 英飞凌TLF35584QVVS2 TLF35584_SPI&#xff1a; 1 Overview2 Block Diagram3 Pin Configuration3.1 Pin Assignment - PG-VQFN-48 4 General Product Characteristics4.1 Absolute Maximum Ratings 绝对最大额定值4.2 Functional Range4.3 Thermal Resistance…

制造业企业设备管理常见的三个问题及对应的解决方案

当今的市场如同茫茫大海&#xff0c;既充满机遇&#xff0c;也伴随着波动的风险。在现代制造业中&#xff0c;企业常常面临着各种挑战&#xff0c;这些挑战可能妨碍其发展和竞争力。但制造企业往往具备能够解决挑战的能力&#xff0c;借助软件工具的力量&#xff0c;可以更好地…

vue3中router和route的区别(使用场景)

1.router router是用来对路由进行操作的&#xff1b; 多用于路由跳转、路由守卫、页面刷新、给路由文件添加路由路径或者移除路由路径等等 2.route route是用来获取路由信息的&#xff1b; 多用于获取路由路径、路由传参数据、路由文件配置的属性信息等等

2000-2022年“宽带Z国“试点城市名单匹配数据

2000-2022年“宽带Z国“试点城市名单匹配数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;行政区划代码、年份、地区、所属省份、所属地域、试点城市、最早试点年份、DID 3、来源&#xff1a;来自工信部和国家发改委在2014年、2015年和2016年分别遴选的“宽带中国”…

x86汇编代码学习-计算机工作原理2

文章目录 前言1.mov2.内存分段3.调试5.注释6.标号7.add sub8.inc dec自增&#xff0c;自减9.adc sbb10 乘法栈11 栈寄存器push pop12 jz jnz13 section 16字节对齐14 CALL15 逻辑运算16 启动MBR以外的程序174. 前言 视频教程 x86汇编代码学习-计算机工作原理1 1.mov 因为ah是…

C++ 信息学奥赛 2048:【例5.18】串排序

#include<bits/stdc.h> using namespace std; int main() {string s[25];//string类数组 int n;cin >> n;for(int i 1; i < n; i)cin >> s[i];sort(s1, s1n);//默认升序 调用函数默认排序 for(int i 1; i < n; i)cout << s[i] << endl;…

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换 前言前提条件相关介绍实验环境Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换convert_labelme_json_to_txtjsons/000000000009.json代码实现输出结果labels/000000000009.txt convert_txt_to_labelme_…

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark&#xff0c;本想着先把 Kafka、Flume 这些工具先学完的&#xff0c;但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈&#xff0c;偷偷立个 flag&#xff0c;反正也没人看&#xff0c;明年的今天来这里还愿哈&#xff0c…

C语言100~200中不能整除3的数

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {int n;for (n 100; n < 200; n){if (n%3 0){continue;}printf("%d\n",n);}}

RFC使用与WebService

RFC连接 CSDN RFC中引用类型组 http://t.csdnimg.cn/wQWAYhttp://t.csdnimg.cn/wQWAY 远程目标系统维护SM59 这里的类型指的是目标系统的系统类型(目标系统即rfc函数存在的系统). 类型2&#xff08;R/2连接&#xff09;&#xff0c;只需给出主机名&#xff0c;所有通信信息…