js unshift()方法可以向数组的头部添加元素并返回新的数组长度,我们手写一个unshift() 方法

Array.prototype._unshift = function () {let arr = thislet oldLen = this.lengthlet argLen =  arguments.lengthlet newLen = oldLen + argLenfor (let i = oldLen - 1; i >= 0; i--) {arr[i + argLen] = arr[i]}for (let i = 0; i < argLen; i++) {arr[i] = arguments[i]}return newLen}let arr1 = [1, 3, 4, 5, 6]console.log(arr1._unshift(7, 8, 1),arr1); // 8, [7, 8, 1, 1, 3, 4, 5, 6]

从上面代码可以看出先把元素往后移动,再添加元素,对于数组长度很大的 情况下性能是比较差的。
但是我们可以先push(), 然后再reverse() ,效率更快。
咱们手写一下push和reverse做下对比

 Array.prototype._push = function () {let arr = thislet len = arguments.lengthfor(let i = 0; i < len; i++) {this[this.length] = arguments[i]}return this.length}let arr = [2, 54, 65, 3, 4]
Array.prototype._reverse = function () {let arr = thislet j = arr.length - 1for(let i = 0; i < j; i++,j--) {let curLeft = arr[i]let curRight = arr[j]arr[i] = curRightarr[j] = curLeft}return arr}

可以看出reverse和push的时间复杂度要低。实际对比下

 let arr = []console.time('time1')for(let i = 0 ;i< 10000; i++) {arr.unshift(i)}console.timeEnd('time1')   // 平均耗时 5ms
    let arr = []console.time('time2')for(let j = 0 ;j< 10000; j++) {arr.push(j)}arr.reverse()console.timeEnd('time2')  // 平均耗时 0.47ms

js unshift性能分析相关推荐

  1. javascript php 性能,浅谈页面装载js及性能分析方法_javascript技巧

    一.装载 先装载静态页面的引用js文件,然后查找引用文件中是否包含onload函数,比如main.js中包含onload函数,在main.js中查找是否有对其他js文件的引用,优先装载引用js文件,被 ...

  2. 网站性能分析(下)-让网站并行加载但顺序执行JS

    如果网站不支持JavaScript,复杂的功能将无法正常工作.在开发当中通常有几个脚本会写在HTML文件的头部.你嵌入的越多,网站的速度潜在的变得越慢.因此提高并行加载速度变得非常有必要,在前面的文章 ...

  3. JS几种数组遍历方式以及性能分析对比

    前言 这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比 起由 在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得 ...

  4. Vue.js 应用性能优化,给你专业的分析+解决方案

    目录 介绍 为什么我们需要 Vue JS 性能优化? Vue 性能不佳背后的主要原因 如何检查您的 VueJS 应用的大小? 如何优化 Vue js 应用程序的性能? 1. 在 Vue js 中懒加载 ...

  5. JS在浏览器上的性能分析(一)脚本的下载与运行

    JS在浏览器上的性能分析(一)脚本的下载与运行 前言 JS在浏览器上的性能,可以认为是开发者所面临的最严重的可用性问题.JS的阻塞特性使得浏览器在执行JS代码时不能同时做其他任何事情,而大多数浏览器使 ...

  6. UIWebView、WKWebView使用详解及性能分析

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  7. DevTools 实现原理与性能分析实战

    作者:vivo 互联网浏览器内核团队-Li Qingmei 一.引言 从 2008 年 Google 释放出第一版的 Chrome 后,整个 Web 开发领域仿佛被注入了一股新鲜血液,渐渐打破了 IE ...

  8. webuploader 怎么在react中_React 项目性能分析及优化

    点击上方"前端技术砖家"关注 性能优化不是一个简单的事情,但在 95% 以上的 React 项目中,是不需要考虑的,按自己的想法奔放的使用就可以了. 我认为性能优化最好的时候是项目 ...

  9. 网页性能分析不完全指南

    ●●● 前言 经常能在博客或者论坛上看到很多有关前端性能优化的文章,但是却很少看到如何分析一个网页的性能的文章.到底什么样的指标(或者说是标准)代表这个网页性能好或者不好,通过什么方式来得到这些指标呢 ...

  10. 前端性能分析工具利器

    作者:basinwang,腾讯 PCG 前端开发工程师 大型项目容易遇到性能问题,一般来说,当我们遇到性能瓶颈的时候,才会开始去进行相应的分析.分析的方向除了业务本身的特点相关之外,常见的还可以借助一 ...

最新文章

  1. Transform(CTM,Translate,Rotate,Scale)
  2. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
  3. 基于Elasticsearch实现搜索建议
  4. web网站无法启动报错
  5. 解决 /lib64/libc.so.6: version `GLIBC_2.15‘ not found 问题
  6. Ansible-playbook 拾遗
  7. PostgreSQL 可靠性和一致性 代码分析
  8. Golang并发:再也不愁选channel还是选锁
  9. 博士的浪漫,就是把你写进论文致谢,保存一辈子
  10. 专访华为杨海松:立足合作伙伴价值,构建健康HarmonyOS生态
  11. ftp 200 227 451linux,FTP无法链接
  12. python中arcsec_python – 更好的方法来计算Skyfield中两个物体的明显角度分离?
  13. Activiti工作流程详解
  14. LearnGL - 13 - PointLight - 点光源
  15. 前端配色方案:最舒服的十种颜色
  16. Java程序员从笨鸟到菜鸟之(五十七)细谈Hibernate(八)Hibernate集合Map关系映射
  17. python复数计算符号_Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块...
  18. 一个int和long占多少个字节
  19. 在Java中12个常见的语法糖!
  20. Java NIO Socket编程实例

热门文章

  1. 5类6类7类网线对比_5类 6类 7类网线有没有什么区别
  2. con排插与单片机相连_单片机与8255芯片连接详解
  3. Qt3升至Qt4需要注意的几件事项浅谈
  4. Ubutntu18.04 root用户下谷歌浏览器打不开
  5. 人人都是首席质量官--读后感
  6. 字体图标和变形 transform属性的使用
  7. 饥饿游戏3:嘲笑鸟(下)[The Hunger Games: Mockingjay - Part 2]
  8. 压缩包文件的密码如何破解
  9. 【搜索】桐桐的运输方案
  10. python批量将png格式转换为jpg格式,并保存到新的文件夹