高性能javascript--算法和流程控制

2023-11-17

  • for,while和do-while性能相当
  • 避免使用for-in循环,除非遍历一个属性量未知的对象

es5:for-in 遍历的对象便不局限于数组,还可以遍历对象。

原因:for-in每次迭代操作会同时搜索实例或者原型属性, for-in 循环的每次迭代都会产生更多开销,因此要比其他循环类型慢,一般速度为其他类型循环的 1/7。因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用 for-in 循环。如果需要遍历一个数量有限的已知属性列表,使用其他循环会更快

  • foreach没有for性能好

不能中断循环(使用break或者return)

在 for 循环中可以使用 continue,break 来控制循环和跳出循环,这个是 forEach 所不具备的。【在这种情况下,从性能的角度考虑,for 是要比 forEach 有优势的。(一个长度为100的数据,你for循环到35的时候,实现了功能,达到了目的的话,这个时候可以 break 跳出循环的;使用 forEach 的话,是不能退出循环本身的。)】

  • for-of

es6里引入了一种新的循环方法,它就是for-of循环,它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。

  • switch 与if else 效率比较

使用if-else 或者switch 是基于测试条件的数量:条件数量较大,倾向于使用switch 而不是if-else。这通常归结到代码的易读性,如果条件较少时,if-else 容易阅读,而条件较多时switch更容易阅读。

优化if-else 的目标总是最小化找到正确分支之前所判断条件体的数量。最简单的优化方法是将最常见的条件体放在首位。

  • 判断条件多时,使用查找算法,eg,二分查找,优于switch 与if else

  • memoization (常用于递归)

一种优化技术,主要用于通过存储昂贵的函数调用的结果来加速计算机程序,并在再次发生相同的输入时返回缓存的结果。

Memoization是JavaScript中的一种技术,通过缓存结果并在下一个操作中重新使用缓存来加速查找费时的操作。

在这里,memoization通常会缩短执行时间并影响我们应用程序的性能。当我们知道一组输入将产生某个输出时,memoization最有效。
遵循最佳实践,应该在纯函数上实现memoization。纯函数输入什么就返回什么,不存在副作用。
记住这个是以空间换速度,所以最好确定你是否值得那么做,有些场景很有必要使用。
在处理递归函数时,Memoization最有效,递归函数用于执行诸如GUI渲染,Sprite和动画物理等繁重操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高性能javascript--算法和流程控制 的相关文章

  • RESTful设计方法

    REST REST 即Representational State Transfer的缩写 维基百科称其为 具象状态传输 国内大部分人理解为 表现层状态转化 RESTful是一种开发理念 维基百科说 REST是设计风格而不是标准 REST描

随机推荐

  • Navicat备份数据库和还原数据库详解

    Navicat备份数据库和还原数据库详解 首先我们知道Navicat备份的数据库文件为XX psc文件 当然也可以备份成XX sql文件 下面我们以常用的XX psc文件为例 来详细操作数据库的备份 其他数据库可视化工具以后再详述 废话不多
  • Nginx配置WS、WSS域名

    文章目录 一 Nginx配置WS 二 Nginx配置WSS 一 Nginx配置WS WS的全称是WebSocket Nginx配置WebSocket也比较简单 只需要在nginx conf文件中进行相应的配置 这种方式很简单 但是很有效 能
  • ssim算法计算图片_图片的相似度--图像结构相似度SSIM

    计算两张图片的相似度 图片结构相似度 SSIM SSIM的全称为structural similarity index 结构相似性 分别从亮度 对比度 结构三方面度量图像相似性 均值作为亮度的估计 标准差作为对比度的估计 协方差作为结构相似
  • 在 Dev-C++ 或 Code::Blocks 下面配置 EasyX !

    前言 EasyX 虽然挺好用 但是目前官方只发布了针对 VC 的使用方法 本文介绍如何将 EasyX 配置到 DevCpp 或 CodeBlocks 里面 并提供相关的库 平时我工作忙 有问题直接在后面留言 我会尽力修改 注 版本太老的 m
  • 华为校招机试题-查找重复代码-2023年

    题目描述 小明负责维护项目下的代码 需要查找出重复代码 用以支撑后续的代码优化 请你帮助小明找出重复的代码 重复代码查找方法 以字符串形式给定两行代码 字符串长度 1 lt length lt 100 由英文字母 数字和空格组成 找出两行代
  • mvc:annotation-driven 与 mvc:default-servlet-handler的作用

    本人见解 两个标签需要配合使用 可以很好地处理SpringMVC请求静态资源或者控制器时的选择 静态资源包括图片 jsp css 但是不设置的话访问jsp可以显示 不知原因 下方转发自 https www cnblogs com cyhby
  • 平衡小车学习总结

    1 平衡小车硬件选择 带编码器的直流减速电机 两个 18650电池组 平衡车支架 MPU 6050陀螺仪 stm32f103c8t6 OLED iic通信协议 0 96寸 TB6612 2 硬件准备阶段 根据电路原理 平衡小车电路板 单片机
  • 计算机如何隐藏任务栏的程序,Win7隐藏任务栏

    本文主要介绍了2个方面的内容 1 Win7隐藏任务栏程序 2 隐藏Win7任务栏上图标 不少用户希望把任务栏程序隐藏起来 或者是把Win7任务栏右侧 正在运行的软件的图标隐藏起来 这样其他人就不能直接发现自己电脑上运行的程序了 一 隐藏Wi
  • 机器学习之有监督学习

    监督学习的目标 利用一组带有标签的数据 学习从输入到输出的映射 然后将这种映射关系应用到未知数据上 达到分类或回归的目的 分类 当输出是离散的 学习任务为分类任务 回归 当输出是连续的 学习任务为回归任务 分类学习 输入 一组有标签的训练数
  • python 3.9 Building wheel for opencv-contrib-python (PEP 517)

    问题 python3 9安装airetest 一直卡在 Building wheel for opencv contrib python PEP 517 解决办法 降低opencv contrib python版本先安装opencv con
  • 华为OD机试 -身高排序(Java)

    题目描述 小明今年升学到了小学一年级 来到新班级后 发现其他小朋友身高参差不齐 然后就想基于各小朋友和自己的身高差 对他们进行排序 请帮他实现排序 输入描述 第一行为正整数H和N 0 lt H lt 200 为小明的身高 0 lt N lt
  • 大脚战场插件怎么关闭_魔兽战场插件 capping插件怎么关闭

    魔兽世界怎么取消战场插件 字符选择屏幕的左下角有一个插件选项 单击下面的 战场 并单击以禁用它们 它不在游戏中 死亡模式你是说死后的黑白 如果是 点击游戏界面下方的系统选项 进入视频设置 关闭显示设置中的死亡效果 WOW战场capping插
  • Docker Postgres 安装部署指南1.0

    以下为实验版本 Docker version 18 09 2 Postgres 11 4 内容目录 1 确定需要安装的版本 2 获取指定版本镜像 3 指定数据挂载目录 4 启动Postgres服务 5 创建数据库 用户 5 1 进入容器内部
  • 【前后端】将代码上传到gitee

    文章目录 前台 gitee建立仓库 步骤A 如果是双人 则有步骤B 后台 gitee建立仓库 复制链接 代码拷贝 提交 小记录一波 前台 gitee建立仓库 步骤A 初始化 commit 后面单引号随便写 git init git add
  • VLAN划分及配置注意事项

    VLAN Virtual Local Area Network 即虚拟局域网 是将一个物理的LAN在逻辑上划分成多个广播域的通信技术 VLAN内的主机间可以直接通信 而VLAN间不能直接通信 从而将广播报文限制在一个VLAN内 VLAN之间
  • Spark Streaming VS Flink

    架构对比 运行角色 Spark Streaming 运行时的角色 standalone 模式 主要有 Master 主要负责整体集群资源的管理和应用程序调度 Worker 负责单个节点的资源管理 driver 和 executor 的启动等
  • MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600

    MT6701是麦歌恩 MagnTek 公司的磁性角度传感器芯片 提供14Bit 0 360 单圈绝对角度检测 拥有 ABZ PWM 模拟量 I2C SSI 等多种信息输出方式 还可根据磁场强度的瞬时变化提供非接触式按压检测功能 能够以较低的
  • ENVI 5.3 分类后类别合并

    想把粉色的云层合并到林地 选择 Combine Classes 输出为 白云类别与林地合并
  • iOS支付功能

    文章转载自 https www jianshu com p 8eb14edca8fb 1 简介 iOS支付主要分两类 第三方支付和应用内支付 内购 其中第三方支付包括有 支付宝支付 微信支付 银联支付 百度钱包支付 京东支付等 应用内支付
  • 高性能javascript--算法和流程控制

    for while和do while性能相当 避免使用for in循环 除非遍历一个属性量未知的对象 es5 for in 遍历的对象便不局限于数组 还可以遍历对象 原因 for in每次迭代操作会同时搜索实例或者原型属性 for in 循