• 首页

  • 归档
  • 鬼知道多少人在线
k-on
k-on

大好き

yui

梦里不知身是客,荒唐二十有二载

04月
05
少女日记

清明游乐记

发表于 2019-04-05 • 分类于 少女日记

今天的风儿甚是喧嚣,与友人约会,为其庆祝新的工作,酒足饭饱之际,意兴阑珊之余…

阅读全文 »
03月
31
孤独的观测者

前端动效相关

发表于 2019-03-31 • 分类于 孤独的观测者

animation 属性中的 steps 功能符

近日因夕芷宝宝连续 4 个月未投稿,遂潜入其 QQ 群,潜水 N 天后,手贱点入了直播间,看到礼物那边有动画,好奇心一上来,就打开了 F12.

让我又回忆起了这种实现动画的方式,没有补间动画的帧动画。

阅读全文 »
03月
24
孤独的观测者

我们可以做哪些优化呢?

发表于 2019-03-24 • 分类于 孤独的观测者

静态资源优化

将静态资源按版本缓存到 ServiceWorker 或者 locaStorage

不常更新的第三方依赖包,用 dllPlugin 抽成多个模块,每个保持 200kb 以下,放到 CDN。

接口请求优化

串行的接口、大量并行的接口请求都会拖慢首屏的渲染。

解决方法:服务端渲染首页 或者 构建 BFF 层,为接口消费方提供服务。

react 性能优化

  • 当父组件 state 变化,导致子组件频繁更新(子组件无需更新的情况)

用 shouldComponentUpdate 生命周期来控制子组件更新,return false 则无需更新

或者直接用 PureComponet。 通过对 props 和 state 的浅比较结果来实现。大多数情况下可以直接使用这个,复杂数据结构时手动控制是否 re-render

PureComponet 一般给无状态组件用,有状态组件自行 shouldComponentUpdate

代码优化

  • 变量访问速度优化
1
2
3
4
5
6
const { a, b } = this.state

let query = {
aaa: a,
bbb: b
}

为什么要从 state 里解构出变量呢?

因为数据访问速度有快慢之分,下面列出几个影响数据访问速度的因素:

  • 字面量与局部变量的访问速度最快,数组元素和对象成员相对较慢
  • 变量从局部作用域到全局作用域的搜索过程越长速度越慢
  • 对象嵌套的越深,读取速度就越慢
  • 对象在原型链中存在的位置越深,找到它的速度就越慢

推荐的做法是缓存对象成员值。将对象成员值缓存到局部变量中会加快访问速度

如果用到 this.state.a 2 次以上,那么解构出 a,就是有意义的,当然了,对象过于庞大可能就不适合这样做了。

关于 react 组件中事件绑定 this 的方式与性能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 方法1 构造函数中bind
class Toggle extends React.Component {
constructor(props) {
super(props)
this.handleClick = this.handleClick.bind(this)
}

handleClick() {}

render() {
return <button onClick={this.handleClick}></button>
}
}

// 方法2 public class fields 语法
class Toggle extends React.Component {
handleClick = () => {
console.log('this is:', this)
}

render() {
return <button onClick={this.handleClick}>Click me</button>
}
}

// 方法3 行内箭头函数或bind
// 此语法问题在于每次渲染 Logging 时都会创建不同的回调函数。在大多数情况下,这没什么问题,但如果该回调函数作为 prop 传入子组件时,这些组件可能会进行额外的重新渲染。我们通常建议在构造器中绑定或使用 class fields 语法来避免这类性能问题。

class Toggle extends React.Component {
handleClick() {
console.log('this is:', this)
}

render() {
return (
<div>
<button onClick={e => this.handleClick(e)}>Click me</button>
<button onClick={this.handleClick.bind(this)}>Click me</button>
</div>
)
}
}

关于 react list key

一般情况下,直接使用数组的 index 作为 key,这没什么不好的,毕竟,懒得去问后端,你这个 list 里面哪个是具有唯一性的

那什么情况下,我们不能用 index 作为 key 呢,比如,需要对 list 做增删改等操作时(包括排序),如果用 index 作为 key,会导致状态紊乱、性能变差等问题。相关文章

阅读全文 »
03月
24
孤独的观测者

3月例会分享

发表于 2019-03-24 • 分类于 孤独的观测者

迫于需要在周例会上分享 redux , 整理一下相关内容。

恩,按写好的念都没能做到,大脑里一片空白,loser +1

阅读全文 »
03月
11
孤独的观测者

web 小图标处理思考

发表于 2019-03-11 • 分类于 孤独的观测者

之前一直是用 iconfont, 挺好用的,但发现所有上传的图标都能被搜索到,可能会被扣上泄露公司机密的高帽,遂放弃

阅读全文 »
02月
14
少女历练

Dplayer 观后感

发表于 2019-02-14 • 分类于 少女历练

最近研读了 B 站大佬 diygod 为宫园薰创造的 DPlayer,最开始是从第一次提交开始一次提交一次提交地读的,后来,在获得了一定的信息后开始读最新版本。

阅读全文 »
02月
11
少女日记

新的开始

发表于 2019-02-11 • 分类于 少女日记

我是个俗人,说不出什么漂亮话,不会用文字表达想法,也不会讨女孩子喜欢,但,我想改变,我相信在某一条平行的世界线里,一定有一个可以笔下生花的我。

阅读全文 »
123
yui

k-on

目标!武道馆!!

27 日志
6 分类

博客已萌萌哒运行(●'◡'●)ノ♥

很遗憾,此生无缘HTT现场了,君生我未生。

© 2022 k-on

Made with by yui.