Angular和Vue的双向数据绑定实现的原理? 如果要你来实现,你会怎样实现?

还好之前对底层还是有所了解,看过源码以及一些博客,所以基本答了出来。
Angular的实现: AngularJS 采用“脏值检测”的方式,数据发生变更后,对于所有的数据和视图的绑定关系进行一次检测,识别是否有数据发生了改变,有变化进行处理,可能进一步引发其他数据的改变,所以这个过程可能会循环几次,一直到不再有数据变化发生后,将变更的数据发送到视图,更新页面展现。
只有当改变$scope的值、使用内置的$interval、$timeout的时候,才会进行“脏检测”。
如果是手动对 ViewModel 的数据进行变更,为确保变更同步到视图,需要手动触发一次“脏值检测”。
Vue的实现:核心就是数据劫持+发布/订阅模式,VueJS 使用 ES5 提供的 Object.defineProperty() 方法,监控对数据的操作,从而可以自动触发数据同步。并且,由于是在不同的数据上触发同步,可以精确的将变更发送给绑定的视图,而不是对所有的数据都执行一次检测。

webpack打包后文件体积过大怎么办?

很多方法:异步加载模块(代码分割);提取第三方库(使用cdn或者vender);代码压缩;去除不必要的插件;去除devtool选项等等。

react特点,react组件通信

React组件性能优化?immutable.js实现原理?

使用PureRenderMixin、shouldComponentUpdate来避免不必要的虚拟DOM diff,在render内部优化虚拟DOM的diff速度,以及让diff结果最小化。使用immutable.js解决复杂数据diff、clone等问题。
immutable.js实现原理:持久化数据结构,也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了结构共享,即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。

有没有用过Redux,Redux-promise和Redux-trunk是用来干嘛的,区别是什么?

明显是处理异步操作的啊,前者是让Redux的dispatch方法的参数支持promise,后者是支持函数,而且还是一个异步函数。异步函数里面要dispatch两次,分别表示异步请求开始和异步请求完成。

Promise.all和Promise.race的区别?

Promise.all 把多个promise实例当成一个promise实例,当这些实例的状态都发生改变时才会返回一个新的promise实例,才会执行then方法。
Promise.race 只要该数组中的 Promise 对象的状态发生变化(无论是resolve还是reject)该方法都会返回。

只用CSS怎样实现标签页的切换效果?

利用锚点结合CSS的target伪类就可以了。

http2.0的优势?

当时大概地讲了一下意思,不过没答完全。后了又复习了下:
(1)采用二进制格式传输数据,而非 http1.1 的文本格式,二进制格式在协议的解析和优化扩展上带来更多的优势和可能
(2)对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量,而 http1.1 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源,头压缩能够很好的解决该问题
(3)多路复用,就是多个请求都是通过一个 TCP 连接并发完成,http1.1 虽然通过pipeline也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 http2.0做到了真正的并发请求,同时,流还支持优先级和流量控制
(4)Server Push,服务端能够更快的把资源推送给客户端,例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML再发送这些请求,当客户端需要的时候,它已经在客户端了。

async await 内部机制 https://www.v2ex.com/t/383768

Promise 内部实现机制

results matching ""

    No results matching ""