人人碰免费视频-人人碰在线视频-人人妻视频-人人妻在线-人人人人叉-人人人人干-人人人人人-人人骚资源-人人色导航-人人色在线视频

廣西新聞網(wǎng) > 首頁欄目 > 首頁要聞 > 正文

js刷新当前页面(js刷新当前页面白屏)满满干货

2025-10-04 16:57 來源:廣西云-廣西日?qǐng)?bào) 記者 羅莎 楊思悅 通訊員 劉鵬飛 編輯:馮芯然

對(duì)于后臺(tái)開發(fā)來說,記錄日志是一種非常常見的開發(fā)習(xí)慣,通常我們會(huì)使用try...catch代碼塊來主動(dòng)捕獲錯(cuò)誤、對(duì)于每次接口調(diào)用,也會(huì)記錄下每次接口調(diào)用的時(shí)間消耗,以便我們監(jiān)控服務(wù)器接口性能,進(jìn)行問題排查。

js刷新當(dāng)前頁面(js刷新當(dāng)前頁面白屏)滿滿干貨

 

點(diǎn)擊上方藍(lán)字,記得關(guān)注我們!本文5240字,預(yù)計(jì)閱讀需要24分鐘

對(duì)于后臺(tái)開發(fā)來說,記錄日志是一種非常常見的開發(fā)習(xí)慣,通常我們會(huì)使用try...catch代碼塊來主動(dòng)捕獲錯(cuò)誤、對(duì)于每次接口調(diào)用,也會(huì)記錄下每次接口調(diào)用的時(shí)間消耗,以便我們監(jiān)控服務(wù)器接口性能,進(jìn)行問題排查。

剛進(jìn)公司時(shí),在進(jìn)行Node.js的接口開發(fā)時(shí),我不太習(xí)慣每次排查問題都要通過跳板機(jī)登上服務(wù)器看日志,后來慢慢習(xí)慣了這種方式舉個(gè)例子:/** * 獲取列表數(shù)據(jù) * @parma req, res */exports.getList =

asyncfunction (req, res) { //獲取請(qǐng)求參數(shù)const openId = req.session.userinfo.openId; logger.info(`handler getList, user openId is

${ openId}`);try { // 拿到列表數(shù)據(jù)const startTime = newDate().getTime();let res = await ListService.getListFromDB(openId);

logger.info(`handler getList, ListService.getListFromDB cost time ${ newDate().getTime() - startDate}

`);// 對(duì)數(shù)據(jù)處理,返回給前端// ... } catch(error) { logger.error(`handler getList is error, ${ JSON.stringify(error)}

`); }};以下代碼經(jīng)常會(huì)出現(xiàn)在用Node.js的接口中,在接口中會(huì)統(tǒng)計(jì)查詢DB所耗時(shí)間、亦或是統(tǒng)計(jì)RPC服務(wù)調(diào)用所耗時(shí)間,以便監(jiān)測(cè)性能瓶頸,對(duì)性能做優(yōu)化;又或是對(duì)異常使用try ... catch主動(dòng)捕獲,以便隨時(shí)對(duì)問題進(jìn)行回溯、還原問題的場(chǎng)景,進(jìn)行bug的修復(fù)。

而對(duì)于前端來說呢?可以看以下的場(chǎng)景最近在進(jìn)行一個(gè)需求開發(fā)時(shí),偶爾發(fā)現(xiàn)webgl渲染影像失敗的情況,或者說影像會(huì)出現(xiàn)解析失敗的情況,我們可能根本不知道哪張影像會(huì)解析或渲染失敗;又或如最近開發(fā)的另外一個(gè)需求,我們會(huì)做一個(gè)關(guān)于webgl渲染時(shí)間的優(yōu)化和影像預(yù)加載的需求,如果缺乏性能監(jiān)控,該如何統(tǒng)計(jì)所做的渲染優(yōu)化和影像預(yù)加載優(yōu)化的優(yōu)化比例,如何證明自己所做的事情具有價(jià)值呢?可能是通過測(cè)試同學(xué)的黑盒測(cè)試,對(duì)優(yōu)化前后的時(shí)間進(jìn)行錄屏,分析從進(jìn)入頁面到影像渲染完成到底經(jīng)過了多少幀圖像。

這樣的數(shù)據(jù),可能既不準(zhǔn)確、又較為片面,設(shè)想測(cè)試同學(xué)并不是真正的用戶,也無法還原真實(shí)的用戶他們所處的網(wǎng)絡(luò)環(huán)境回過頭來發(fā)現(xiàn),我們的項(xiàng)目,雖然在服務(wù)端層面做好了日志和性能統(tǒng)計(jì),但在前端對(duì)異常的監(jiān)控和性能的統(tǒng)計(jì)。

對(duì)于前端的性能與異常上報(bào)的可行性探索是有必要的異常捕獲方法對(duì)于前端來說,我們需要的異常捕獲無非為以下兩種:接口調(diào)用情況;頁面邏輯是否錯(cuò)誤,例如,用戶進(jìn)入頁面后頁面顯示白屏;對(duì)于接口調(diào)用情況,在前端通常需要上報(bào)客戶端相關(guān)參數(shù),例如:用戶OS與瀏覽器版本、請(qǐng)求參數(shù)(如頁面ID);而對(duì)于頁面邏輯是否錯(cuò)誤問題,通常除了用戶OS與瀏覽器版本外,需要的是報(bào)錯(cuò)的堆棧信息及具體報(bào)錯(cuò)位置。

異常捕獲方法全局捕獲可以通過全局監(jiān)聽異常來捕獲,通過window.onerror或者addEventListener,看以下例子:window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error

) { console.log(errorMessage: + errorMessage); // 異常信息console.log(scriptURI: + scriptURI); // 異常文件路徑

console.log(lineNo: + lineNo); // 異常行號(hào)console.log(columnNo: + columnNo); // 異常列號(hào)console.log(error:

+ error); // 異常堆棧信息// ...// 異常上報(bào)};thrownewError(這是一個(gè)錯(cuò)誤);

通過window.onerror事件,可以得到具體的異常信息、異常文件的URL、異常的行號(hào)與列號(hào)及異常的堆棧信息,再捕獲異常后,統(tǒng)一上報(bào)至我們的日志服務(wù)器亦或是,通過window.addEventListener方法來進(jìn)行異常上報(bào),道理同理:。

window.addEventListener(error, function() { console.log(error);// ...// 異常上報(bào)});thrownewError(這是一個(gè)錯(cuò)誤);

try... catch使用try... catch雖然能夠較好地進(jìn)行異常捕獲,不至于使得頁面由于一處錯(cuò)誤掛掉,但try ... catch捕獲方式顯得過于臃腫,大多代碼使用try ... catch包裹,影響代碼可讀性。

常見問題跨域腳本無法準(zhǔn)確捕獲異常通常情況下,我們會(huì)把靜態(tài)資源,如JavaScript腳本放到專門的靜態(tài)資源服務(wù)器,亦或者CDN,看以下例子:

>// 在index.htmlwindow.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error

) { console.log(errorMessage: + errorMessage); // 異常信息console.log(scriptURI: + scriptURI); // 異常文件路徑

console.log(lineNo: + lineNo); // 異常行號(hào)console.log(columnNo: + columnNo); // 異常列號(hào)console.log(error:

+ error); // 異常堆棧信息// ...// 異常上報(bào) };// error.js

thrownewError(這是一個(gè)錯(cuò)誤);

結(jié)果顯示,跨域之后window.onerror根本捕獲不到正確的異常信息,而是統(tǒng)一返回一個(gè)Script error,解決方案:對(duì)script標(biāo)簽增加一個(gè)crossorigin=”anonymous”,并且服務(wù)器添加Access-Control-Allow-Origin。

sourceMap通常在生產(chǎn)環(huán)境下的代碼是經(jīng)過webpack打包后壓縮混淆的代碼,所以我們可能會(huì)遇到這樣的問題,如圖所示:

我們發(fā)現(xiàn)所有的報(bào)錯(cuò)的代碼行數(shù)都在第一行了,為什么呢?這是因?yàn)樵谏a(chǎn)環(huán)境下,我們的代碼被壓縮成了一行:!function(e){ var n={ };functionr(o){ if(n[o])return n[o].exports;

var t=n[o]={ i:o,l:!1,exports:{ }};return e[o].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=e,r.c=n,r.d=

function(e,n,o){ r.o(e,n)||Object.defineProperty(e,n,{ enumerable:!0,get:o})},r.r=function(e){ "undefined"

!=typeofSymbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{ value:"Module"}),Object

.defineProperty(e,"__esModule",{ value:!0})},r.t=function(e,n){ if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"

==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default"

,{ enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)r.d(o,t,function(n){ return e[n]}.bind(

null,t));return o},r.n=function(e){ var n=e&&e.__esModule?function(){ return e.default}:function(){ return

 e};return r.d(n,"a",n),n},r.o=function(e,n){ returnObject.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=

0)}([function(e,n){ throwwindow.onerror=function(e,n,r,o,t){ console.log("errorMessage: "+e),console.log(

"scriptURI: "+n),console.log("lineNo: "+r),console.log("columnNo: "+o),console.log("error: "+t);var l={

errorMessage:e||null,scriptURI:n||null,lineNo:r||null,columnNo:o||null,stack:t&&t.stack?t.stack:null};

if(XMLHttpRequest){ var u=new XMLHttpRequest;u.open("post","/middleware/errorMsg",!0),u.setRequestHeader(

"Content-Type","application/json"),u.send(JSON.stringify(l))}},newError("這是一個(gè)錯(cuò)誤")}]);在我的開發(fā)過程中也遇到過這個(gè)問題,我在開發(fā)一個(gè)功能組件庫的時(shí)候,使用npm link了我的組件庫,但是由于組件庫被npm link后是打包后的生產(chǎn)環(huán)境下的代碼,所有的報(bào)錯(cuò)都定位到了第一行。

解決辦法是開啟webpack的source-map,我們利用webpack打包后的生成的一份.map的腳本文件就可以讓瀏覽器對(duì)錯(cuò)誤位置進(jìn)行追蹤了此處可以參考webpack document其實(shí)就是webpack.config.js中加上一行devtool: source-map,如下所示,為示例的webpack.config.js:。

var path = require(path);module.exports = { devtool: source-map,mode: development,entry: ./client/index.js

,output: { filename: bundle.js,path: path.resolve(__dirname, client) }}在webpack打包后生成對(duì)應(yīng)的source-map,這樣瀏覽器就能夠定位到具體錯(cuò)誤的位置:

開啟source-map的缺陷是兼容性,目前只有Chrome瀏覽器和Firefox瀏覽器才對(duì)source-map支持不過我們對(duì)這一類情況也有解決辦法可以使用引入npm庫來支持source-map,可以參考mozilla/source-map。

這個(gè)npm庫既可以運(yùn)行在客戶端也可以運(yùn)行在服務(wù)端,不過更為推薦的是在服務(wù)端使用Node.js對(duì)接收到的日志信息時(shí)使用source-map解析,以避免源代碼的泄露造成風(fēng)險(xiǎn),如下代碼所示:const express =

require(express);const fs = require(fs);const router = express.Router();const sourceMap = require(source-map

);const path = require(path);const resolve = file => path.resolve(__dirname, file);// 定義post接口router.get(

/error/, asyncfunction(req, res) { // 獲取前端傳過來的報(bào)錯(cuò)對(duì)象let error = JSON.parse(req.query.error);let url = error.scriptURI;

// 壓縮文件路徑if (url) { let fileUrl = url.slice(url.indexOf(client/)) + .map; // map文件路徑// 解析sourceMaplet consumer =

awaitnew sourceMap.SourceMapConsumer(fs.readFileSync(resolve(../ + fileUrl), utf8)); // 返回一個(gè)promise對(duì)象

// 解析原始報(bào)錯(cuò)數(shù)據(jù)let result = consumer.originalPositionFor({ line: error.lineNo, // 壓縮后的行號(hào) column: error.columnNo

// 壓縮后的列號(hào) });console.log(result); }});module.exports = router;如下圖所示,我們已經(jīng)可以看到,在服務(wù)端已經(jīng)成功解析出了具體錯(cuò)誤的行號(hào)、列號(hào),我們可以通過日志的方式進(jìn)行記錄,達(dá)到了前端異常監(jiān)控的目的。

Vue捕獲異常在我的項(xiàng)目中就遇到這樣的問題,使用了js-tracker這樣的插件來統(tǒng)一進(jìn)行全局的異常捕獲和日志上報(bào),結(jié)果發(fā)現(xiàn)我們根本捕獲不到Vue組件的異常,查閱資料得知,在Vue中,異常可能被Vue自身給try ... catch了,不會(huì)傳到window.onerror事件觸發(fā),那么我們?nèi)绾伟裋ue組件中的異常作統(tǒng)一捕獲呢?

使用Vue.config.errorHandler這樣的Vue全局配置,可以在Vue指定組件的渲染和觀察期間未捕獲錯(cuò)誤的處理函數(shù)這個(gè)處理函數(shù)被調(diào)用時(shí),可獲取錯(cuò)誤信息和Vue 實(shí)例Vue.config.errorHandler = 。

function (err, vm, info) { // handle error// `info` 是 Vue 特定的錯(cuò)誤信息,比如錯(cuò)誤所在的生命周期鉤子// 只在 2.2.0+ 可用}在React中,可以使用ErrorBoundary組件包括業(yè)務(wù)組件的方式進(jìn)行異常捕獲,配合React 16.0+新出的componentDidCatch API,可以實(shí)現(xiàn)統(tǒng)一的異常捕獲和日志上報(bào)。

classErrorBoundaryextendsReact.Component{ constructor(props) { super(props);this.state = { hasError: false

}; } componentDidCatch(error, info) { // Display fallback UIthis.setState({ hasError: true });// You can also log the error to an error reporting service

logErrorToMyService(error, info); } render() { if (this.state.hasError) { // You can render any custom fallback UI

return

Something went wrong.

; }returnthis.props.children; }}使用方式如下:

性能監(jiān)控最簡單的性能監(jiān)控最常見的性能監(jiān)控需求則是需要我們統(tǒng)計(jì)用戶從開始請(qǐng)求頁面到所有DOM元素渲染完成的時(shí)間,也就是俗稱的首屏加載時(shí)間,DOM提供了這一接口,監(jiān)聽document的DOMContentLoaded事件與window的load事件可統(tǒng)計(jì)頁面首屏加載時(shí)間即所有DOM渲染時(shí)間:

// 記錄頁面加載開始時(shí)間var timerStart =

Date.now();

document.addEventListener(DOMContentLoaded, function() { console.log("DOM 掛載時(shí)間: ", Date.now() - timerStart);

// 性能日志上報(bào) });window.addEventListener(load, function() { console.log("所有資源加載完成時(shí)間: ", Date.now()-timerStart);

// 性能日志上報(bào) });對(duì)于使用框架,如Vue或者說React,組件是異步渲染然后掛載到DOM的,在頁面初始化時(shí)并沒有太多的DOM節(jié)點(diǎn),可以參考下文關(guān)于首屏?xí)r間采集自動(dòng)化的解決方案來對(duì)渲染時(shí)間進(jìn)行打點(diǎn)。

performance但是以上時(shí)間的監(jiān)控過于粗略,例如我們想統(tǒng)計(jì)文檔的網(wǎng)絡(luò)加載耗時(shí)、解析DOM的耗時(shí)與渲染DOM的耗時(shí),就不太好辦到了,所幸的是瀏覽器提供了window.performance接口,具體可見MDN文檔

幾乎所有瀏覽器都支持window.performance接口,下面來看看在控制臺(tái)打印window.performance可以得到些什么:

可以看到,window,performance主要包括有memory、navigation、timing以及timeOrigin及onresourcetimingbufferfull方法navigation對(duì)象提供了在指定的時(shí)間段里發(fā)生的操作相關(guān)信息,包括頁面是加載還是刷新、發(fā)生了多少次重定向等等。

timing對(duì)象包含延遲相關(guān)的性能信息這是我們頁面加載性能優(yōu)化需求中主要上報(bào)的相關(guān)信息memory為Chrome添加的一個(gè)非標(biāo)準(zhǔn)擴(kuò)展,這個(gè)屬性提供了一個(gè)可以獲取到基本內(nèi)存使用情況的對(duì)象在其它瀏覽器應(yīng)該考慮到這個(gè)API的兼容處理。

timeOrigin則返回性能測(cè)量開始時(shí)的時(shí)間的高精度時(shí)間戳如圖所示,精確到了小數(shù)點(diǎn)后四位onresourcetimingbufferfull方法,它是一個(gè)在resourcetimingbufferfull事件觸發(fā)時(shí)會(huì)被調(diào)用的event handler。

這個(gè)事件當(dāng)瀏覽器的資源時(shí)間性能緩沖區(qū)已滿時(shí)會(huì)觸發(fā)可以通過監(jiān)聽這一事件觸發(fā)來預(yù)估頁面crash,統(tǒng)計(jì)頁面crash概率,以便后期的性能優(yōu)化,如下示例所示:functionbuffer_full(event

) { console.log("WARNING: Resource Timing Buffer is FULL!"); performance.setResourceTimingBufferSize(

200);}functioninit() { // Set a callback if the resource buffer becomes filled performance.onresourcetimingbufferfull = buffer_full;

}計(jì)算網(wǎng)站性能使用performance的timing屬性,可以拿到頁面性能相關(guān)的數(shù)據(jù),這里在很多文章都有提到關(guān)于利用window.performance.timing記錄頁面性能的文章,例如alloyteam團(tuán)隊(duì)寫的初探 performance – 監(jiān)控網(wǎng)頁與程序性能,對(duì)于timing的各項(xiàng)屬性含義,可以借助摘自此文的下圖理解,以下代碼摘自此文作為計(jì)算網(wǎng)站性能的工具函數(shù)參考:

// 獲取 performance 數(shù)據(jù)var performance = { // memory 是非標(biāo)準(zhǔn)屬性,只在 Chrome 有// 財(cái)富問題:我有多少內(nèi)存 memory: { usedJSHeapSize:

16100000, // JS 對(duì)象(包括V8引擎內(nèi)部對(duì)象)占用的內(nèi)存,一定小于 totalJSHeapSize totalJSHeapSize: 35100000, // 可使用的內(nèi)存 jsHeapSizeLimit:

793000000// 內(nèi)存大小限制 },// 哲學(xué)問題:我從哪里來? navigation: { redirectCount: 0, // 如果有重定向的話,頁面通過幾次重定向跳轉(zhuǎn)而來

type: 0// 0 即 TYPE_NAVIGATENEXT 正常進(jìn)入的頁面(非刷新、非重定向等)// 1 即 TYPE_RELOAD 通過 window.location.reload() 刷新的頁面

// 2 即 TYPE_BACK_FORWARD 通過瀏覽器的前進(jìn)后退按鈕進(jìn)入的頁面(歷史記錄)// 255 即 TYPE_UNDEFINED 非以上方式進(jìn)入的頁面 }, timing: {

// 在同一個(gè)瀏覽器上下文中,前一個(gè)網(wǎng)頁(與當(dāng)前頁面不一定同域)unload 的時(shí)間戳,如果無前一個(gè)網(wǎng)頁 unload ,則與 fetchStart 值相等 navigationStart:

1441112691935,// 前一個(gè)網(wǎng)頁(與當(dāng)前頁面同域)unload 的時(shí)間戳,如果無前一個(gè)網(wǎng)頁 unload 或者前一個(gè)網(wǎng)頁與當(dāng)前頁面不同域,則值為 0 unloadEventStart:

0,// 和 unloadEventStart 相對(duì)應(yīng),返回前一個(gè)網(wǎng)頁 unload 事件綁定的回調(diào)函數(shù)執(zhí)行完畢的時(shí)間戳 unloadEventEnd: 0,// 第一個(gè) HTTP 重定向發(fā)生時(shí)的時(shí)間。

有跳轉(zhuǎn)且是同域名內(nèi)的重定向才算,否則值為 0 redirectStart: 0,// 最后一個(gè) HTTP 重定向完成時(shí)的時(shí)間有跳轉(zhuǎn)且是同域名內(nèi)部的重定向才算,否則值為 0 redirectEnd: 。

0,// 瀏覽器準(zhǔn)備好使用 HTTP 請(qǐng)求抓取文檔的時(shí)間,這發(fā)生在檢查本地緩存之前 fetchStart: 1441112692155,// DNS 域名查詢開始的時(shí)間,如果使用了本地緩存(即無 DNS 查詢)或持久連接,則與 fetchStart 值相等

domainLookupStart: 1441112692155,// DNS 域名查詢完成的時(shí)間,如果使用了本地緩存(即無 DNS 查詢)或持久連接,則與 fetchStart 值相等

domainLookupEnd: 1441112692155,// HTTP(TCP) 開始建立連接的時(shí)間,如果是持久連接,則與 fetchStart 值相等// 注意如果在傳輸層發(fā)生了錯(cuò)誤且重新建立連接,則這里顯示的是新建立的連接開始的時(shí)間

connectStart: 1441112692155,// HTTP(TCP) 完成建立連接的時(shí)間(完成握手),如果是持久連接,則與 fetchStart 值相等// 注意如果在傳輸層發(fā)生了錯(cuò)誤且重新建立連接,則這里顯示的是新建立的連接完成的時(shí)間

// 注意這里握手結(jié)束,包括安全連接建立完成、SOCKS 授權(quán)通過 connectEnd: 1441112692155,// HTTPS 連接開始的時(shí)間,如果不是安全連接,則值為 0 secureConnectionStart:

0,// HTTP 請(qǐng)求讀取真實(shí)文檔開始的時(shí)間(完成建立連接),包括從本地讀取緩存// 連接錯(cuò)誤重連時(shí),這里顯示的也是新建立連接的時(shí)間 requestStart: 1441112692158

,// HTTP 開始接收響應(yīng)的時(shí)間(獲取到第一個(gè)字節(jié)),包括從本地讀取緩存 responseStart: 1441112692686,// HTTP 響應(yīng)全部接收完成的時(shí)間(獲取到最后一個(gè)字節(jié)),包括從本地讀取緩存

responseEnd: 1441112692687,// 開始解析渲染 DOM 樹的時(shí)間,此時(shí) Document.readyState 變?yōu)?loading,并將拋出 readystatechange 相關(guān)事件

domLoading: 1441112692690,// 完成解析 DOM 樹的時(shí)間,Document.readyState 變?yōu)?interactive,并將拋出 readystatechange 相關(guān)事件

// 注意只是 DOM 樹解析完成,這時(shí)候并沒有開始加載網(wǎng)頁內(nèi)的資源 domInteractive: 1441112693093,// DOM 解析完成后,網(wǎng)頁內(nèi)資源加載開始的時(shí)間// 在 DOMContentLoaded 事件拋出前發(fā)生

domContentLoadedEventStart: 1441112693093,// DOM 解析完成后,網(wǎng)頁內(nèi)資源加載完成的時(shí)間(如 JS 腳本加載執(zhí)行完畢) domContentLoadedEventEnd:

1441112693101,// DOM 樹解析完成,且資源也準(zhǔn)備就緒的時(shí)間,Document.readyState 變?yōu)?complete,并將拋出 readystatechange 相關(guān)事件 domComplete:

1441112693214,// load 事件發(fā)送給文檔,也即 load 回調(diào)函數(shù)開始執(zhí)行的時(shí)間// 注意如果沒有綁定 load 事件,值為 0 loadEventStart: 1441112693214

,// load 事件的回調(diào)函數(shù)執(zhí)行完畢的時(shí)間 loadEventEnd: 1441112693215// 字母順序// connectEnd: 1441112692155,// connectStart: 1441112692155,

// domComplete: 1441112693214,// domContentLoadedEventEnd: 1441112693101,// domContentLoadedEventStart: 1441112693093,

// domInteractive: 1441112693093,// domLoading: 1441112692690,// domainLookupEnd: 1441112692155,// domainLookupStart: 1441112692155,

// fetchStart: 1441112692155,// loadEventEnd: 1441112693215,// loadEventStart: 1441112693214,// navigationStart: 1441112691935,

// redirectEnd: 0,// redirectStart: 0,// requestStart: 1441112692158,// responseEnd: 1441112692687,// responseStart: 1441112692686,

// secureConnectionStart: 0,// unloadEventEnd: 0,// unloadEventStart: 0 }};// 計(jì)算加載時(shí)間functiongetPerformanceTiming

() { var performance = window.performance;if (!performance) { // 當(dāng)前瀏覽器不支持console.log(你的瀏覽器不支持 performance 接口

);return; }var t = performance.timing;var times = { };//【重要】頁面加載完成的時(shí)間//【原因】這幾乎代表了用戶等待頁面可用的時(shí)間 times.loadPage = t.loadEventEnd - t.navigationStart;

//【重要】解析 DOM 樹結(jié)構(gòu)的時(shí)間//【原因】反省下你的 DOM 樹嵌套是不是太多了! times.domReady = t.domComplete - t.responseEnd;//【重要】重定向的時(shí)間

//【原因】拒絕重定向!比如,http://example.com/ 就不該寫成 http://example.com times.redirect = t.redirectEnd - t.redirectStart;

//【重要】DNS 查詢時(shí)間//【原因】DNS 預(yù)加載做了么?頁面內(nèi)是不是使用了太多不同的域名導(dǎo)致域名查詢的時(shí)間太長?// 可使用 HTML5 Prefetch 預(yù)查詢 DNS ,見:[HTML5 prefetch](http://segmentfault.com/a/1190000000633364)

times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;//【重要】讀取頁面第一個(gè)字節(jié)的時(shí)間//【原因】這可以理解為用戶拿到你的資源占用的時(shí)間,加異地機(jī)房了么,加CDN 處理了么?加帶寬了么?加 CPU 運(yùn)算速度了么?

// TTFB 即 Time To First Byte 的意思// 維基百科:https://en.wikipedia.org/wiki/Time_To_First_Byte times.ttfb = t.responseStart - t.navigationStart;

//【重要】內(nèi)容加載完成的時(shí)間//【原因】頁面內(nèi)容經(jīng)過 gzip 壓縮了么,靜態(tài)資源 css/js 等壓縮了么? times.request = t.responseEnd - t.requestStart;

//【重要】執(zhí)行 onload 回調(diào)函數(shù)的時(shí)間//【原因】是否太多不必要的操作都放到 onload 回調(diào)函數(shù)里執(zhí)行了,考慮過延遲加載、按需加載的策略么? times.loadEvent = t.loadEventEnd - t.loadEventStart;

// DNS 緩存時(shí)間 times.appcache = t.domainLookupStart - t.fetchStart;// 卸載頁面的時(shí)間 times.unloadEvent = t.unloadEventEnd - t.unloadEventStart;

// TCP 建立連接完成握手的時(shí)間 times.connect = t.connectEnd - t.connectStart;return times;}日志上報(bào)單獨(dú)的日志域名對(duì)于日志上報(bào)使用單獨(dú)的日志域名的目的是避免對(duì)業(yè)務(wù)造成影響。

其一,對(duì)于服務(wù)器來說,我們肯定不希望占用業(yè)務(wù)服務(wù)器的計(jì)算資源,也不希望過多的日志在業(yè)務(wù)服務(wù)器堆積,造成業(yè)務(wù)服務(wù)器的存儲(chǔ)空間不夠的情況其二,我們知道在頁面初始化的過程中,會(huì)對(duì)頁面加載時(shí)間、PV、UV等數(shù)據(jù)進(jìn)行上報(bào),這些上報(bào)請(qǐng)求會(huì)和加載業(yè)務(wù)數(shù)據(jù)幾乎是同時(shí)刻發(fā)出,而瀏覽器一般會(huì)對(duì)同一個(gè)域名的請(qǐng)求量有并發(fā)數(shù)的限制,如Chrome會(huì)有對(duì)并發(fā)數(shù)為6個(gè)的限制。

因此需要對(duì)日志系統(tǒng)單獨(dú)設(shè)定域名,最小化對(duì)頁面加載性能造成的影響跨域的問題對(duì)于單獨(dú)的日志域名,肯定會(huì)涉及到跨域的問題,采取的解決方案一般有以下兩種:一種是構(gòu)造空的Image對(duì)象的方式,其原因是請(qǐng)求圖片并不涉及到跨域的問題;

var url = xxx;new Image().src = url;利用Ajax上報(bào)日志,必須對(duì)日志服務(wù)器接口開啟跨域請(qǐng)求頭部Access-Control-Allow-Origin:*,這里Ajax就并不強(qiáng)制使用GET請(qǐng)求了,即可克服URL長度限制的問題。

if (XMLHttpRequest) { var xhr = new XMLHttpRequest(); xhr.open(post, https://log.xxx.com, true); // 上報(bào)給node中間層處理

xhr.setRequestHeader(Content-Type, application/json); // 設(shè)置請(qǐng)求頭 xhr.send(JSON.stringify(errorObj));

// 發(fā)送參數(shù)}在我的項(xiàng)目中使用的是第一種的方式,也就是構(gòu)造空的Image對(duì)象,但是我們知道對(duì)于GET請(qǐng)求會(huì)有長度的限制,需要確保的是請(qǐng)求的長度不會(huì)超過閾值省去響應(yīng)主體對(duì)于我們上報(bào)日志,其實(shí)對(duì)于客戶端來說,并不需要考慮上報(bào)的結(jié)果,甚至對(duì)于上報(bào)失敗,我們也不需要在前端做任何交互,所以上報(bào)來說,其實(shí)使用HEAD請(qǐng)求就夠了,接口返回空的結(jié)果,最大地減少上報(bào)日志造成的資源浪費(fèi)。

合并上報(bào)類似于雪碧圖的思想,如果我們的應(yīng)用需要上報(bào)的日志數(shù)量很多,那么有必要合并日志進(jìn)行統(tǒng)一的上報(bào)解決方案可以是嘗試在用戶離開頁面或者組件銷毀時(shí)發(fā)送一個(gè)異步的POST請(qǐng)求來進(jìn)行上報(bào),但是嘗試在卸載(unload)文檔之前向web服務(wù)器發(fā)送數(shù)據(jù)。

保證在文檔卸載期間發(fā)送數(shù)據(jù)一直是一個(gè)困難因?yàn)橛脩舸硗ǔ?huì)忽略在卸載事件處理器中產(chǎn)生的異步XMLHttpRequest,因?yàn)榇藭r(shí)已經(jīng)會(huì)跳轉(zhuǎn)到下一個(gè)頁面所以這里是必須設(shè)置為同步的XMLHttpRequest請(qǐng)求嗎?。

window.addEventListener(unload, logData, false);functionlogData() { var client = new XMLHttpRequest();

client.open("POST", "/log", false); // 第三個(gè)參數(shù)表明是同步的 xhr client.setRequestHeader("Content-Type",

"text/plain;charset=UTF-8"); client.send(analyticsData);}使用同步的方式勢(shì)必會(huì)對(duì)用戶體驗(yàn)造成影響,甚至?xí)層脩舾惺艿綖g覽器卡死感覺,對(duì)于產(chǎn)品而言,體驗(yàn)非常不好,通過查閱MDN文檔,可以使用sendBeacon()方法,將會(huì)使用戶代理在有機(jī)會(huì)時(shí)異步地向服務(wù)器發(fā)送數(shù)據(jù),同時(shí)不會(huì)延遲頁面的卸載或影響下一導(dǎo)航的載入性能。

這就解決了提交分析數(shù)據(jù)時(shí)的所有的問題:使它可靠,異步并且不會(huì)影響下一頁面的加載此外,代碼實(shí)際上還要比其他技術(shù)簡單!下面的例子展示了一個(gè)理論上的統(tǒng)計(jì)代碼模式——通過使用sendBeacon()方法向服務(wù)器發(fā)送數(shù)據(jù)。

window.addEventListener(unload, logData, false);functionlogData() { navigator.sendBeacon("/log", analyticsData);

}小結(jié)作為前端開發(fā)者而言,要對(duì)產(chǎn)品保持敬畏之心,時(shí)刻保持對(duì)性能追求極致,對(duì)異常不可容忍的態(tài)度前端的性能監(jiān)控與異常上報(bào)顯得尤為重要代碼難免有問題,對(duì)于異常可以使用window.onerror或者addEventListener的方式添加全局的異常捕獲偵聽函數(shù),但可能使用這種方式無法正確捕獲到錯(cuò)誤:對(duì)于跨域的腳本,需要對(duì)script標(biāo)簽增加一個(gè)crossorigin=”anonymous”;對(duì)于生產(chǎn)環(huán)境打包的代碼,無法正確定位到異常產(chǎn)生的行數(shù),可以使用source-map來解決;而對(duì)于使用框架的情況,需要在框架統(tǒng)一的異常捕獲處埋點(diǎn)。

而對(duì)于性能的監(jiān)控,所幸的是瀏覽器提供了window.performance API,通過這個(gè)API,很便捷地獲取到當(dāng)前頁面性能相關(guān)的數(shù)據(jù)而這些異常和性能數(shù)據(jù)如何上報(bào)呢?一般說來,為了避免對(duì)業(yè)務(wù)產(chǎn)生的影響,會(huì)單獨(dú)建立日志服務(wù)器和日志域名,但對(duì)于不同的域名,又會(huì)產(chǎn)生跨域的問題。

我們可以通過構(gòu)造空的Image對(duì)象來解決,亦或是通過設(shè)定跨域請(qǐng)求頭部Access-Control-Allow-Origin:*來解決此外,如果上報(bào)的性能和日志數(shù)據(jù)高頻觸發(fā),則可以在頁面unload時(shí)統(tǒng)一上報(bào),而unload時(shí)的異步請(qǐng)求又可能會(huì)被瀏覽器所忽略,且不能改為同步請(qǐng)求。

此時(shí)navigator.sendBeacon API可算幫了我們大忙,它可用于通過HTTP將少量數(shù)據(jù)異步傳輸?shù)絎eb服務(wù)器而忽略頁面unload時(shí)的影響就醬,下期再見

免責(zé)聲明:本站所有信息均搜集自互聯(lián)網(wǎng),并不代表本站觀點(diǎn),本站不對(duì)其真實(shí)合法性負(fù)責(zé)。如有信息侵犯了您的權(quán)益,請(qǐng)告知,本站將立刻處理。聯(lián)系QQ:1640731186

報(bào)紙版面截圖。

掃一掃在手機(jī)打開當(dāng)前頁
>>更多精彩圖集推薦
中文字幕日本无码电影 | 美国伊人网 | 久久蝌蚪 | 国产亚洲精品91 | 伊人第四色 | 亚洲色妞 | 99精品久久久久中文字幕 | 午夜视频在线观看网站 | 午夜无码伦费影视在线观看果冻 | 成都影院免费高清完整 | 五月婷婷六月丁香 | a级毛片黄色 | 成人乱人乱一区二区三区 | 中文区中文字幕免费看 | 免费涩涩屋草莓榴莲秋葵绿巨人 | 免费看国产精品麻豆 | 极品白嫩小泬10P | 五月深爱婷婷 | 亚洲Av -宅男色影视 | 国产成人精品综合在线观看 | 大学生一级一片第一次免费 | 春色校园亚洲综合小说 | 日韩色情图片小说AV一区 | 亚洲午夜久久久久久91 | 午夜免费无码福利视频麻豆 | 免费网站看片成年 | 国产又黄又湿又刺激不卡网站 | 国产成人禁片免费观看视频 | 国产麻豆精品人妻无码A片 国产麻豆精品久久一二三 国产伦精品一区二区三区在线观看 | A片女女女女女女BBBB | 国产亚洲精品AV片在线观看播放 | 一本色道久久爱88AV | 伊人99| 2021手机日本卡一卡二新区 | 乱师生肉合集乱500篇小说 | 中文字幕不卡一区 | 日本一在线中文字幕天堂 | 色妞网| 久久不卡一区 | 中文字幕专区高清在线观看 | 色播影院性播影院私人影院 | 欧美69视频 | 2018天天干天天操 | 羞羞答答.NT视频在线观看 | 日本毛片免费韩国 | 开心婷婷色 | 成人无码日本一区二区三视 | 九九色在线视频 | 五月婷婷激情在线 | 国产色婷婷亚洲99麻豆 | 国产精品人妻无码久久久2022 | 一级毛片在线直接观看 | 亚洲中文字幕在线 | 国产精品一区二区在线观看 | 婷婷激情五月网 | 老熟女强人国产在线播放一区 | 六月激情婷婷 | 日本一本有码无码综合视频 | 亚洲精品久久无码AV片亚洲 | 任你搞视频这里只有精品 | 最近最好看的中文字幕1 | 精品国产人妻一区二区三级 | 无码AV免费一区二区三区A片 | 在线日本中文字幕 | 美女扒开腿让男人桶爽30分钟 | 国产好大好爽久久久久久久 | 人妻少妇69式99偷拍 | 小妖精我要你真紧好爽视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 最好看的韩国日本免费 | 俺去也最新网站 | 色99在线 | 五月丁香五月伦理 | 色噜噜狠狠色综无码久久合欧美 | 日本高清色片 | 国产福利你懂的 | 中文字幕日本六区小电影 | 忘忧草一卡二卡三卡 | 久久ra热在线精品视频 | 午夜性做爰电影 | 婷婷四月开心色房播播 | 亚洲一区不卡视频 | 99蜜桃在线观看免费视频网站 | 久久成年片色大黄全免费网站 | 在线伦理电影 | 果冻传媒董小宛一区二区 | 国产精品久久久久久久免费 | 蜜桃TV成人网站免费打开 | 国产自在自拍 | 无码人妻丰满熟妇啪啪区日韩久久 | 99日影院在线播放 | 亚洲精品久久久久久无码AV | 日韩视频中文字幕精品偷拍 | 特级 毛片 | 久久乐国产综合亚洲精品 | 亚洲日本在线播放 | XX性欧美肥妇精品久久久久久 | 国产成人精品久久一区二区三区 | 国内自拍视频在线观看 | 神秘感染1在线观看高清完整免费观看 | 欧美熟妇互舔20p | 日本高新1区2区3区 日本高清中文字幕 | 蜜桃视频在线观看免费视频网站WWW | 国产精品永久免费视频 | 8x永久在线视频 | 中文字幕一级毛片视频 | 啪啪电影网 | 最近免费的中文字幕一 | 亚洲国产高清在线观看视频 | 邪恶肉肉全彩色无遮盖教师 | 97久久久久| 国内精品99 | 天美网站传媒入口网址 | 免费jizz在在线播放国产 | 日本三级观看高清免费 | 色天使久久综合网天天 | 日韩欧美精品 | 国产最新在线视频 | 狠日狠干日曰射 | 日日噜噜噜夜夜爽爽狠狠视频 | 欧美一级特黄刺激爽大片 | 色悠悠 | 99久久国产露脸国语对白 | 又色又爽又黄的视频网站免费 | 春宵福利网站在线观看 | 影音先锋av悠悠资源网 | 2024四虎影视最新免费 | 成人开心网| 无码精品A片一区二区电影在线 | 午夜久久免影院欧洲 | 久久AV无码乱码A片无码软件 | 中国一级特黄真人毛片 | 日本无码H纯肉黄动漫A红桃 | 99热6| 国产精品禁18久久久夂久 | 泷泽萝拉第一部快播 | 无码做爰全过程免费的床震 | 香蕉久久国产AV一区二区 | 午夜伦yy44880影院 | 特黄aa级毛片免费视频播放 | 乱码1234区2021| 天天爽夜夜春 | 给啪啪视频免费观看 | 花房姑娘免费观看8集电视剧高清 | 国产精品99亚发布 | 女帝娜美罗宾群啪比赛里番acg | 亚洲 另类 春色 小说 | 天天玩夜夜操 | 国产一区二区三区乱码在线观看 | 成人激情视频网站 | 久久久一本波多野结衣 | 久久高清免费视频 | 果冻传媒网站免费入口破解版 | 男女久久久视频2019 | 色老头xxxwww作爱视频 | 国产精品不卡在线 | 一区二区三区免费视频网站 | 永久免费看www色视频 | 在线播放无码后入内射少妇 | 欧美区一区二 | 国内精品玖玖玖玖电影院 | 91久久国产综合精品 | 日本xxxbbb0oo | 强壮公让我夜夜高潮A片 | 亚洲第一黄色网 | 久久精品国产72精品亚洲 | 日本三级在线观看511 | 97久久久亚洲综合久久88 | 天天干在线免费视频 | 成人午夜18免费看 | 日本人妻仑乱少妇A级毛片潘金莲 | 亚洲AV无码专区A片奶水 | 熟女人妻私密按摩内射 | 国产福利美女福利视频免费看 | 黄色亚洲网站 | 最近中文字幕高清中文字幕无 | 免费的又色又爽又黄的视频软件 | 天天射天天干天天插 | 亚州黄色网址 | 在线视频网站www色 在线视频色在线 | 久久大香香蕉国产免费网站 | 成人品视频观看在线 | 最新 国产 精品 精品 视频 | 国产成人精品高清在线观看99 | 国语对白清晰好大好白在线 | 爱你千万次韩剧在线观看 | 欧美又粗又大AAAAA级毛片 | 日本高清不卡码无码v亚洲 日本高清免费毛片大全 | 国产精品久久久久毛片 | 宝贝我想尿在里面h | WWW色情成人免费视频 | 98国产精品人妻无码免费 | 国产成人综合网在线观看 | 欧美一级视频精品观看 | 麻花传媒MV一二三区别在哪里看 | 国产精品高清在线观看地址 | 夜夜流水无情 | 波多野结衣 一区 | 国产高清毛片 | 天天撸日日夜夜 | 最近免费中文字幕大全高清大全10 | 午理论理影片被窝 | 美美哒韩国直播在线视频 | 欧美黑人巨大精品videos一 | 一级毛片黄色 | 精品国产互换人妻麻豆 | 韩日精品在线 | 亚洲精品一区二区三区四区久久 | 爱兽交| 欧美日韩影院 | 精品国产午夜福利精品推荐 | 麻豆一二三区AV传媒 | 久久久久夜色精品波多野结衣 | 日本欧美视频在线观看三区 | 伦理片97影视网 | 99视频在线免费 | 91天堂网| 24小时更新视频在线观看免费 | 一级做a爱免费观看视频 | 久久三级国产 | 亚洲一区在线播放 | 九九九日产| 无码国产欧美一区二区三区不卡 | 色哟哟哟精品免费看视频 | 小小拗女一区二区三区 | 国偷自产一区二视频观看 | 免费在线观看黄色小视频 | 一区二区久久日韩一片棋牌 | 中文国产 | 久操视屏| 少妇高潮A视频 | 国产精品久久久天天影视香蕉 | 美女性生活毛片 | 亚洲精品久久一区二区三区2024 | 日韩高清欧美 | 国产精品人人妻人色五月 | 国色天香综合国产一区 | 超级乱婬长篇小说 | 久久精品2 | 天美传媒影视在线网址 | 精品国产三级 | 成人网18免费下 | 日韩精品在线观看视频 | 九九99| 内射干少妇亚洲69XXX | 免费三级黄| 欧美特级特黄AAAAA片 | 国产成人免费不卡在线观看 | a91acme果冻传媒 | 精品国产综合成人亚洲区 | chinesegay又粗又大短视频 | 国产在线不卡一区 | 日韩精品免费观看 | 亚洲电影 欧美电影 | 国产专区自拍 | 91天堂一区二区 | 护士毛片| 日本真人边吃奶边做爽免费视频 | 琪琪see色原网色原网站 | 国产精品久久久久久人妻香蕉 | 久久天天躁日日躁狠狠躁 | 国产又粗又黄又爽的A片精华 | 99精品国产成人一区二区 | 麻豆出品视频在线 | 在线观看的免费视频网站 | 影音先锋男人站 | acd4448年龄确认 | 九九在线 | 国产成人午夜精品影院 | 少妇厨房出轨激情做爰 | 麻豆午夜| 欧美丰满熟妇无码XOXOXO | 天天干夜夜夜操 | 国产91情侣在线精品国产 | 视频一区中文字幕 | 中国乱码一二三区别免费 | 国产亚洲精品AAAA片APP | 欧美精品在线观看视频 | 操亚洲美女| 真人做爰片免费观看播放 | 日韩视频免费 | 97青草最新免费精品视频 | 成人免费一区二区无码视频 | 精品一区二区三区高清免费观看 | 国产真实乱子伦清晰对白 | 国产精品综合一区二区 | 亚洲色偷偷男人的天堂 | 日本一在线中文字幕天堂 | WW.国产人妻人伦精品 | 2019精品国产品在线18年 | 与女乱小说目录伦下载 | 中文字幕日本无码少妇 | 人妻激情综合久久久久蜜桃 | 免费精品国偷自产在线在线 | 天天操天天操天天干 | 老司机精品福利在线资源 | 黄在线网站| 在线看片av以及毛片 | 亚洲AV无码色情第一综合网 | 精品久久久无码人妻中文字幕边打电话 | 国产人妻精品久久久久久很牛 | 五月婷婷丁香花综合网 | 亚洲 欧美 国产 综合网 | 97视频在线观看播放 | 成人午夜精品视频在线观看 | 狠狠人妻久久久久久综合九色 | 亚洲丰满熟女一区二区蜜桃 | 国产v视频 | 自拍日韩亚洲一区在线 | 女人下边被添全过程A片 | 国产三级电影网站 | 51视频精品全部免费最新 | 456亚洲影院 | 91精品国产免费久久久久久 | 国产熟妇另类久久久久婷婷 | 色五月激情五月 | 精品国产三级a | 2018av在线| 午夜91视频 | 国产精品久久久久久久A片冻果 | 日韩制服丝袜在线 | 激情四房| 精品国偷拍自产在线观看 | 天美传媒新剧国产剧影视公司 | 久久精品美女 | 日韩一区二区三区中文字幕 | 在线看片免费观看 | 最新版天堂资源官网 | 色www永久免费视频 色www永久免费 | 一本色道在线久88在线观看片 | 又爽又色又舒服A片免费 | 玫瑰之战电视剧免费 | 国产乱码精品一品二品 | 久久精品女人毛片国产 | 偷拍亚洲网友图片区 | 日韩福利在线观看 | 日本免费网址大全在线观看 | 国产精品亚洲污污网站入口 | 老头老太bbbbbxxxxx | 91桃色污无限免费看 | 黄色软件草莓丝瓜秋葵安卓下载破解版大全 | 免费在线视频日本 | 老湿机免费体十分钟 | 久拍国产在线观看 | 国内精品久久久久久网站 | 成都影院免费高清完整 | 伊人2024视频免费观看 | 日韩三级欧美 | 色综合AV亚洲超碰少妇 | 久久99国产一区二区三区 | 波多野结衣一区二区三区在线观看 | 亚洲成a人v欧美综合天堂下载 | 国产一级免费视频 | 最近最好的中文字幕免费 | 樱桃视频直播在线观看高清下载 | 无码人妻丰满熟妇奶水区码 | 久操手机在线视频 | 日韩一区二区三区四区区区 | 神马电影dy888午夜我不卡 | 2019中文字幕在线观看 | AV久久无码AV喷水高潮 | 六月丁香婷婷网 | 国产在线视频分类精品 | 天天拍天天干 | 一区二区三区在线看 | 日韩欧美 亚洲视频 | 精品3d动漫视频一区在线观看 | 大片免免费观看视频播放器在线观看 | 国产精品久久久久久爽爽爽床戏 | 国产无码av | 欧美又粗又大又爽又色A片 欧美又粗又黄又硬的A片 | 国产无套视频在线观看香蕉 | 一本色道在线久88在线观看片 | 在线观看国产黄色 | 亚洲免费一级视频 | 国产crm系统91| 欧美亚洲精品一区二三区8V | 精品国产96亚洲一区二区三区 | 男人猛躁进女人的毛片A片小说 | 99久久www免费| 国产偷抇久久精品A片蜜臀A | 公车冰块PLAY张开腿调教 | 欧美制服丝袜在线 | 一级一毛片a级毛片 | 欧美色图天堂网 | 国产美女啪啪 | 成人性生交A片免费看麻豆 成人性生交大片免费看中国A片 | 黄色免费看网站 | 日韩a级片| 成人做爰A片三免费视频 | 深爱激情婷婷 | 国产永久在线观看 | 日本成人在线免费 | 国产精品宾馆在线 | 8x成人在线 | 精品国产3p一区二区三区 | 青草影视 | 免费国产又色又爽又黄的网站 | 欧美xxxx在线 | 99精品成人无码A片观看 | 乱码一二三入区口 | 奇米影视20247久久精品人人爽 | 午夜福利1000集看看 | 国产精品久久久久久久 | 精品欧美一区二区在线观看欧美熟 | 午夜福利试看120秒体验区 | 涩涩视频网站 | 亚洲色偷偷一区二区手机在线 | 国产真人免费无码AV在线观看 | 成人年鲁鲁在线观看视频 | 欧美精品在线观看 | 免费的中国黄网站大全 | 日韩欧美一区二区不卡 | 欧美性做爰又大又粗又长 | 成人片在线播放 | 91国内视频在线观看 | 日本欧美不卡一区二区三区在线 | 日本三级香港三级韩国三级 | 欧美日韩中文字幕免费不卡 | 十二寡妇肉床艳史邵氏小说 | 天天狠狠弄夜夜狠狠躁·太爽了 | 深夜a级毛片免费视频 | 人人澡人人爽人人精品 | 99re视频在线播放 | 天天综合网站 | 无码做爰全过程免费的床震 | 亚瑟中文 在线 | 最新中文字幕在线观看 | 一级毛片免费下载 | 欧美日韩不卡合集视频 | 撞击着旗袍美妇的肉臀 | 国产成人精品视频一区 | 欧美一级视频在线观看 | 亚洲中文 字幕 国产 综合 | 无码欧美熟妇人妻影院欧美潘金莲 | 老司机精品视频午夜免费视频 | 综合久| 黄色一级小视频 | 国产在线观看91精品 | 国内精品久久久久影院优 | 蜜桃在线线免费观看视频 | 99国产午夜精品一区二区 | 久久网综合 | 国产美女视频免费观看的网站 | jizz在线播放| 综合自拍亚洲综合图区 | 操美女视频在线观看 | 久久国产精品系列 | 国产一级做a爱片久久毛片a | 欧美激情社区 | 国产操穴 | 亚洲人成一区二区不卡 | 97久久超碰中文字幕 | 想见你电影版免费观看 | 久久精品一本到东京热 | 色老头成人免费综合视频 | 日本高清www视频在线观看 | 国产 亚洲 网友自拍 | 亚洲一区二区在线播放 | 青青国产线观观看视频 | 中文字幕理伦电影免费 | 影音先锋资av男人撸 | 欧美一级中文字幕 | 日本无码色哟哟婷婷最新网站 | 99视频国产在线 | 欧美三级黄色 | 性夜黄A片爽爽免费视频 | 国精产品999国精产品官网 | 韩日美无码精品无码 | 免费黄色小网站 | 日韩有码视频在线 | 免费观看一级欧美在线视频 | 91极品视频 | 天天爱天天舔 | 被群CAO的合不拢腿H小说 | 最新资源资源影音先锋 | 伊人论坛| 好吊色青青青国产在线播放 | 亚洲剧场午夜在线观看 | 香港一级淫片高清视频 | 夜夜操夜夜骑 | 波多野结衣免费线在线 | 1区2区3区4区产品乱码99 | 日韩一区二区三区在线 | 最近最新中文字幕MV在线1 | 色偷偷亚洲第一成人综合网址 | 免费A级毛片黄A片高清在线播放 | H高潮嗯啊娇喘抽搐A片男男视频 | 欧美日韩永久久一区二区三区 | 四虎国产精品免费五月天 | 天书中文网 | 国产精品久久久久a影院 | 狠狠色婷婷狠狠狠亚洲综合 | 日韩精品中文字幕视频一区 | 久久爱国产视频在线 | 久久99精品波多结衣一区 | 国产 欧美 亚洲 中文字幕 | 亚洲 欧美 中文 在线 视频 | 6177视频色情| 在线观看免费视频日本高清 | 国产精品扒开腿做爽爽爽A片唱戏 | WWW韩国免费视频在线播放 | 亚洲三级影院 | 果冻传媒在线 | 成年18网站免费视频网站 | 色一伦一情一区二区三区 | 成人在线免费观看视频 | 色老导航 | 荡公乱妇第1章方情全文免费 | 日本一区二区三区免费视频 | 99在线观看精品视频 | 波多野结衣办公室在线观看 | 欧美激情性AAAAA片欧美 | 久久精品AV无码一区二区小说 | 四虎在线视频免费观看视频 | 欧美深夜福利 | 天天操天天弄 | 中国黄色毛片 | 午夜性色吃奶添下面69影院 | 久久久综合香蕉尹人综合网 | 亚洲图片偷拍图自拍97 | 91影视在线 | 欧美激情二区 | 国精产品W灬源码1688网站 | 免费一级黄色 | 久久人妻熟女一区二区 | 日韩夜夜操 | 久久精品一本到东京热 | 99热这里只有精品免费 | 国产高清管线视频免费 | 四虎影视永久在线精品 | 啪啪激情婷婷久久婷婷色五月 | 国产色婷婷精品综合在线观看 | 男人大JI巴做爰好爽视频 | 黄色网址在线看 | 嫩草欧美曰韩国产大片 | 亞洲AV女優無碼人妻濑亚美莉 | 四虎无码永久在线影库网址一个人 | 2020年最新国产精品正在播放 | 欧美日韩在线视频观看 | 国产99在线a视频 | 久久精品人妻无码一区二区三区网 | 在线观看视频免费精品视频 | 韩国精品一区二区三区四区五区 | 亚洲欧洲日韩国产一区二区三区 | 天天干天天玩天天操 | 久久就是精品 | 国产三级在线观看专区 | 日韩精品无码一区二区三区 | 丁香婷五月 | 水蜜桃传媒 | 国模无水印一区二区三区 | 老湿69| 很详细的肉肉床文片段 | AV色欲无码人妻中文字幕 | 国产日本欧美在线观看 | 西西人体一级裸片 | 国产单亲乱子伦视频 | 成人免费看黄网站yyy456 | 年轻漂亮的妺妺中文字幕版 | 黄色字幕网 | 禁止的爱善良的小峓子3线国字 | 黄色一级视频在线播放 | 超碰8| 精品人妻无码一区二区三区葡京 | www色情免费观看日本 | 欧美日韩国产一区二区三区伦 | 欧洲 亚洲 国产图片综合 | 午夜影院一区 | 国产黄色一级毛片 | 2019色 亚洲 日韩 国产 在线 | 色爱区综合五月激情 | 欧美性网站 | 亚洲最大成人综合网720P | 欧美一级美片在线观看免费 | 操一操影院 | 欧洲三级视频 | 亚洲精品国偷拍自产在线观看蜜臀 | 天天干天天干天天插 | 亚洲不卡影院 | 天天躁日日躁aaaaxxxx | 又大又粗韩国色情A片绿色椅子 | 在线视频 国产精品 中文字幕 | 日韩伦理电影秋霞影院 | 69欧美xxxxx色护士视频 | 人善交zzzxxx另类 | 男人j进女人j的图片 | 只要不是我老公1975 | 性欧美v| 狠狠色婷婷丁香综合久久韩国 | 久久99精品国产99久久 | 欧美日韩一卡2卡三卡4卡新区 | G0GO人体大尺香蕉 | 精品成人网 | 久久免费手机视频 | 在线观看黄页网站 | 国产女高清在线看免费观看 | 男人的天堂AV亚洲一区2区 | 国产中的精品AV一区二区 | 久久免费观看国产精品 | 日本青草视频 | 国产欧美在线手机观看 | 毛茸茸成熟亚洲人 | 四个人弄我一个要坏掉的 | 色偷偷噜噜噜亚洲男人 | 欧美大屁股熟妇BBBBBB | 日韩视频第二页 | 三级视频网址 | 污视频app网址丝瓜视频 | 一级做a爰片久久毛片武则天 | 日产精品视频 | 亚1州区2区3区4区产品乱码2021 | 美女强奷到抽搐在线播放 | 狠狠躁 | 乱理片 最新乱理片2024 | 国产综合无码一区二区色蜜蜜 | 国产人妻精品午夜福利免费不卡 | 日韩精品一卡2卡3卡4卡乱码 | 尤物tv| 久久三级国产 | 国产免费网址 | 天堂资源地址在线 | 99久久国产免费 - 99久久国产免费 | 强伦姧人妻波多野结衣 | 一本色道久久综合一区 | 一级毛片免费在线 | 国产资源一区 | 日本三级电影在线看 | 麻豆国产一区二区三区四区 | 日韩小视频在线播放 | 动漫美女脱小内内露尿口 | 欧美一区二区三区视频在线观看 | 免费三级网址 | 色视频在线观看完整免费版 | 香蕉人妻AV久久久久天天 | 九九99亚洲精品久久久久 | 久久精品国产日本波多麻结衣 | av我要看 | 一本本月无码- | 夭天干天天躁天天鲁 | 日韩国产人妻一区二区三区 | 国产美女在线一区二区三区 | 亚洲午夜久久久精品影院 | 开心四间房色五天 | 五月色丁香综合成人网 | 777四色 | 亚洲婷婷六月的婷婷 | 免费国产在线观看 | 国产精品国产三级国产普通 | 老师你下面太紧进不去动态图 | 精品亚洲成A人20247在线观看 | 色情无码视频7788 | 日本欧美视频在线观看三区 | 中文字幕动漫精品专区 | 精品日韩在线视频 | 国产在线激情 | 亚洲综合久久久久久888 | 欧美卡1卡2卡三卡四免费 | 日本伊人色综合网 | 久久伊人中文字幕有码 | a篇片在线观看 | jyzzjyzzz视频国产在线观看 | 一级女性全黄久久生活片免费 | 久久久国产免费影院 | 学生妹被爆插到高潮无遮挡 | av在线观看 | 最近免费字幕中文大全 | 好想被狂躁A片免费久99 | 2024四虎影视最新在线 | 亚洲精品久久99蜜芽尤物TV | 把腿张开老子臊烂你多P视频 | 最大 成人 综合 | 国产AV99激情久久无码天堂 | 丝瓜app下载网址进入安卓免费 | 精品高潮呻吟AV久久无码 | 中文字幕不卡一区二区 | 国产欧美综合在线观看第七页 | 国产人妻精品一区二区三区不卡 | jizz国产精品| 公交车上无耻挖阴 | 精品久久久爽爽久久久AV | 偷窥wc美女毛茸茸视频 | 国产成人无码视频一区二区三区 | 女人与公人强伦姧 | 成人黄18免费视频 | 国精产品一区二区三区 | 欧美xxxx在线视频 | 玖玖精品在线 | 国精产品三区四区有限公司 | 欧美人与动牲交免费观看视频 | 日韩不卡一卡二卡3卡四卡2021免费 | 国产老师开裆丝袜喷水漫画 | 亚洲乱色熟女一区二区三区蜜臀 | 掀起衣服揉她的奶头亲吻视频 | 国产乱码精品一区二区三区久久 | 少妇厨房出轨激情做爰 | 国产亚洲精品AAAA片小说 | 开心 色 欧美 图 | 亚洲 欧美 自拍 美腿 卡通 | 久久久久夜色精品波多野结衣 | 欧美精品久久 | 国产亚洲精品久久久久久线投注 | 色情无码WWW视频无码小说 | 亚洲丁香网 | 深夜成人福利视频 | 国产精品兄妹在线观看麻豆 | 国产AV无码熟妇人妻麻豆 | 国产v片在线观看 | 国内精品久久久久久久久 | 午夜在线 | 亚洲午夜精品A片久久WWW软件 | 国产精品人人妻人色五月 | 1区2区3区产品乱码免费 | 久久久久国产精品美女毛片 | 成人欧美一区二区三区白人 | 束美阁影视传媒 | 永久免费看A片无码网站四虎 | 早川瑞希 | 亚洲精品久久久久久久蜜桃臀 | 欧美日韩在线观看区一二 | 九九视频精品全部免费播放 | 人妻无码AV中文系统久久免费 | 国产精品A一区二区三区腾讯导航 | 日韩欧美中国a v | 中文字幕精品1在线 | 高清一区二区不卡视频 | 日韩精品视频免费在线观看 | 高清不卡伦理电影在线观看 | 色噜噜狠狠色综合欧洲selulu | 高清一区二区三区免费 | 国产精品人人爽人人做我的可爱 | 免费播放欧美毛片欧美AAAAA | 医生别摸啊摁摁 | 国产深夜福利视频在线 | 工口里番h彩色无遮挡全彩 工口里番全彩全彩无遮挡 工口里番全彩无肉码3D啪啪 | 国产亚洲va在线电影 | 500福利国产精品导航在线 | 亚洲第一成年免费网站 | 受降前夕 电影 | 波多野结衣一区二区 | 日韩在线电影大全免费观看 | 8050午夜二级一片 | 亚洲国产精品成人无码A片软件 | 国产一级免费 | 灌满到腿抽搐合不拢BL总受 | 日韩一区二区三区视频在线观看 | 阿v网站在线观看 | 国产成人午夜福在线观看 | 一级全黄毛片 | 久久99九九99九九99精品 | 欧美日韩一区不卡在线观看 | 国产婷婷色一区二区三区在线 | 亚洲网站大全 | 免费又黄又爽A片免费看 | 娇妻被朋友玩得呻吟在线电影 | 日本中文字幕在线视频站 | 华人城另类小说 | 色网免费| 黄色成年 | 亚洲色欲色欲综合网站 | 色撸网在线视频 | 俺来也网站 | 91免费精品国自产拍在线不卡 | 亚洲高清无码加勒比 | 国产美女裸露无遮挡双奶A片游戏 | 最近中文字幕完整在线看一 | 97色伦| 最近最新中文字幕高清免费 | 人妻少妇被粗大爽9797PW | 黄视频网站大全 | 欧美の无码国产の无码影院 | 偷拍自拍 亚洲色图 | 少妇高潮潮喷到猛进猛出小说 | 蝌蚪在线播放视频 | 翁公的粗大挺进小婷的咪 | 亚洲国产一线二线三线 | 用力C小SAO货奶头都硬了校园 | 人人射人人爱 | 亚洲一区二区女搞男 | 天天操天天玩 | 囯产精品一品二区三区 | 国色天香精品一卡2卡三卡4卡 | 波多野结衣亚洲一区 | 色多多www | 欧美成人h版整片合集 | 亚洲99精品A片久久久久久 | 欧美骆驼趾xxxx | 在线乱码一卡二卡麻豆 | 中文字幕卡二和卡三的视频 | 五月天丁香婷婷网 | 在线观看的免费视频网站 | 一机毛片 | 松岛枫百度影音 | 无码成A毛片免费 | 亚洲精品女同中文字幕在线 | 国产日韩欧美另类 | 日本加勒比视频在线观看 | 水蜜桃视频下载方法 | 久久久久久久99久久久毒国产 | http://www.cnnii.cn/news/17c999008.html