javaScript 排雷

易错

页内式注意点script

</body>
     ......
    <script type="text/javascript">
       alert("今天天气很好!");
    </script>
</body>

<script></script>标签中的js代码一半写在文档的尾部;

  • 网页是从上至下加载, 而js代码通常是给标签添加交互(操作元素), 所以需要先加载HTML, 否则如果执行js代码时HTML还未被加载, 那么js代码将无法添加交互(操作元素);
  • HTML页面中出现<script>标签后,就会让页面暂停等待脚本的解析和执行。无论当前脚本是内嵌式还是外链式,页面的下载和渲染都必须停下来等待脚本的执行完成才能继续。所以如果把js代码如果写在head中, 那么js代码执行完毕之前后续网页无法被加载。

性能

外链式注意点

外链式的script代码块中不能编写js代码, 即便写了也不会执行

  <script type="text/javascript" src="index.js">
        alert("今天天气很好!"); // 不会被执行
   </script>

由于每次加载外链式的js文件都会发送一次请求, 这样非常消耗性能, 所以在企业开发中推荐将多个JS文件打包成为一个JS文件,以提升网页的性能和加载速度。

分号引发的问题

编写Javascript注意语法规范,一行代码结束后必须在代码最后加上;
如果不写分号,浏览器会自动添加,但是会消耗一些系统资源;
此外,容易加错分号,所以在开发中分号必须要写。

list引发的血案

某些中我们使用索引(+1)作为key,没有什么问题。接下我们看看什么情况会出事。

假设我们的的列表数据从

[
    {id:2,text:'b'},
    {id:3,text:'c'},
    {id:5,text:'e'}
]

变成了

[
    {id:1,text:'a'},
    {id:2,text:'b'},
    {id:3,text:'c'},
    {id:4,text:'d'}
]

仍然使用索引作为key,那么渲染出来的应该是

旧的

<li key={1}>b</li>
<li key={2}>c</li>
<li key={3}>e</li>

新的

<li key={1}>a</li>
<li key={2}>b</li>
<li key={3}>c</li>
<li key={4}>d</li>

这种情况下的流程:

对比第一项key都是1,但是内容变了,替换文本
对比第二项key都是2,但是内容变了,替换文本
对比第三项key都是3,但是内容变了,替换文本
第四项key为4是新的,新增
这个和我们想的就有区别了,因为我们只是想做两步操作,即替换第1个和添加第4个。而现在做了四步操作。

也许这个例子显得没有那么糟糕,但是想象一下,如果是在一个50项的列表中插入1个新的到头部,那么后面的50项将都会进行dom更新渲染,如果每一项内容是复杂的组件,那么代价更加高昂,而我们其实只是想在第一个元素前插入一条。

那么如果解决上面的问题呢,其实很简单,我们的列表数据都有唯一的id值,而实际开发中我们列表中一般都会存在这样的唯一值,我们只需要把它复制给key即可。

那么我们的列表会变成这样

旧的

<li key={2}>b</li>
<li key={3}>c</li>
<li key={5}>e</li>

新的

<li key={1}>a</li>
<li key={2}>b</li>
<li key={3}>c</li>
<li key={4}>d</li>

这种情况下的流程:

第一项key为1是新的,新增,节点变成4个
对比第二项key都是2,内容不变,不处理
对比第三项key都是3,内容不变,不处理
第四项key为4,旧的是5,替换节点

将列表和列表项单独写成纯组件

为什么?
我们可能已经习惯这样写列表

render(){
    render (
        <ul>
            {this.state.list.map(item=><li key={item.id}>{item.text}<li>)}
        </ul>
    )
}

在大多数情况下,这样写没有什么问题,reactjs执行速度很快,但是有些情况下,这样写可能成为导致网页卡顿的罪魁祸首。

每当我们改变组件状态的时候,reactjs都会重建当前组件的整个虚拟dom树,也就是说不管你的state.list是否有改变,整个树都会重建,而这个时候列表的渲染是不必要的,当列表过长,组件状态更新频繁,甚至手机性能不佳的情况下,不断的重新创建虚拟dom树很有可能会导致页面帧数下降。

不要在属性上箭头函数

箭头函数很方便,不仅写法简单还能保持this指向父级作用域。

为了维护事件处理函数的this,我们经常在组件中看到它类似这样的使用

<Component onClick={()=>{alert(11)} />

但是这样写会有几个问题

每次render都会重新创建一个新的函数,浏览器创建和回收对象都会有开销,如果是列表,那么每个列表项都会创建和销毁。
因为每次render都是传入新的函数,shouldUpdateComponent浅比较必然不相等,会导致PureComponent组件失去应有效果。
正确的做法
如果使用了transform-class-properties

handleClick = ()=>{
    alert(1)
}
<Component onClick={this.handleClick} />

或者

constructor(){
    super(...arguments)
    this.handleClick = this.handleClick.bind(this)
}

handleClick = ()=>{
    alert(1)
}

摘抄或者引用以下文章:
作者:撩课_叶建华
链接://www.greatytc.com/p/4d7bff7a9145
作者:yqz0203
链接:https://segmentfault.com/a/1190000011191890

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,486评论 1 45
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,105评论 4 62
  • 银杏落的时候,紫藤开的时候,我能够认真地听一听雨声的时候……都蛮高兴的。从城东到城北,从城北到城西,十一月过家家一...
    鹿七粥阅读 222评论 1 2
  • 二师兄卖货卖服务的介绍标题
    张楚亮阅读 203评论 0 0