1. 程式人生 > >JS一些碎知識點

JS一些碎知識點

pan 向上取整 index 寬高 字符 img 可能 劃線 比較

一些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服務提供商能夠代表他們客戶,即內容供應商,向最終用戶提供盡可能好的體驗,而這些用戶是不能容忍請求響應時間有任何延遲的。

JS一些碎知識點