注意啦,前端初学者适合看的js优化,当你看我的优化认为太low,那么恭喜,你已经脱离初学者了。

  首先这边我觉得分享的还是以js为主,前端性能优化,我认为最重要的还是js,因为js是一门解释型的语言,相比于编译型语言,执行速度慢得多。木桶效应,js就是那块最短的木板。接下来进入正题,刚进入前端的同学,能做哪些性能优化的方面呢?

  1.使用jq代替原生js

  其实上家公司我一直秉持着,原生的js好!为什么呢?因为我不会jq。。。。但是来到现在的公司后,发现使用原生的js会被人排挤啊~你想问个问题,人家原生的js不熟啊,所以我经过这几个月加班之后,还是可以简单使用jq了。其实使用jq就是优化js的第一步,相信看过jq源码的同学都知道,jq把原生js会报的很多错都封装起来了,不至于这报错,那里报错,用户随意点击了下,有时一下子网页没动静,很有可能就是js报错了阻止了接下来的代码运行。

  2.避免全局变量

  简而言之,不要全局变量,除了第一个安全性问题呢,在代码优化方面,访问局部变量速度比访问全局变量更快。

  3.定时器方面

  针对不断运行的代码,不建议使用setTimeOut(),选择setInterval,因为一次性定时器每次都会初始化一个定时器。这里又要举个栗子了,最近公司来了个自称两年经验的同事,我的组长把他先安排给我带。。。。(心里还是有点翅激),先给他布置了个任务,发送验证后的按钮状态,从60秒开始倒计时,倒计时结束,按钮解锁还可以再次发送验证码。就这么一个事,他的代码是

  

  四大不足,第一,我看这个setTimeOut不爽很久了,他在这里相当于开了60个延时器,这性能我就不多说了,第二,延时器第一参数是个方法,他在这里写了个function,function里面又包了一个function,请问你的意图在哪里?第三,在看他的settime方法里,其实又是开启另一个方法。。。。。。。我心好累!第四个问题,条件分支下他把countdown==0放在了第一位,解析器会有59次探测此条件并且跳转到else,我还是建议把可能性大的,放在第一位。下图,就是我优化后的60秒倒计时

  

  4.字符串连接

  如果连接多个字符串,应该尽可能少的使用“+=”。如下图

  

  5.数字转换字符串方面

  最好使用""+1进行转换。虽然看起来很丑,但是不可否认这是最优。以下转换方法的性能排名

  (""+)>String()>.toString()>new String()

  6.条件分支

  就是if方面的,首先将可能性从高到低排列,减少解析器对条件探测的次数,其次,同一条件下子的多条件分支(大于2到3分支)时,建议使用switch,最后,推荐使用三目运算符代替条件分支。

  7.最小化现场更新

   一旦你需要访问的DOM部分是已经显示的页面的一部分,那么你就是在进行一个现场更新。之所以叫现场更新,是因为需要立即(现场)对页面对用户的显示进行更新,每一个更改,不管是插入单个字符还是移除整个片段,都有一个性能惩罚,因为浏览器需要重新计算无数尺寸以进行更新。现场更新进行的越多,代码完成执行所花的时间也越长。这里不懂的同学可参考我博客中关于重绘重排方面的知识,或baidu.com
  

  8.总是使用#id去寻找element.

  在jQuery中最快的选择器是ID选择器 ($('#someid')). 这是因为它直接映射为JavaScript的getElementById()方法。

  9.选择多个元素

  在我们讨论选择多个元素的时候,我们真正需要知道的是DOM的遍历和循环才是性能低下的原因。为了尽量减少性能损失, 总是使用最近的父ID去寻找。如下图,我要获取父级元素下的所有inuput标签

  10.在Classes前面使用Tags

  在jQuery中第二快的选择器就是Tag选择器 ($('head')). 而这是因为它直接映射到JavaScript的getElementsByTagName()方法。

注意:在jQuery里Class选择器是最慢的一个选择器;在IE中它循环整个DOM。可能的话尽量避免使用它。不要在ID前面 加Tag。

  例如,它会因为去循环所有的<div>元素去寻找ID为content的<div>,而导致很慢。

  

  11.缓存jQuery对象

  养成保存jQuery对象到一个变量上(就像上面的例子)的习惯。例如,不要这样做:

  

  提示:使用$前辍表示我们的本地变量是一个jQuery包集。记住,不要在你的应该程序里出现一次以上的jQuery重复的选择操作。 额外提示:延迟存储jQuery对象结果

  如果你想在你的程序的其它地方使用jQuery结果对象(result object(s)),或者你的函数要执行多次,要把它缓存在一个全局范围的对象里。通过定义一个全局容器保存jQuery结果对象,就可以在其它的函数里引用它。如下图

  

  今天先总结那么点。

  优化不是很高深的东西,他是渗透到每个字符的,代码优化,从基础做起!

js优化 前端小白适用的更多相关文章

  1. 前端js优化方案(连续更新)

    最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...

  2. 前端小白想要编写可维护的js

    我是一名前端小白,之前没写过多少代码,心里没有代码质量这个概念,人人都说代码是团队的产物,应该将代码写规范,但是我对具体什么样的代码是可维护的是茫然的. 我没写过多少代码,本来好多东西就不咋会,每次给 ...

  3. 前端js优化方案(一)

    最近在读<高性能javascript>,在这里记录一下读后的一些感受,顺便加上自己的一些理解,如果有兴趣的话可以关注的我的博客http://www.bloggeng.com/,我会不定期发 ...

  4. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  5. 前端小白webpack学习(一)

    俗话说得好,好记性不如烂笔头. 之前就在学习中看过webpack的教程,然而一段时间没用,火速的忘光了.写这篇博文,做个总结,也让自己以后有个地方回顾. 看webpack之前,我先去看了一下官方文档, ...

  6. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  7. JS高级前端开发群加群说明及如何晋级

    JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明:   一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...

  8. Web前端小白入门指迷

    前注:这篇文章首发于我自己创办的服务于校园的技术分享 [西邮 Upper -- 004]Web前端小白入门指迷,写得很用心也就发在这里. 大前端之旅 大前端有很多种,Shell 前端,客户端前端,Ap ...

  9. JS高级前端开发群加群说明

    JS高级前端开发群加群说明 *一.文章背景: *二. 高级群: *三. 加入方式: *四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在"前端开发"关键字搜 ...

随机推荐

  1. Redis数据结构之quicklist

    本文及后续文章,Redis版本均是v3.2.8 我们在使用Redis对外暴露的list数据结构时,给我们带来极大的便利性.其底层实现所依赖的内部数据结构就是quicklist. 我们先来回忆下list ...

  2. SOUI taobao SVN目录结构说明

  3. gitLib操作笔录《一》:创建分支,切换分支,提交分支到远程,以及基本代码clone与更新提交到远程操作指令

    git 操作经验注:master表示的是主线,origin 表示远程源 创建分支:git checkout -b < branch_name >或 < master >切换分支 ...

  4. Linux环境搭建 | 手把手教你如何安装CentOS7虚拟机

    centos 下载地址: 可以去官网下载最新版本:https://www.centos.org/download/ 以下针对各个版本的ISO镜像文件,进行一一说明: CentOS-7.0-x86_64 ...

  5. vue.cli脚手架初次使用图文教程

    vue-cli作用 vue-cli作为vue的脚手架,可以帮助我们在实际开发中自动生成vue.js的模板工程. vue-cli使用 !!前提:需要vue和webpack 安装全局vue-cli npm ...

  6. ETL测试教程

    在我们了解ETL测试之前,先了解有关商业智能和数据仓库的重要性. 让我们开始吧 - 什么是BI? 商业智能是收集原始数据或业务数据并将其转化为有用和更有意义的信息的过程. 原始数据是一个组织每日事务的 ...

  7. 第八篇 Flask配置

    Flask 是一个非常灵活且小而精的web框架 , 那么灵活性从什么地方体现呢? 列如  Flask配置,这个东西怎么用呢? 它能给我们带来怎么样的方便呢? app配置 首先展示一下: from fl ...

  8. [CF542A]Place Your Ad Here

    [CF542A]Place Your Ad Here 题目大意: 有\(n(n\le2\times10^5)\)个广告和\(m(m\le2\times10^5)\)个电视台,第\(i\)个广告只能在\ ...

  9. Java虚拟机一 运行时数据区(栈、堆、方法区等)

    Java虚拟机的内存管理主要分两点:内存分配以及内存回收.· 一.内存分配图: 注: 所占区域的大小与实际的内存大小比例并无直接关系. 解读: 1.如图,分成两种颜色的内存区域,其中蓝色的是线程隔离的 ...

  10. 更改checkbox样式css

    checkbox {  width: 20px; height: 20px;  background-color: #d6bfa6; border: #d6bfa6; -webkit-border-r ...