js笔记

作者: Joah_l | 来源:发表于2019-09-29 11:57 被阅读0次

    Javascript 事件循环:

      1. js解析方法时,将同步任务排队到执行栈中,异步任务排队到事件队列中。
      1. 事件队列分为:
        • 宏任务:setTimeoutsetIntervalsetImmediateI/OUI交互事件
        • 微任务:process.nextTickPromise.then
      1. 浏览器环境中执行方法时,先将执行栈中的任务清空,再将微任务推到执行栈中并清空,
        之后检查是否存在宏任务,若存在则取出一个宏任务,执行完成检查是否有微任务,
      1. Event Loop在浏览器与node环境中的区别:
      • 浏览器环境每次执行一个宏任务,再去检查微任务
      • node会清空当前所处阶段的队列,即执行所有task,再去检查微任务

    table 布局, float + margin; inline-block ; flex;

    clip-path: 裁剪容器, + background 可以做到图片的裁剪, + svg 实现容器的裁剪


    3D-transfrom : rotate,
    关键帧中的 steps 属性, 定义关键帧之间是否存在补间动画;


    视频直播技术:

    • video标签: controlslist 属性控制播放控件的显示
    • 制作直播源: Nginx + ffmpeg(推流)制作直播源, 使用 rtmp 的协议 和 hls 的模块
    • h5: video.js ; hls.js (小巧的 hls协议的直播 和 点播 ); flv.js(flv 开源的播发器, flv 协议) 三个框架; rtmp 协议不常用在 h5 中;

    • 1. 我们看一个 __proto__ 和 prototype 这两者之间的关系:

    每一个 js 对象一定对应一个原型对象, 并从原型对象继承属性和方法, 那么既然存在一个原型对象,

    • 2 那么对象和它怎么对应呢?

    对象__proto__属性的值就是它所对应的原型对象:

    ```js
      var a = {}  a.__proto__ === Object.prototype  // a.toString === a.__proto__.toString 
    ```
    
    • prototype 属性:

      • 只有函数才有 prototype 属性; 不是每一个对象都存在__proto__ 属性来标识自己所继承的原型,
      • js 中的函数是一等公民, 使用函数来模拟类,但创建函数时, js 会自动为这个函数创建prototype属性(是一个对象); 值是一个有constructor 属性的值就是函数本身的对象, 不是空对象, 那么我们要是使用new关键字, 那么这个时候, 这个时候, js 会帮你创建这个构造函数的对象, 实例继承构造函数prototype的所有属性和方法, 实例通过设置自己的__proto__指向构造函数的prototype来实现这种继承
    • fn (function) ===> fn.prototype => {contractor: fn() 其实就是自身fn 这个函数; }

    • f = new fn() >> f 是一个对象 typeof ==> "object" f.__proto__ === fn.prototype 从而实现了继承;

    那么也就是说 一个对象的__proto__属性指向谁, 就继承了谁;

    • isPrototypeOf 这个实际上判断两个对象是否有原型链的关联

    • instanceof只能说明 这个对象是否在原型链中, 不能说明是直接继承关系

    • IndexDB

      • 是一种事物型数据库,NoSql数据库,使用Js对象存储数据,
      • 存储类型丰富,可实现高级查询,可在 Web Server 中使用,无存储空间限制,

    preloadprefetch

    • prefetch 是告诉浏览器下一个页面可能需要加载的资源, 不是当前的页面,这种方式是加速下一个页面的加载速度,浏览器不一定会加载这个资源; 这个属性是link标签的rel属性值,

    • preload 是告诉浏览器必定需要加载的资源; as属性, 浏览器可以设置正确的资源加载的优先级, 这个方式可以确保资源根据其重要性来依次加载, 所以preload不会影响重要的资源的加载, 又不会让次要的资源影响其自身的加载, 浏览器会根据as的值发送适当的Accept头部信息,

    • preload 不会阻塞windowonload事件, 那么对于跨域的文件 需要加上属性crossorigin属性

    • 在 Vue 的 ssr 的页面中,

      • 首页的资源均需要使用preload
      • 而对应的路由则需要使用 prefetch

      使用 preload 和 prefetch 的逻辑可能不是写到一起, 这样会造成双倍的网络请求

    • DNSprefetch , 当浏览器需要解析域名,这个解析的过程中,浏览器缓存, 系统缓存, 路由器缓存, isp 缓存等,
      这个属性是DNS 预解析就是根据浏览器定义的规则, 提前解析之后可能遇到的域名, 这样可能缩短 DNS 解析时间,

    hasOwnProperty 是js中唯一可以判断一个属性定义在对象本身而不是继承原型链的方法,主要用于判断某个对象中是否有某个属性,返回值为布尔值

    Document 对象:

    • 和网页请求相关的三个属性:URLdomainreferrer
    • URL: 保存当前页面的完整的url链接
    • domain: 只包含当前页面的域名
    • referrer: 保存着链接到当前页面的url链接

    currentTarget 始终是监听事件者,而 target 是事件的真正发出者。
    事件冒泡阶段,e.currenttargete.target是不相等的,但是在事件的目标阶段,e.currenttargete.target是相等的。

    // 判断一个元素是否出现在窗口中:
    // Determine if an element is in the visible viewport
    function isInViewport(element) {
      var rect = element.getBoundingClientRect();
      var html = document.documentElement;
      return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || html.clientHeight) &&
        rect.right <= (window.innerWidth || html.clientWidth)
      );
    }
    

    相关文章

      网友评论

          本文标题:js笔记

          本文链接:https://www.haomeiwen.com/subject/kvljuctx.html