首頁  >  文章  >  web前端  >  HTML5中一些可以優化的細節介紹

HTML5中一些可以優化的細節介紹

不言
不言轉載
2018-10-29 16:20:093246瀏覽

這篇文章帶給大家的內容是關於HTML5中一些可以優化的細節介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

介紹一些最近整理的最佳化細節。圖片壓縮什麼的就不說了,這是優化必須做的。今天就說一下大家寫程式碼時可以培養的優化的細節點。

  • 不濫用float。不濫用web字體。

Float渲染時計算量比較大,並且會脫標、塌陷。我們可以用flex佈局來代替。 web字體引入需要不小的消耗,最好跟設計提一下不要太多。

  • css中避免多餘的樣式設定。

color、font、line-height等都是可以繼承的,所以他們的子元素如果屬性一樣就要重複寫了,特別是font-family。

  • 複雜的一個方法,可以快取函數的回傳值。

function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
        var hit = cache[str];
        return hit || (cache[str] = fn(str))
    })
};
var fk = function (str) {
  return str.charAt(0).toUpperCase() + str.slice(1)
}
var cacheFk = cached(fk)
// 1 step
cacheFk('ui') 
//2 step
cacheFk('ui')

這是我看vue原始碼時發現的一段程式碼,作用就是可以快取一個複雜函數的值,如果參數一樣就不重複計算。但這裡要注意的是,這個快取函數是透過閉包來做的,所以要做一些權衡。

  • 盡量減少layout。

// 触发两次 layout
var newWidth = p.offsetWidth + 50;
p.style.width = newWidth + 'px';
var newHeight = p.offsetHeight + 50;
p.style.height = newHeight + 'px';

// 只触发一次 layout
var newWidth = p.offsetWidth + 50;
var newHeight = p.offsetHeight + 50;
p.style.width = newWidth + 'px';
p.style.height = newHeight + 'px';

所有可觸發layout的操作都會被暫時放入layout-queue 中,等到必須更新的時候,再計算整個隊列中所有操作影響的結果,如此就可只進行一次的layout,從而提升效能。

動畫元素最好脫標,不影響其他模組。這樣也是為了不影響其他元素。

  • transform代替position。

做一些css位移效果,最好用transform而不要用定位。我剛入門的時候用position做動畫卡的一匹~~~

  • 選擇dom元素使用id,但不要為設定css而定義id。

如果用id選擇器,就不要加其他class約束。定義過多id會使重用性降低,維護更困難,所以css中不建議多用id。

  • 多次使用length的時候,要用變數儲存。

var len = dom.length;
for(var i = 0;i < len;i++){};

這樣好處就是每次循環,不用都計算dom的長度了。

  • requestAnimationFrame取代setTimeout

var start = null;
var element = document.getElementById(&#39;SomeElementYouWantToAnimate&#39;);
element.style.position = &#39;absolute&#39;;

function step(timestamp) {
  if (!start) start = timestamp;
  var progress = timestamp - start;
  element.style.left = Math.min(progress / 10, 200) + &#39;px&#39;;
  if (progress < 2000) {
    window.requestAnimationFrame(step);
  }
}

window.requestAnimationFrame(step);
//window.requestAnimationFrame(callback);
返回值是一个 long 整数,请求 ID ,是回调列表中唯一的标识。是个非零值,没别的意义。你可以传这个值给 window.cancelAnimationFrame() 以取消回调函数。

requestAnimationFrame就是不用設定時間的定時器,每1/60s執行一次,這是根據瀏覽器刷新幀數來定的。但兼容是個問題,用的話需要寫好兼容。

  • 如果可以,盡量避免全域查找。

//dom = document.querySelector("#id");
function test() {
    dom = document.querySelector("#id");
}

例如上面的,如果只做test內使用dom 就不要在全域定義,因為執行的時候會現在test函數內部作用域查找,速度會快。

  • 除非不知道遍歷的長度或遍歷物件不要用for in

    function t1(){        //20ms
        var i = 0;
       for(item in anObj) {
           i++
       }
       if( i === 100000){
           console.log(&#39;for in ok&#39;)
       }
    }
    function t2(){     //4ms
        var len = anObj.length;
        var i = 0;
        for(var i = 0 ;i < len;i++){
            i++
        }
        if( i === 100000){
            console.log(&#39;for ok&#39;)
        }
    }

這是我自己試驗循環100000個元素的數組,得出的執行時間(看程式碼)。所以最好別用,一般實際上也不會用到遍歷物件。如果真有特殊狀況遍歷對象,也要注意 ! ! !遍歷出來的東西是不是自己。以為for in是會遍歷其原型鏈的。

  • 骨架螢幕

這個是增強使用者體驗,類似增強版loading。有自動化生成方案。有興趣可以看看。

  • ios禁止頁面辨識手機號碼。 Android禁止識別郵箱。

<meta name="format-detection" content="telephone=no" />
<meta name="format-detection" content="email=no" />
  • 頭部css 底部js。

這個大家都知道,js會阻塞解析dom,增加白螢幕時間。所以一定要注意啊。

其實優化的細節很多,所以要好好培養自己的程式設計習慣,積少成多,慢慢的不斷積累,程式碼的品質一定就不同了。

#

以上是HTML5中一些可以優化的細節介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除