01
1.1 問題描述
1.2 分析
c.js 以及其依賴的a.js, b.js等 加載非常慢或直接失??;
c.js 以及其依賴邏輯發(fā)生JS異常。
1.3 監(jiān)控實(shí)現(xiàn)
window.addEventListener('error', event => { if (event.srcElement !== window) { console.log('資源加載失敗,加載資源的元素是:', event.srcElement); send(); } else { console.log('JS報(bào)錯(cuò):', event.message); send(); }}, true);window.addEventListener('unhandledrejection', event => { const error = event.reason || {}; console.log('JS報(bào)錯(cuò):', error); send();});
access-control-allow-origin: *
ctx.set('Access-Control-Allow-Origin', '*');
const list = performance.getEntriesByType('resource');const len = list.length;const slowList = [];for (let i = 0; i < len; i++) { const timing = list[i]; // 大于1s if (timing.duration > 1000) { slowList.push(timing); }}send(slowList);
// timing.name就是資源地址,適合const img = document.body.querySelector('img[src="' + timing.name + '"]');const xpath = getxpath(img);
1.4 數(shù)據(jù)分析
1.5 總結(jié)
02
2.1 含義
2.2 屬性值
2.3 基本特性
const KEY = '_tbv_z_index_';function initZIndex$() { return (window[KEY] = 10000);}// 初始化,只能被調(diào)用一次function once(fn) { const flag = true; return function () { if (flag) { flag = false; const args = Array.prototype.slice.call(arguments, 0); fn.apply(args); } };}const initZIndex = once(initZIndex$);// 外部調(diào)用&支持重置function zIndex$(zIndex) { if (zIndex) { return (window[KEY] = zIndex); } return (window[KEY] += 1);}// 組件mount時(shí)觸發(fā)+1const zIndex = zIndex$();
03
CSS3 transform 屬性對 position 的影響
CSS3中引入了transform,定義了在二維或三維空間中元素的旋轉(zhuǎn)、縮放、平移等行為,還能利用合成層原理開啟GPU加速,提升頁面動(dòng)畫的流暢度。然而transform也不是「省油的燈」(并沒有說它不好的意思,我就很喜歡它),增強(qiáng)了頁面交互效果的同時(shí)它也有一些「副作用」容易讓人踩坑。
position: fixed 實(shí)現(xiàn)了固定定位的效果,元素不追隨滾動(dòng)條進(jìn)行滾動(dòng),普通元素的overflow屬性也無法對其進(jìn)行裁剪,因此在一些需要固定頭部、固定懸浮按鈕的場景中十分好用。
但fixed遇上transform時(shí)表現(xiàn)的就不再那么「強(qiáng)硬」,反而退化成了position: absolute的效果。在外層沒有transform影響時(shí),固定定位元素的包含塊是根元素,可以近似認(rèn)為是元素,因此fixed元素可以實(shí)現(xiàn)相對視口定位的效果。而當(dāng)元素設(shè)置了transform時(shí),便會創(chuàng)建一個(gè)新的包含塊(containing block),如果該元素的內(nèi)部有元素設(shè)置了fixed定位,那么該fixed元素的包含塊便不再是根元素,而變成了被設(shè)置了transform的元素。如果在開發(fā)過程中發(fā)現(xiàn)設(shè)置了position:fixed的元素隨著頁面滾動(dòng)了,就可以看下fixed的元素外層是否有元素設(shè)置了transfrom。
除了包含塊之外,transform還會生成新的層疊上下文(stack context),使得元素內(nèi)部和外部的z-index相互獨(dú)立,出現(xiàn)低z-index元素層級比高z-index元素還高的情況: