枫之谷

这个人很懒,但还是想留下些什么东西。

Web Worker 介绍

众所周知,JavaScript 这门语言的一大特点就是单线程,即同一时间只能同步处理一件事情,这也是这门语言衍生出的 nodeJS 被后端开发诟病的的一点。

然而,JavaScript 在设计之初,其实是故意被设计成单线程语言的,这是由于它当时的主要用途的决定的。

JavaScript 最初的设计初衷是完成页面与用户的交互,操作 DOM 或者 BOM 元素,此时如果一味地追求效率使用多线程的话,会带来资源抢占,数据同步等等问题,因此必须规定,同一时间只有一个线程能直接操作页面元素,以保证系统的稳定性以及安全性。

尽管如此,但是 JavaScript 并不是只能线性处理任务。JS 拥有消息队列和事件循环机制,通过异步处理消息的能力来实现并发。在高 I/O 型并发事务处理的过程中,由于不需要手动生成与销毁线程以及占用额外管理线程的空间,性能表现及为优异。因此,nodeJS 作为 JavaScript 在服务端的探索者,在处理高并发网络请求的优势极为明显。

尽管 JavaScript 通过异步机制完美解决了高 I/O 性能的问题,但 JavaScript 单线程执行的本质还是没有变的。因此缺点就显而易见了,那就是处理 CPU 密集型的事务时没有办法充分调动现代多核心多线程机器的运算资源。

在现代大型前端项目中,随着代码的复杂程度越来越高,本地的计算型事务也在变得繁重,而运行在单线程下 JavaScript 项目必定会忙于处理计算而无暇顾及用户接下来的频繁操作,造成卡顿等不太好的用户体验,更严重的情况是,当计算型事务过多时还有可能因为资源被占满带来网页无响应的卡死现象。因此,Web 项目的本地多线程运算能力势在必行,由此,Web Worker 应运而生了。

阅读全文 »

React16.8 迎来了大众期盼已久的函数式编程利器:useHook特性。它能大大增强函数式组件的能力,使得立即执行的、没有生命周期与 state 等等类组件特性的函数式组件拥有相同的能力。

useHook的原理实际上是利用了 JavaScript 的闭包机制,因此在多次执行函数的同时记住一些状态。

useHook拥有多种函数,我们也可以自定义自己的 hook。在这里主要来说说其中最常用的几种,简述他们的大致原理,以及使用时的注意事项。

阅读全文 »

为什么要变更生命周期

因为 React16 框架使用了全新的Fiber架构,这其中有一个特性叫做async rendering,render 过程可中断,因此,render 函数之前的所有生命周期函数都有可能被多次执行,如果在这些函数中存在异步请求的话将会造成许多无用的请求被调用。

涉及到的生命周期函数一共有 4 个:

componentWillMount

componentWillReceiveProps

shouldComponentUpdate

componentWillUpdate

阅读全文 »

了解设计模式是学习一切软件架构设计的基础,大到一个项目的整体框架设计,小到一个功能函数的优化,都有着重要意义。《代码大全》中将设计模式共分为了 23 类,分别为: 创建型模式(5 种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7 种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11 种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 接下来我将针对其中常用的几种设计模式进行解读与实现,供大家参考。

阅读全文 »

了解设计模式是学习一切软件架构设计的基础,大到一个项目的整体框架设计,小到一个功能函数的优化,都有着重要意义。《代码大全》中将设计模式共分为了 23 类,分别为: 创建型模式(5 种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7 种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式(11 种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 接下来我将针对其中常用的几种设计模式进行解读与实现,供大家参考。

阅读全文 »