• JS一些碎知识点


    一些js基本知识点

    Doctype 浏览器渲染模式

    • 渲染模式发展历史

    在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈)。随着WEB的发展,兼容性问题的解决越来越显得迫切,随即,各浏览器厂商发布了按照标准模式(遵循各厂商制定的统一标准)工作的浏览器,比如IE6就是其中之一。但是考虑到以前建设的网站并不支持标准模式,所以各浏览器在加入标准模式的同时也保留了混杂模式(即以前那种未按照统一标准工作的模式,也叫怪异模式)。

    '

    • 标准模式(不兼容之前的语法)

      • html 4.0

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

      • xhtml 1.0

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

      • html5

        <!DOCTYPE html>

      • P.S. 细心的你可以看出随着html版本的发展,标准模式的写法也在变化着

    • 怪异模式 / 混杂模式

      • 很简单,将开头标准模式的声明去掉即可

      • IE6的怪异模式,有个新的盒模型,border和padding都属于宽高的范畴

    label

    • label中有一个for属性,可以将该label和一个input绑定,当我们点击该label的文字时,input也回聚焦

    • for 属性 — >  js中表示htmlFor

    <label for="input">User:</label>
        <input id="input" type="text" name="user" value="" placeholder="请输入用户名" />

    图片预加载

    • 假设这样一种需求,在文档加载完毕后的某个时刻,可能几秒后,可能几分钟后,也可能半小时后,我们要通过js动态插入一张10M的大图片?

    • 会产生这样的问题?图片太大,网速又不快,所以图片加载需要很长时间,所以导致页面上的那个图片只呈现了部分,甚至没有呈现,一片空白,形成了极其差的用户体验。

    • 如何解决呢?那就是图片预加载,在图片还没动态插入之前,我们就创造img节点,并为之设置src,在设置src后,浏览器就会开始下载src上的资源,然后在我们需要的时候即可瞬间插入文档

    • 启发?在请求的资源需要加载很长时间的情况下,我们可以预加载,在需要使用的时候,直接用就可以,极大提高了用户体验

    封装 getElementsByClassName(); IE8及以下不兼容

    • 类名、id名不像js标识符命名那么规范,尽量别用特殊字符就行

    • js标识符规范,由字母,数字,下划线,$ 组成,但不能以数字开头

    // 封装js中的getElenmentsByClassName();
        Document.prototype.getByClassName = function (className) {
            var allEle = document.getElementsByTagName('*');
            var retArr = {
                length: 0,
                push: Array.prototype.push
            };
            var len = allEle.length;
            var regBlank = /^s|s$/g;
            for(var i = 0; i < len; i++) {
                var strForClass = allEle[i].className
                    allEle[i].className 
                    && allEle[i].className.replace(regBlank, '').indexOf(className) !== -1 
                    && retArr.push(allEle[i]);
            }
            return retArr;
        }
     

    Math对象

    • Math.sqrt()

      • 开方
    • Math.floor()

      • 向下取整
    • Math .ceil()

      • 向上取整
    • Math.random()

      • Math.random()  (0, 1)

      • eg: (5, 15) -》 Math.random() * 10 + 5

      • 先看区间 15 - 5 = 10

      • 再看起始点 5

      • 所以Math.random() * 10 + 5

    文档碎片

    • 每次我们操作dom都会引起Reflow 或 Repaint,所以过多次的dom操作会降低性能

    • 但是我们可以将一些dom操作集合起来再操作dom,可减少Reflow或Repaint

    • 创建文档碎片

      • var frag = document.createDocumentFragment();

      • 该碎片具有正常dom节点的所有方法

     var frag = document.createDocumentFragment();
        var div = document.createElement('div');
        var span = document.createElement('span');
        frag.sppendChild(div);
        frag.appendChild(span);
        document.body.appendChild(frag);

    cdn

    • 基站

    • CDN的全称是Content Delivery Network,即内容分发网络。

    • 原理:

    简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。
    通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),
    它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。
    这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
  • 相关阅读:
    CentOS7.4 + Ambari 2.6.1.5 + HDP 2.6.4.0 安装部署
    分布式业务的异常解决思路
    RPC簡介
    网络I/O模型--07Netty基础
    网络I/O模型--06异步I/O
    网络I/O模型--05多路复用I/O
    网络I/O模型--04非阻塞模式(解除accept()、 read()方法阻塞)的基础上加入多线程技术
    网络I/O模型--03非阻塞模式(ServerSocket与Socket的超时处理)--解除accept()、 read()方法阻塞
    网络I/O模型--02阻塞模式(多线程)
    Android开发(五)——计时器
  • 原文地址:https://www.cnblogs.com/Walker-lyl/p/7454304.html
Copyright © 2020-2023  润新知