【前端性能优化】使用惰性函数减少无意义的重复判断

什么是惰性函数?

惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。

惰性函数的本质就是函数重写

场景

例如很多时候我们需要判断浏览器是否支持某一套api,如果支持的话就可以直接使用api实现相关的功能,如果不支持的话采用另一种实现方式

例子

我们需要完成一个功能是将给定的text参数复制到剪贴板,我们知道浏览器有一套apinavigator.clipboard,可以完成相关操作,假如不支持的话我们只能使用比较常规的方式实现

function copyText(text){if(navigator.clipboard){navigator.clipboard.writeText(text).then(()=>{console.log("复制成功");}).catch((err)=>{console.log("复制失败");});}else{var textarea = document.createElement("textarea");textarea.value = text;document.body.appendChild(textarea);textarea.select();document.execCommand("copy");document.body.removeChild(textarea);}
}

看起来没问题,但是我们每次复制的时候都需要先判断navigator.clipboard明显是不合理的,因为用户的浏览器环境不太可能发生突然的变更,所以重复的判断可能会造成性能浪费

所以我们采用惰性函数的方式重构这段代码,只检测一次环境,然后内部对函数本身进行重写

function copyText(text) {const useModernAPI = Boolean(navigator.clipboard);if(useModernAPI){copyText = function (text) {navigator.clipboard.writeText(text).then(() => {console.log("复制成功");}).catch((err) => {console.log("复制失败");});}}else{copyText = function (text) {var textarea = document.createElement("textarea");textarea.value = text;document.body.appendChild(textarea);textarea.select();document.execCommand("copy");document.body.removeChild(textarea);}}copyText()}

这样仅仅只会在第一次调用的时候检查一次浏览器支持情况,内部重写了函数,提高了性能

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

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

相关文章

【JavaWeb】Day38.MySQL概述——数据库设计-DQL(一)

数据库设计——DQL 介绍 DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。 查询关键字:SELECT 查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的使用频次…

Python实现BOA蝴蝶优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

synchronized用于静态方法与普通方法有区别吗?

Synchronized 关键字在 Java 中用于实现线程同步,确保在多线程环境下对共享资源的访问是安全的。当应用于方法时,它可以用于静态方法和普通方法,但二者之间确实存在一些区别。 锁的对象不同: 对于普通方法,锁的对象是调…

3.13 Python位运算符

Python位运算符详解 Python位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web 开发、Linux 运维等)中并不…

神经网络训练中batch的作用

在神经网络训练中,batch的作用主要包括以下几个方面: 减少内存占用和计算成本:在训练神经网络时,需要加载并处理大量的数据。使用batch训练可以将数据分成较小的批次,每次处理一小部分数据,从而减少内存占用…

数据库讲解---(SQL语句--练习题讲解)【MySQL版本】

目录 零.前言 一.例题一 1.1查询姓刘的老师所授课程的课程号和课程名 1.2查询年龄大于23岁的男同学的学号和姓名 1.3查询学号为S3的学生所学课程的课程号、课程名和任课教师姓名 1.4查询“张小飞”没有选修的课程号和课程名 1.5查询至少选修了三门课程的学生的学号和姓名…

cmake + mingw32构建和编译第三方lib库, qt 使用lib库

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 背景 qt 有两种编译器,分别是visual studio和MinGW。很多第三方库提供编译好的visual studio 库,MinGW库需要自己编译。喜欢MinGW没有太多版本…

Python的时间和日期:探索datetime模块

🚀 个人主页:xmp65535 🚀 专栏:python技术专栏 目录 一、前言 二、datetime 模块简介 三、基本使用 1.日期和时间的创建 2.获取当前日期和时间 3.时间戳与日期时间之间的转换 4.时间运算 5.格式化日期和时间 6.解析字符串…

vs2022启动cmake项目(qt+c++)

1.本工程,如图,1个cmakelist.txt3个文件 2.启动vs 3.选择文件夹 4.进入这个页面,就说明配置没问题 5.启动 6.最后会自己生成其他文件

Proteus 8 的使用记录

创建仿真文件 新建文件:默认下一步,至完成创建。 功能选择如图: 放置器件 常用元器件名称 keywords 常用51单片机 AT89C52 晶振 CRYSTAL 电阻 RES 排阻 RESPACK-8 瓷片电容 CAP 电解电容 CAP-ELEC 单刀单掷开关 S…

网络协议学习——以太网协议

目录 ​编辑 一,以太网简介 二,以太网通信的过程 为什么不用IP地址? 过程 MAC帧 MAC帧的字段介绍 ARP协议 传输过程的一些问题 RARP协议 提高效率 三,其他问题 ARP诈骗问题 URL解析过程 一,以太网简介 …

python图书馆图书借阅系统含网上商城管理系统7d538

,python语言,django框架进行开发,后台使用MySQL数据库进行信息管理,设计开发的图书管理系统。通过调研和分析,系统拥有管理员和用户两个角色,主要具备注册登录、个人信息修改、用户、图书分类、图书信息、借…

Django交易商场

Hello,我是小恒不会java 最近学习django,写了一个demo,学到了不少东西。 我在GitHub上开源了,提示‘自行查看代码,维护,运行’。 最近有事,先发布代码了,我就随缘维护更新吧 介绍: 定…

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表,其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术,以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前,首先需要进行充…

如何更换网络IP地址,简单几步轻松搞定

在数字化日益普及的今天,网络IP地址作为设备在网络中的标识,扮演着极其重要的角色。有时,出于安全考虑、网络布局调整或解决特定问题的需要,我们可能需要更换网络IP地址。虎观代理将详细介绍如何更换网络IP地址,帮助用…

LeetCode-152. 乘积最大子数组【数组 动态规划】

LeetCode-152. 乘积最大子数组【数组 动态规划】 题目描述:解题思路一:动态规划五部曲:定推初遍举解题思路二:因为每一个状态只与前一个状态有关,可以使用「滚动变量」技巧,使用常数个变量完成这道问题。解…

2024年MathorCup数模竞赛C题超详细解题思路

妈妈杯本次比赛报名队伍号高达12500,这也就意味着大概一万只队伍参加报名,仅仅在报名人数这一项,妈妈杯已经成为美赛国赛之后的第三大竞赛。C题作为本次竞赛最简单也最容易获奖的题目,本文将给大家带来手把手超详细解题思路。 注…

数据结构基础 ——数组VS链表(二)

一、数组 数组对应的英文是array,是有限个相同类型的变量所组成的有序集合,数组中的每一个变量称为元素。数组是最简单、最常用的数据结构。 数组存储格式: 在Python语言中,并没有直接使用数组这个概念,而是使用列表(…

投资认知第一篇-股票分红是怎么回事?

购买股票的收益分为两种,一种是低价买高价卖的差价(也就是俗称的炒股),另一种就是分红收益。购买一家上市公司的股份,投资者有权享受其分红,这是投资者的权益。一般来讲,上市公司分红有两种形式…

重磅,新GPT-4-Turbo重新夺回大模型第一名

好消息,新版 GPT-4 Turbo 今天开始现已向所有付费 ChatGPT 用户开放。GPT-4 Turbo提高了写作、数学、逻辑推理和编码能力。上下文长度128k 输出速度更快。现在已经开始陆续推送,如果你发现你的知识库截止时间是2024年4月,那么就是最新版本了&…