• 【前端知识体系-JS相关】虚拟DOM和Diff算法


    1.介绍一下vdom?

    1. virtual dom, 虚拟DOM
    2. 使用JS来模拟DOM结构
    3. DOM变化的对比,放在JS层来做(图灵完备语言),提高效率
    4. DOM操作非常昂贵(消耗性能)

    2.Snabbdom的使用

    var snabbdom = window.snabbdom;
    // 定义patch
    var patch = snabbdom.init([
        snabbdom_class,
        snabbdom_props,
        snabbdom_style,
        snabbdom_eventlisteners
    ])
    
    // 定义h
    var h = snabbdom.h;
    
    var container = document.getElementById('container');
    // 生成vnode
    var vnode = h('ul#list', {}, [
        h('li.item', {}, 'Item 1'),
        h('li.item', {}, 'Item 2'),
    ]);
    
    patch(container, vnode)
    
    
    // 修改DOM内容
    document.getElementById('btn-change').addEventListener('click', function () {
        // 生成newVnode
        var newVnode = h('ul#list', {}, [
            h('li.item', {}, 'Item 1'),
            // DOM节点中不同的地方
            h('li.item', {}, 'Item B'),
            h('li.item', {}, 'Item 3'),
        ]);
        patch(vnode, newVnode)
    })
    

    [!NOTE]
    核心API总结:

    1. h('<标签名称>', { 属性 }, [子元素])
    2. h('<标签名>', {属性}, ‘...’)
    3. patch(container, vnode)
    4. patch(vnode, newNode)

    3.介绍一下diff算法?

    3.1 Diff算法是什么

    1. Linux中: diff 文件1.txt 文件2.txt
    2. Git中: git diff
    3. 在线比对工具

    3.2 去繁就简

    1. diff算法实现非常复杂,实现难度很大,源码量很大
    2. 去繁就简,讲明白核心流程,不关心细节(非常高效的手段)
    3. 面试官也大部分不清楚细节,但是很关系核心流程的实现

    3.3 VDOM为何使用diff算法?

    1. DOM操作是昂贵的,因此要尽量减少DOM的操作
    2. 找出本次DOM必须更新的节点来更新,其他的不更新
    3. 这个找出的过程,就需要使用diff算法(找出两个虚拟DOM的差异)
  • 相关阅读:
    html页面特效代码大全
    ASP.NET中个文件夹功能
    A project with an Output Type of Class Library cannot be started directly
    Chapter10“I/O设备的同步和异步”之I/O设备同步操作
    c c++ 文件操作
    linux find 文件夹下查找字符串
    c c++ sizeof
    c socket编程
    c fcntl函数
    read write 返回值
  • 原文地址:https://www.cnblogs.com/fecommunity/p/11917869.html
Copyright © 2020-2023  润新知