codingmeup

Results 172 comments of codingmeup

### Vue 双向绑定是如何实现的 - 事件机制(pub/sub):我们通过特定的方法修改数据,例如Store.set('key', 'value'),set方法修改数据的同时触发一个事件,告诉view数据发生了更改,view立即从新从store拉取数据。这类似于Flux中View对于Store数据的响应,只不过通过某种方法或者directive将这种机制封装起来了。这种机制的弱势在于你没法用传统的方式等号=对数据进行赋值。 - 轮询(pull/dirty check):这个方式就更加简单了,数据的消费方不断的检测数据有没有修改。当然不是无时无刻的进行检测,而是在input事件或者change事件的时候进行检测。Angular 1.0使用的就是这种机制。我个人倾向于把这种方式称为轮询而不是脏检查 - **Javascript中,我们可以给对象中的值定义访问器** Object天生的支持的属性访问器**defineProperty**。 那么接下来当你每次想访问data中key字段时,无论是取值data.key还是赋值data.key = 'Hi',都会有打印信息。这也意味着,我们能够在用户执行普通的赋值和取值操作时,做一些事情,例如通知数据的消费者数据发生了更改,让它们重新编译模板。这也就是Vue.js双向绑定的思路。 当然这只是双向数据绑定的一个环节,但是是最核心的环节,其他还包括如何添加订阅者,如何编译模板 [第 29 题:聊聊 Vue 的双向数据绑定,Model 如何改变 View,View 又是如何改变 Model 的](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/34) **利用Proxy实现一个简化版的MVVM** 参照vue的响应式设计模式,将数据劫持部分的`Obejct.defineProperty`替换为`Proxy`即可,其他部分,如compile(编译器没有实现,用写好的html模拟已完成编译),watcher,dep,事件监听等基本保持不变,简单实现代码如下: ```...

### React Fiber 纤维比Thread更细 - React Fiber是对核心算法的一次重新实现, 现有React中,更新过程是同步的,这可能会导致性能问题。React决定要加载或者更新组件树时,会做很多事,比如调用各个组件的生命周期函数,计算和比对Virtual DOM,最后更新DOM树,这整个过程是同步进行的,也就是说只要一个加载或者更新过程开始,但是,当组件树比较庞大的时候,问题就来了。 - 破解JavaScript中同步操作时间过长的方法其实很简单——分片。 维护每一个分片的数据结构,就是Fiber。

### VDOM - 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中 当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异 把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了 - Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个缓存。可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存:既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存。CPU(JS)只操作内存(Virtual DOM),最后的时候再把变更写入硬盘(DOM)。 https://github.com/livoras/blog/issues/13

![_20171115174855](https://user-images.githubusercontent.com/10704616/32829595-7e40b4b0-ca2d-11e7-9d4f-0798c9b249f6.png) ### React-Redux 实现 - connect核心就是通过高阶component和context把store提供给原始的component。 - 第一、分配getState中的状态。第二、通过bindActionCreators把action和dispatch绑定在一起。第三、将上面两步合并到一个props中,注入给组件。第四、将我们的组件作为子组件,封装一层,最后返回一个新组件 - Provider从调用方法来看,就是一个React组件,接收一个参数:store。

Vue React 生命周期 ![image](http://upload-images.jianshu.io/upload_images/1814354-4bf62e54553a32b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700) ![image](https://img.zhimengzhe.com/d/file/p/2017-03-05/6e69817f1e18ae5389320cc5c00641b4.jpg)

[传统的DIFF 和 React Diff Vue Diff](https://www.jianshu.com/p/398e63dc1969)

[第 29 题:聊聊 Vue 的双向数据绑定,Model 如何改变 View,View 又是如何改变 Model 的](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/34)

[第 32 题:Virtual DOM 真的比操作原生 DOM 快吗?谈谈你的想法](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/47) 不要天真地以为 Virtual DOM 就是快,diff 不是免费的,batching 么 MVVM 也能做,而且最终 patch 的时候还不是要用原生 API。在我看来 Virtual DOM 真正的价值从来都不是性能,而是它 1. 为函数式的 UI 编程方式打开了大门; 2. 可以渲染到 DOM 以外的 backend,比如...

### 2. 它能解决我们什么问题?它是通过什么方式来解决我们的问题? #### 能够为 CSS 提供额外的功能; #### 通过在 PostCSS 这个平台上,我们能够开发一些插件,来处理我们的CSS,比如热门的:autoprefixer

### 3、优势及SASS LESS STYLUS比较 #### 比如,我们用 SASS 来处理 box-shadow 的前缀,我们需要这样写: ```js /* CSS3 box-shadow */ @mixin box-shadow($top, $left, $blur, $size, $color, $inset: false) { @if $inset { -webkit-box-shadow: inset $top...