成人欧美图片国产-成人欧美一-成人欧美一区二区三-成人欧美一区二区三区-成人欧美一区在-成人欧美在线-成人片0371电影-成人片a免看

  • 0
js刷新當(dāng)前頁(yè)面(js刷新當(dāng)前頁(yè)面白屏)滿滿干貨
統(tǒng)計(jì)閱讀時(shí)間大約674分鐘

2025-10-25 19:59:06js刷新當(dāng)前頁(yè)面(js刷新當(dāng)前頁(yè)面白屏)滿滿干貨

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

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

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

 

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

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

剛進(jìn)公司時(shí),在進(jìn)行Node.js的接口開(kāi)發(fā)時(shí),我不太習(xí)慣每次排查問(wèn)題都要通過(guò)跳板機(jī)登上服務(wù)器看日志,后來(lái)慢慢習(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ì)問(wèn)題進(jìn)行回溯、還原問(wèn)題的場(chǎng)景,進(jìn)行bug的修復(fù)。

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

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

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

異常捕獲方法全局捕獲可以通過(guò)全局監(jiān)聽(tīng)異常來(lái)捕獲,通過(guò)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ò)誤);

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

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

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

常見(jiàn)問(wèn)題跨域腳本無(wú)法準(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)過(guò)webpack打包后壓縮混淆的代碼,所以我們可能會(huì)遇到這樣的問(wèn)題,如圖所示:

我們發(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ò)誤")}]);在我的開(kāi)發(fā)過(guò)程中也遇到過(guò)這個(gè)問(wèn)題,我在開(kāi)發(fā)一個(gè)功能組件庫(kù)的時(shí)候,使用npm link了我的組件庫(kù),但是由于組件庫(kù)被npm link后是打包后的生產(chǎn)環(huán)境下的代碼,所有的報(bào)錯(cuò)都定位到了第一行。

解決辦法是開(kāi)啟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ò)誤的位置:

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

這個(gè)npm庫(kù)既可以運(yùn)行在客戶端也可以運(yùn)行在服務(wù)端,不過(guò)更為推薦的是在服務(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) {// 獲取前端傳過(guò)來(lái)的報(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),我們可以通過(guò)日志的方式進(jìn)行記錄,達(dá)到了前端異常監(jiān)控的目的。

Vue捕獲異常在我的項(xiàng)目中就遇到這樣的問(wèn)題,使用了js-tracker這樣的插件來(lái)統(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)控最常見(jiàn)的性能監(jiān)控需求則是需要我們統(tǒng)計(jì)用戶從開(kāi)始請(qǐng)求頁(yè)面到所有DOM元素渲染完成的時(shí)間,也就是俗稱的首屏加載時(shí)間,DOM提供了這一接口,監(jiān)聽(tīng)document的DOMContentLoaded事件與window的load事件可統(tǒng)計(jì)頁(yè)面首屏加載時(shí)間即所有DOM渲染時(shí)間:

// 記錄頁(yè)面加載開(kāi)始時(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或者說(shuō)React,組件是異步渲染然后掛載到DOM的,在頁(yè)面初始化時(shí)并沒(méi)有太多的DOM節(jié)點(diǎn),可以參考下文關(guān)于首屏?xí)r間采集自動(dòng)化的解決方案來(lái)對(duì)渲染時(shí)間進(jìn)行打點(diǎn)。

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

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

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

timing對(duì)象包含延遲相關(guān)的性能信息這是我們頁(yè)面加載性能優(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è)量開(kāi)始時(shí)的時(shí)間的高精度時(shí)間戳如圖所示,精確到了小數(shù)點(diǎn)后四位onresourcetimingbufferfull方法,它是一個(gè)在resourcetimingbufferfull事件觸發(fā)時(shí)會(huì)被調(diào)用的event handler。

這個(gè)事件當(dāng)瀏覽器的資源時(shí)間性能緩沖區(qū)已滿時(shí)會(huì)觸發(fā)可以通過(guò)監(jiān)聽(tīng)這一事件觸發(fā)來(lái)預(yù)估頁(yè)面crash,統(tǒng)計(jì)頁(yè)面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屬性,可以拿到頁(yè)面性能相關(guān)的數(shù)據(jù),這里在很多文章都有提到關(guān)于利用window.performance.timing記錄頁(yè)面性能的文章,例如alloyteam團(tuán)隊(duì)寫的初探 performance – 監(jiān)控網(wǎng)頁(yè)與程序性能,對(duì)于timing的各項(xiàng)屬性含義,可以借助摘自此文的下圖理解,以下代碼摘自此文作為計(jì)算網(wǎng)站性能的工具函數(shù)參考:

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

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

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

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

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

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

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

0,// 和 unloadEventStart 相對(duì)應(yīng),返回前一個(gè)網(wǎng)頁(yè) 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 域名查詢開(kāi)始的時(shí)間,如果使用了本地緩存(即無(wú) DNS 查詢)或持久連接,則與 fetchStart 值相等

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

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

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

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

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

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

responseEnd: 1441112692687,// 開(kāi)始解析渲染 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í)候并沒(méi)有開(kāi)始加載網(wǎng)頁(yè)內(nèi)的資源 domInteractive: 1441112693093,// DOM 解析完成后,網(wǎng)頁(yè)內(nèi)資源加載開(kāi)始的時(shí)間// 在 DOMContentLoaded 事件拋出前發(fā)生

domContentLoadedEventStart: 1441112693093,// DOM 解析完成后,網(wǎng)頁(yè)內(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ù)開(kāi)始執(zhí)行的時(shí)間// 注意如果沒(méi)有綁定 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 = {};//【重要】頁(yè)面加載完成的時(shí)間//【原因】這幾乎代表了用戶等待頁(yè)面可用的時(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ù)加載做了么?頁(yè)面內(nèi)是不是使用了太多不同的域名導(dǎo)致域名查詢的時(shí)間太長(zhǎng)?// 可使用 HTML5 Prefetch 預(yù)查詢 DNS ,見(jiàn):[HTML5 prefetch](http://segmentfault.com/a/1190000000633364)

times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;//【重要】讀取頁(yè)面第一個(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;

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

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

// DNS 緩存時(shí)間 times.appcache = t.domainLookupStart - t.fetchStart;// 卸載頁(yè)面的時(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ù)器來(lái)說(shuō),我們肯定不希望占用業(yè)務(wù)服務(wù)器的計(jì)算資源,也不希望過(guò)多的日志在業(yè)務(wù)服務(wù)器堆積,造成業(yè)務(wù)服務(wù)器的存儲(chǔ)空間不夠的情況其二,我們知道在頁(yè)面初始化的過(guò)程中,會(huì)對(duì)頁(yè)面加載時(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ì)頁(yè)面加載性能造成的影響跨域的問(wèn)題對(duì)于單獨(dú)的日志域名,肯定會(huì)涉及到跨域的問(wèn)題,采取的解決方案一般有以下兩種:一種是構(gòu)造空的Image對(duì)象的方式,其原因是請(qǐng)求圖片并不涉及到跨域的問(wèn)題;

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

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ì)有長(zhǎng)度的限制,需要確保的是請(qǐng)求的長(zhǎng)度不會(huì)超過(guò)閾值省去響應(yīng)主體對(duì)于我們上報(bào)日志,其實(shí)對(duì)于客戶端來(lái)說(shuō),并不需要考慮上報(bào)的結(jié)果,甚至對(duì)于上報(bào)失敗,我們也不需要在前端做任何交互,所以上報(bào)來(lái)說(shuō),其實(shí)使用HEAD請(qǐng)求就夠了,接口返回空的結(jié)果,最大地減少上報(bào)日志造成的資源浪費(fèi)。

合并上報(bào)類似于雪碧圖的思想,如果我們的應(yīng)用需要上報(bào)的日志數(shù)量很多,那么有必要合并日志進(jìn)行統(tǒng)一的上報(bào)解決方案可以是嘗試在用戶離開(kāi)頁(yè)面或者組件銷毀時(shí)發(fā)送一個(gè)異步的POST請(qǐng)求來(lái)進(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è)頁(yè)面所以這里是必須設(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覽器卡死感覺(jué),對(duì)于產(chǎn)品而言,體驗(yàn)非常不好,通過(guò)查閱MDN文檔,可以使用sendBeacon()方法,將會(huì)使用戶代理在有機(jī)會(huì)時(shí)異步地向服務(wù)器發(fā)送數(shù)據(jù),同時(shí)不會(huì)延遲頁(yè)面的卸載或影響下一導(dǎo)航的載入性能。

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

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

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

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

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

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

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

1、經(jīng)濟(jì)要聞?dòng)^察原創(chuàng)文章未經(jīng)授權(quán)轉(zhuǎn)載必究,如需轉(zhuǎn)載請(qǐng)聯(lián)系官方微信號(hào)進(jìn)行授權(quán)。
2、轉(zhuǎn)載時(shí)須在文章頭部明確注明出處、保留官方微信、作者和原文超鏈接。如轉(zhuǎn)自經(jīng)濟(jì)要聞?dòng)^察
)字樣。
3、經(jīng)濟(jì)要聞?dòng)^察報(bào)道中所涉及的融資金額均由創(chuàng)業(yè)公司提供,僅供參考,經(jīng)濟(jì)要聞?dòng)^察不對(duì)真實(shí)性背書。
国产国产东北 | 国产亚洲日 | 日本福利| 国产不卡视频一 | 91福利播放 | 国产欧美日韩一区 | 国产主播福利大全 | 日韩一级品 | 欧美在线精品αⅴ | 欧美日韩色综合网站 | 欧美淫视频在线观看 | 日韩国产欧美经典 | 91视频午夜福利 | 欧美曰韩 | 国产欧美日韩综合 | 精品亚洲二区 | 97视屏| 国产在线视频第一页 | 国产精品免费网站 | 91深夜视频| 国产人妖影院 | 国产免费一区二区 | 福利片免费 | 日本午夜免费啪视频 | 午夜福利精品 | 国产精品一区一区 | 国产好的精华液 | 成人午夜福利A视频 | 变态另类国产 | 国产涩涩视频在 | 日本免费网站在线 | 三年中文在线观看免 | 日韩欧美一二区 | 午夜日韩福利 | 欧美三级成人观看 | 国产最新不卡 | 国产一区在线我不卡 | 国产主播福利在线 | 国产又黄又粗又猛又 | 国产理论片在线观看 | 国产福利精品视频 | 日本高清视频www | 91极品蜜桃| 国产日韩对 | 国产在线播放免费 | www精品视频 | 午夜热门精品一 | 国产欧美大片一区 | 日本精品人 | 欧美日毛比比 | 欧美日韩视频 | 精品入口菠萝 | 欧美性视 | 欧美亚洲高清日本 | 欧洲在线观看视频高 | 日韩精品免费网站 | 日本成人精品 | 国产黑丝在线 | 国产精品色综合 | 国拍在线精品 | 国产精品夫妻在线 | 91精品在线国产 | 精品一区卡2卡3卡 | 国产美女精品视 | 日本色道亚洲精品 | 最新热播电视剧大全 | 91免费国产在线 | 欧亚欧洲码国产 | 国产女同 | 国产精品自拍16页 | 日本插bb免费成人 | 国产精品精华液网站 | 欧美午夜片在线观看 | 97国产婷婷综合 | 日韩日午夜人精品 | 日韩经典欧美国产 | 国产精品一区在线麻 | 日本无卡码 | 理论片午夜 | 日本不卡在线免费 | 日本在线www| 福利微拍一区二区 | 日韩精品色色色色 | 三级中文 | 日韩午夜福利在线 | 91福利页| 国产青青操 | 岛国免费 | 欧美日韩亚洲另 | 国产二区精品视频 | 中文字幕在线永久 | 欧美另类日韩成人 | 91视频一区二区 | 国内激情自拍 | 91国产精品 | 国产欧美日本精品 | 91精品啪在线 | 99热婷婷| 国产香蕉在线观 | 成人精品区| 国产午夜看片 | 国产大片在线播放 | 国产最新在线观看 | 精品一二三四区 | 亚洲无码精品二 | 91九色国产蝌蚪 | 精品一区精品二区 | 国产精品第 | 青青草国| 69国产精品社区 | 成人国产第一区在 | 九一香蕉 | 国产精品情侣 | 欧洲瑟瑟| 中文字幕第23页 | 国产亚洲美女精品 | 日产国产欧洲系列 | 国产精品伊人 | 欧美日韩三区 | 国产95在| 国产专区在线视频 | 国产传媒在线播放 | 国产9色在线 | 91丨九色丨熟女在 | 欧美三级中 | 国产一区二区xxx | 日韩欧美在线播放 | 青青视屏 | 韩国三级中 | 日韩乱码人 | 欧美午夜性爱剧场 | 日韩城人网站 | 伦理片影先 | 九七电影网手机版 | 中文字幕偷乱视频 | 国产不卡免费 | 日韩高清在 | 国产手机在线播放 | 国产日韩海的味道 | 波多吉野一区 | www.美色吧 | 日韩日午夜人精品 | AⅤ三区 | 成人爱看片午夜福利 | 国产微拍精品一 | 日韩一级大片国产 | 午夜旡码视频 | 国产不卡视频一 | 国产在线拍偷自揄 | 国内自拍视频97 | 精品日韩欧美在线 | 欧美专区中文字幕 | 福利看片| 日韩高清va视频 | 三年片在线观看直播 | 成人一区在线播放 | 国内精品视频一区 | 亚洲无码| 国产黑色| 国产主播在线播放 | 91精品啪在线 | 国产姐弟乱伦视 | 91热爆在线精品 | 国产精品线路 | 无码精品人妻一区二区三区中 | 绿帽专区| 日韩精品最 | 福利二区视频 | 无码精品电影 | 三区在线观看不卡 | 91视频网址入口 | 国产ts在线播放 | 九九九在线视频 | 国产98色在线 | 日韩美女乱淫 | 中文字幕99| 国产疯狂伦交大片 | 国产情侣91| 女同在线电 | 九九国产热 | 伦理电影网址 | 国产专业剧情a | 国产大片黄在线观 | www亚洲欲色成 | 精品国自产拍网站 | 女性高爱潮免费有 | 国产v亚洲v天堂在 | 国产91色综 | 国产午夜激情视频 | 成人福利免费看 | 精品免费国产 | 日韩精品在线看 | 国产又色又爽又 | 动漫成人亚洲3D | 精品视频资源 | 日本高清在 | 91最新精| 国产九一福利 | 天美传媒在线观看果 | 午夜性色福利影院 | 人人揉揉揉揉揉日日 | 国产综合8| 青草精品| 丝袜亚洲日韩另类 | 国产欧美精品v | 国产精品日本 | 区一区二日韩 | 国语在线看免费观 | 国产日韩免费视 | 欧洲精品色 | 91视频国产精品 | 日本一本在 | 人人澡人人 | 午夜亚洲中文电影 | 91视频首页 | 国际b站免费视频入 | 国内精品专区 | 国产r级在线播放 | 国产高清免费在 | 国语对白清晰 | 日韩欧群 | 国产精品永久 | 国产亚洲视 | 精品欧美亚洲影视 | 日韩激情在线观看 | 国产亚洲日 | 成人午夜天| 国产男女插插一级 | 人妖hd | 国产中文综合乱伦 | 区视频在线 | 国产在线不卡 | 国产日产欧产综合 | 日韩a级片| 91精品欧| 国产高清网址 | 日韩午夜福利院 | 精品国产偷自产在线 | 国产视频一区四区 | 国产精品高清在线看 | 91精品福利尤物 | 国产欧洲在线播放 | 日韩国产色色色色 | 日本韩一级二级三级 | 日韩午夜视频 | 国产午夜鲁丝片a | 精品入口 | 欧美午夜理伦三 | 乱子伦一区二区三区 | 国产性爱网站 | 国产亚洲制服免视频 | www.日本色 | 欧美中文日韩 | 九九视频免费在线观 | 国产凸凹视频熟女a | 日本高清视频色惰 | 日韩免费视频线观看 | 午夜免费日韩 | 国产重口 | 日韩美女精品一区 | 精品成年 | 国产国语对白露脸 | 国产欧美性爱 | 日本成人一区 | 国产92成人 | 国产色女| 成人自拍偷拍 | 最新国产在线拍揄自揄 | 欧美一级| 日本在线网| 尤物国产视频 | 国产精品乱码一区二 | 中文字幕爱你懂你你 | 91精品区| 国产91福利导航 | 成人一区二区三区 | 日韩精选 | 9亚洲色 | 国产在线视频奶水 | 国产丝袜视频在线 | 人人添人人| 日韩欧美国产最新 | 日韩欧美午夜在线 | 精品精品国 | 国产在线啊v观看不 | 欧美三级视频 | 九九99亚洲精品 | 国产草草| 国产乱妇乱子在 | 91国产爽爽黄还在 | 99热只有| 国产黄频视频免费 | 九九国产热播 | 日韩国产三区四区 | 欧美日韩国产一区 | 午夜偷拍精品福利 | 91丝袜美腿高跟国 | 国语对白精品视频在 | 国内美女精品在线 | 国产免费无遮 | 日韩亚洲欧美理论片 | 国产无人区一码二码 | 国产青青操| 国产最新不卡 | 日韩午夜在线观看 | 乱子伦在线观看 | 动漫一区 | 国产精品亚洲专区 | 欧美亚洲综 | 国产亚洲一区 | 午夜神器| 97精品在线视频 | 午夜福利2025 | 日韩欧美午夜福利 | 精品午夜一区 | 国产妇乱子伦视 | 国产日韩欧美911 | 日本中文一区二 | 91中文字日产乱幕 | 欧美一级夜夜爽视频 | 国产婷婷午夜在线 | www.黄1| 国产高清不 | 成人一区二区在线 | 91兔女郎 | 国产精品伊人日日 | 国产美乳艺术一区 | 日本亚欧 | 日本a∨网 | 福利秀视频在线播放 | 国产日韩网址导航 | 99热都是精品 | 精品国产aⅴ | 国产视频网站在线 | 日韩欧美在线综合网 | 国内自拍第一页 | 国产亚洲玖玖精品 | 国产女同| 国产尤物不卡视频 | 日本乱码伦电影 | 精品在线视频 | 日韩国产欧美 | 国产夫妻性生活视频 | 午夜福利在线91 | 99精品国产一区 | 国产系列在线播放 | 三级a三级三级 | 欧美日韩亚洲 | 国产国产乱老熟女视 | 欧美三级在线视频 | 日韩成人福利片 | 福利影院在线看 | 国产v片在线播放 | 99r精品亚洲 | 午夜淫片 | 成人精品妖精视频在 | 日本好好热 | 国产日韩a| 国产重口| 精品国精 | 国产影视乱伦日本 | 国产视频线路一 | 欧美日韩免费 | 国产午夜亚洲精 | 成人抖音下载 | 日韩看羞羞在线播放 | 九九re6| 欧美午夜日韩 | 国产在香蕉播放 | 无码av在线播放专区 | 海量亚洲欧美色五月 | 精品国精品国产自在 | 国产情侣一区二区 | 每日更新国产 | 国产一区二区三区 | 91精品国产区 | 日本不卡一区 | 国产高清日本综合 | 日韩色婷 | 日本成人一区在线 | 三年片在线观看免费 | 日韩成人福利 | 国产精品秘在线观看 | 国产精品理 | 国产精品视频1区 | 日韩午夜免费 | 九九在线 | 国产精品私密保养 | 国产永久观看在线 | 精品露脸| 麻花天美星空mv免 | 国产乱子伦不卡视频 | 人在线免费视频 | 日韩亚洲人成影院 | 最新国产一区二区三区在线 | 欧美亚洲人成网 | 伦理电影手机在线 | 国产疯狂女同互磨高 | 国产极品美女视频 | 精品国产品香蕉在 | 国产精品青草综合久 | 91国福利| 97在线播放 | 日韩精品在线观看 | 人人摸人操| 日本亚洲精品成人 | 国产人兽在线播放 | 理论片写真午夜 | 国产一区丝袜在线 | 国产免费福利不 | 国产日韩一二三四区 | 国产亚洲观看日韩 | 日韩成人极品在线内 | 国产欧美日本不卡 | 福利电影网| 国产福利在线视频 | 91精品在线看 | 日韩成人免费 | 麻花影视 | www亚洲一区 | 国产不卡视频一 | 日韩男女做性高清在 | 国产精品成人免费 | 尤物视频免费观看 | 成人黃色一級片 | 日本欧美女优在线 | 奇米777亚洲 | 精品国产亚洲精品 | 日本免费一二区 | 另类专区欧 | 国产永久观看在线 | 欧美最猛性 | 成人免费播放 | 午夜一区二区免费看 | 日本精品a在 | 日韩逼穴美女区欧美 | 国产精品性爱在线观 | 欧美亚洲日韩激情 | 国产欧美一v精品 | 国产日本韩国 | 日韩欧美另类精品 | 黑人一区二区在线 | 日本精品99| 日本网站成人直播 | 国产激情在线五月天 | 午夜福利视| 中文字幕日韩一级 | 制服丝袜中文字 | 国产不卡 | 国产原创在线播放 | 午夜欧美视频 | 91一区二区三区 | 97超级碰碰碰 | 国产高清在线免 | 午夜福利影院 | 国内国外精品一区二 | 日韩四区在 | 91福利国产精品 | 精品国产片 | 日韩AⅤ在线播放 | aⅴ在线免费看 | 蜜乳国产一区 | 日韩成人精品在线 | 国产日韩精品高清 | 91网址在线观看 | 精品一区二区在线视 | 成人无号精品 | 精品区一 | 韩国日本香港三级 | 欧美亚洲一 | 日韩欧美视频免费看 | 成人观看的视频三级 | 国产人成中文字幕 | 3d动漫精品一区二 | 频道国产在线资源 | 国产v片免费播放 | 国产欧美日韩 | 91香蕉 | 欧洲亚洲国产 | 国产乱子伦视频大全 | 国产午夜福利不 | 日韩国产亚洲 | 国产一区人妖综合 | 国内大学生精品 | 国产69精| 国产露脸刺激对白 | 欧美日韩国产精品选 | 欧美淫视频在线观看 | 日韩午夜影片 | 国产91j | 欧美综合图区 | 国产中文字幕玖玖 | 91九色最新国产 | 精品第一区视频二区 | 精品亚洲午夜视频 | 国语国产自产精品 | 精品视频偷拍 | 日本老妇人 | 福利电影网 | 国产v片在线播 | 破解中文字幕 | 精品国产一二三区 | 成人97视频| 成人国产精品高清 | 日韩又爽又黄 | 日本性爱欧美精品 | 日韩亚洲欧美综合 | 日韩夜间飞 | 福利所视频导航 | 国产亚洲观看日韩 | 丝袜图片 | 国产高清中文 | 国产老妇 | 最新国产在线拍揄自揄 | 成人看片黄a在线 | 国产不卡在线二区 | 欧美日韩成人国 | 国产精品视频免费一 | 日本高清乱理 | 精品国产污免 | 69热视| 中文字幕免 | 九九视频国产 | 国产女同女互慰 | 亚洲无码影院中文字幕 | 国产白丝一区二区 | 日韩精品AⅤ | 国产在线三级 | 国产欧美二区三区 | 欧美性猛XXXXX| 欧美日韩在线高清 | 国产精品秘入口尤物 | 国产欧美在线人成 | 国产乱轮精品一区 | 日韩不卡手机视 | 国内精品免费视频 | 午夜电影网 | 国语我和子的乱视频 | 91福利在线网 | 人妖hd| 欧美在线免费观看 | 欧美日韩综合一区 | 精品国产一二三区 | aⅴ亚洲男人 | 国产黄三级 | www.尤物在线| 91免费视频在线 | 国产激情影视在线 | 午夜理论剧| 日韩午夜视 | 亚洲无码午间福利小电影 | 国产精品+日 | 国内精品一区二区 | 中文字幕一区二 | 亚洲无码在线观看a | 日本免费成人 | 国产精品福利视 | 国产美女久 | 日韩美女网站在线看 | 成人午夜福利群爱片 | 乱伦三级高清精 | 日韩欧美 | 国产熟女精品专区 | 三级影视 | 97韩剧网 | 国产九九精品视频 | 日本午夜 | 91成人福利在线 | 国产91特黄 | 区国产高清在线 | 精品国产资源站 | 青青青国产观91 | 国产二区精品视频 | 日韩a在线播放 | 国产精品亚洲欧美 | 国产中文字幕第一页 | 日本免费成人VA | 国产精品成人观看视 | 欧洲亚洲精品a | 国产一区二区三区四 | 欧美亚洲男人的天堂 | 三级中文高清 | 午夜插插插| 日韩精品免费一 | 91看片淫| 午夜国产福到在线 | 国产理论| 国产高清在线a视频 | 国产亚洲综合 | 欧美性xx| 精品性高朝 | 国产精品偷伦视频免 | 激情偷乱人 | 成人午夜看免费视频 | 日本乱理伦片中文 | 日韩精品色色色色 | 国产欧美自拍 | 国产激情视频在线 | 国产在线高清理伦片 | 三级网站| 日产无人区一线二 | 日本成年天堂 | 日韩逼穴美女区欧美 | 中文字幕综 | 麻花传剧 | 国产自产在线观看 | 成人无号精品 | 日本高清色频 | 喷水gif| 九九精品国产免费 | 国产日韩情 | 欧美日韩经典 | 精品欧美亚 | 国产有码| 日韩在线欧美精品 | 欧美在线日韩 | 国产黄在线 | 欧美一级精品 | www.黄p| 91社区在线视频 | 人人看人人艹 | 日韩v高清 | 午夜影视体验区 | 国产午夜不卡 | 成人一区精品视频 | 国色天香 | 91电影在线观看 | 国产精品第144页 | 欧美三级不卡点 | 日韩一区不卡 | 国产精品色 | 福利国产 | 午夜亚洲一区 | 欧美日韩亚洲国 | 三区四区五区高 | 国产精品第八页 | 成人永久免费永久在 | 国产91无| 97看片网| 中文字幕第一页亚洲 | 精品一区在线观看 | 成人免费看 | 国产情品一区二区 | 国产91丰满老 | 国产传媒在线观看 | 欧美性猛交 | 日韩中文字幕在线看 | 欧美日韩综 | 欧洲色中文字 | 国产拍揄 | 国产激情影视综合 | 殴美伊人色综合久 | 国产亚洲精品在天 | 成人奭片免费观看 | 国产91精选二区 | 精品人成在线电影 | www.激| 91福利电影网 | 精品字幕在线亚洲 | 国产97碰| www.黄免费| 午夜理论片大全福利 | 三级日韩 | 欧美午夜性春 | 国产直播 | 国产精品免费看 | 9久热草极品 | 成人导航网 | 日韩中文字幕不卡 | 蜜桃视频专区 | 国产女同精品 | 丝袜美腿中文字幕 | 91直播 | 欧亚欧洲码国产 | 午夜福利国产精品 | 国产青榴视频 | 国产不卡二区 | 日本免码v? | 午夜免费日韩小电影 | 精品国产爱片 | 九一spank国产 | 国产98色在线| 91色啪| 日韩视频免 | 成人短视频黄 | 青青精品导航 | 日本精高清区一 | 日本一区二区成人 | 日本一区二区电影 | 国产亚洲视频在线 | 成人看的羞 | 强奷到高湖喷水91 | 国产乱码卡二卡 | 国产免费爽爽视频 | 精品国产综合区 | 欧美专区亚洲专区 | 乱伦精品综合 | 97视频精品 | 国产www在线播放 | 精品国产中文乱伦 | 国内偷视频在线观看 | 福利在线不卡一区 | 91短视频污下载 | 国产精品19| 成人视屏一区 | 国产三区四区五 | 日韩国产制服在线 | 国产亚洲一区二区 | 亚洲无码动漫在线观看视频 | 中文字幕日韩电影 | 欧美性大战xxxx | 日韩成人成色 | 日韩精品天堂系列 | 91人成亚洲高清 | 国产精品又交在线 | 欧美一区日韩专区 | 国产在线99精品 | 韩国日本免费不 | 国产欧美日韩免费 | 国产精品高清另 | 成人起碰免费视频 | 国产在线97免费观 | 人人精品午夜视频 | 国产网站免费视频 | 精品视频资源 | 日韩中文字幕在线看 | 日韩成人成色 | 91成人影院| 日韩成人福利片 | 日本伦理片在线播放 | 97视频在线精 | 日本伦理电影片观看 | 三级高清精品国产 | 日本美女日b视频 | 国产欧美日韩一级 | 日韩精品中文一 | 欧美日韩动漫亚洲 | 日韩一级视频免费 | 国产精品一线 | 国产日韩在线看 | 97高清国语自产拍 | 欧洲一级视频在 | 日韩午夜性片 | 日韩国产在线观看 | 国色天香一区二区 | 日本成人羞羞网址 | 成人奭片免费观看 | 国产精品久一区 | 91国产爽爽黄 | 日韩激情成| 琪琪色18 | 国产精品普通 | 欧美一区二区三区视 | 精品小说| 国产偷窥熟女精 | 国产精品民宅偷 | 最新精品影视播放网站 | 日本三级国产在线 | 午夜影视免费 | 成人精品。。。 | 国产福利在线观看片 | 欧美重口另类在 | 国产老妇真 | 精品日韩成人欧美 | 日韩激情网 | 日本中文字幕免费 | 91九色在线视频 | 日韩影院 | 日韩欧美第一 | 日本电影中文字 | 欧美性十八 | 欧美中文字幕在线视 | 国产在线第一页 | 国产极品一区 | 欧美做a一级视频 | 国产专区日韩欧美色 | 国产日韩欧美色片 | 国产综合精品在线 | 日韩精品在 | 国产精品观看 | 精品推荐 | 日韩专区欧美 | 国产免费爽爽视频 | 91免费看片| 日产中文字乱码 | 国产欧美日韩在线视 | 国产亚洲精爱浪 | 国产精品一区在线麻 | 日韩欧美第一页 | 日本欧美视频在线看 | 午夜国产视频 | 国产午夜小视频 | 日韩精品在线免费 | 精品一精品国产一级 | 国产在线视频琪琪 | 国产伦理片在线观看 | 日韩精品真| 欧美日韩国产首页 | 国产主播在线资源网 | 欧美中文日韩 | 国产精品永久 | 国产真实乱在线更新 | 日本一二区在线观看 | 国产福利精品视频 | 国产精品免费精 | 国产乱伦日本中文 | 91桃色在线看片 | 日韩国产制服在线 | 91黑料精 | 国产又粗又猛又爽又 | 尤物国产| 人伦小说视频在线 | 国产亚洲观看日韩 | 国产亚洲一 | 国产精品之国产精品 | 成人h片在线 | 97成人伦理| 日韩第一页在线观看 | 无码av岛国片在线观看网站 | 欧美性精品h | 精品精品欲天堂导航 | 国产欧美一 | 国偷自产婷婷 | 青娱乐极品视频中 | 日本xxxx免费 | 日本乱码视频文字幕 | 精品免费国产影视 | 动漫番肉在线观看 | 国产精品成人 | 欧美日韩电影一级 | 成人性生交大免费看 | 欧美专区在线观看 | 国产初次视频观看 | 日本aⅴ精品 | 国产萝控精品福利 | 国产午夜电影免费 | 国产在线2025| 国产白丝喷水 | 91aiai| 漂亮大学 | 国产主播在线播放 | 日韩精品亚洲专 | 精品欧美一区二 | 日韩一级簧片 | 欧美一区二区日韩 | 欧美日韩国产 | 中文字幕日韩综合网 | 欧美日韩亚洲精品 | 区三区日韩精品 | 精品日韩产品 | 国产精品专区第1页 | 日韩日午夜人精品 | 日韩欧美色射高 | 国产日韩精品在线 | 国产拍拍拍精品视频 | 国产乱伦日本中文 | 精品在线免费观看 | 国产福利在线小视频 | 国产福利影院 | 国产精国产精品 | 日韩一级大片国产 | 国产稀缺资源在线播 | 日本中文字幕亚洲东 | 欧美三级美国一 | 动漫番肉在线观看 | 国产色宗合 | 成人色神马九九 | 午夜成人看片日韩 | 国产韩国日 | 国产精品免费久 | 无码av免费一区二区三区 | 精品一区卡2卡3卡 | 中文字幕日韩电影 | 国产又爽又粗又湿 | 日韩精品影院 | 91免费视频网址 | 日韩影视网 | 国产欧美日本不卡 | 欧美日韩视频网站 | 欧洲女人性开放视 | 福利导航在线 | 午夜99| 欧美日韩中文在线 | 91香蕉国产在线 | 91直播| 人人看人人干 | 国产欧美高清视频 | 欧美日韩色综合网站 | 欧美日韩精 | 国产午夜福利电影h | 97无吗 | 日韩国产传媒 | 人人摸人人草 | 91人人人人伦理片 | 精品国产品香蕉在 | 国产91对白| 日韩视频不卡在线 | 日本午夜福利日韩 | 国产精品视频一 | 最新日本高清视频免费在线观看 | 国产午夜福利在线看 | 品善网日本在线 | 日韩免费在线电影 | 91一区| 国产精品∧ | 国产日韩综合 | 日韩主播大秀在 | 国产原创剧 | www.黄瓜视频 | 国语视频二区 | 国产美女一级 | 午夜日韩视频 | 国产专区日韩欧美色 | 国产精品第57页 | 成人a视频在线观看 | 国产乱理伦 | 91po国| 欧亚日韩| 国产特黄特 | 国产91色在线日韩 | 91日韩视频| 日本成人免费观看 | 国产a∨天天免 | 欧美亚洲国 | 国产极品国产极品 | 99偷拍| 日本电影在线观看黄 | 国产视频一区在线 | 中文字幕在线观看 | 日本成年人的色色爱 | 国产午夜| 成人免费视频在 | 欧美日韩国产港台 | 欧美日韩电影一级 | 日韩精品三区 | 国外精品| 91麻精品| 区二区欧| 国产手机精品一区 | 看片视频区一区二 | 国内成人一区 | 国产乱对白刺激视频 | 18分钟处破好 | 国产精品一 | 国产中文字幕欧美 | 韩日一区 | 国产91免费不 | 国产淫脚在线观看 | 日韩国标| 国内精品在线国内 | 不卡一卡二卡三 | 国产91精品一区二 | 日本中文一区在线 | 国产女女| 亚洲无码1区 | 91九色老熟女免费 | 成人第一区 | 国产精品日韩精品 | 看中文欧美性爱大片 | 午夜三级中文不 | 激情五月天色五月 | 日本中文字幕在线看 | 国产久免费在线观看 | 福利吧导航 | 国产午夜网色淫 | 国产真实乱 | 日韩成人国产精品视 | 91蜜桃传媒吴梦梦 | 国产精品情侣 | 日韩午夜影院伦理片 | 国产美女遭 | 国产白丝一区二区 | 国产精品强上在线 | 日韩超燃电影院免 | 国产最新在线观看 | 国产夏晴子免费福利 | 日本在线一 | 国产极品精品免费 | 欧美日韩精品二区 | 国产亚洲制服 | www日本色清 | 中文字幕视频二区 | 97热久| 日本不卡精品 | 国产午夜网站 | 日本丁香视 | 日本欧美视频在线看 | 国产极品国产极品 | 日韩欧美永久中文 | 国产尤物在 | 女同在线视频一区 | 97在线人人 | 91社区在线视频 | 精品精品 | 日韩精品亚洲a | 欧美三级不 | 乱辈通轩系列小 | 岛国不卡 | 日本精品在线看 | 欧美一级国 | 国产噜噜噜精品免费 | 国产激情中文在线 | 欧美日韩黄 | 国内视频在 | 国产日韩一二三四区 | 国产拳头 | 成人专区成人专区 | 中文字幕在线视频 | 国产亚洲视品在线 | 九九九福利 | 欧美在线中文 | 国产成本| 日本一二三高清 | 欧美日韩亚洲第 | 日韩精品一区二区三 | 国产在线你懂 | 国产污污免费网站 | 国产91区 | 午夜国产精品秘 | 区二区视频在线观看 | 国产精品欧美日韩 | 国产精品一区91 | 精品亚洲影视自拍 | 国产理论片 | 国产精品自产拍高 | 日本成人一a级黄 | 午夜福利在线观看 | 日韩在线一区 | 日韩欧美精品小视频 | 国语自产拍在线观 | 成人拍拍| 区三区夜夜嗨 | 国产热热热热 | 国内大学生精品 | 国产精品视频美女网 | 国产三級精品专区 | 国产愉拍99线观看 | 午夜成人国产 | 国产福利在线观看片 | 午夜性刺激在线观看 | 欧美在线精 | 成人午夜爽 | 国产熟女精品专区 | 国产伦理一区二区 | 日本大片视频 | 精品免费观看 | 国产后入清纯学生妹 | 国产性夜夜春夜夜爽 | 欧美在线日韩在线 | 国产午夜艹逼 | 午夜免费一级视频 | 日韩精品国产一级 | 福利影视 | 国产高清在线看 | 国产亚洲宗合激 | 国产精品中文字幕组 | 成人a网站| 欧美在线精品国自产 | 老司国产| 成人一区在线观看 | 精品露脸国产偷人 | 国产精品资源站在线 | 国产呦啪精品 | 人人干操| 国产免费永久在线观 | 99热在线精品7| 欧美综合影视自拍 | 91九色字幕资源网 | 国语自产拍 | 欧美日韩在99线 | 国产偷窥熟女 | 日韩欧美国产另 | 国产黄页网址大全 | 日本成人一a级黄 | 国产不卡在线二区 | 国产清纯| 日韩一三区免费影视 | 91视频网站免费 | 日韩欧美一二三 | 精品国产一| 成人观看的视频三级 | 日本成人免费在线 | 成人午夜亚洲精品无 | 精品综合精品自拍 | 伦理影院在线观看 | 国产自偷自拍 | 国产精华 | 日本三级在线视频 | 成人一区不卡播放 | 国产xx在线观看 | 午夜成人激情视频 | 激情图区就去干 | 喷水在线播放黄 | 国产91免费| 日本成人免费网址 | 中文字幕免 | 不戴套干| 欧美性十八 | 福利在线91 | 91精品秘入口观看 | 国国产综合在线观看 | 韩国十九| 97人操人 | 欧美午夜在线视频 | 91美剧网| 成人免费视频大全 | 国产二区在线播放 | 国产精品自拍第一页 | 国产午夜视 | 韩国理论片在线看 | 精品综合国产高清 | 日韩a√在线观看 | 午夜成人看片日韩 | 国产在在 | 成人爱情 | 国语第一次处破女 | 91极品蜜桃臀 | 国产乱视频 | 国产福利众筹视频 | 国产老熟女狂叫对白 | 区三区国产高清视频 | 成人精品玖玖资源 | 午夜探花 | 国产私拍福利精 | 国产天天看免 | 国产在线拍偷自 | 国产高清自拍一区 | 91写真视频 | 国产网址 | 门国产乱| 动漫成人亚洲3D | 欧美日韩国产在线人 | 国产在线观看精品 | 日本三级在线视频 | 成人色综合网 | 午夜成人影院在线 | 区三区日韩精品 | 日本在线播放一 | 国产刺激在线观看 | 欧美亚洲在线观看 | 福利灾难电影 | 日韩亚洲产在线观看 | 国产传媒京东 | 成人尤物| 欧美亚洲日韩国 | 欧美一级爽快片婬 | 日本午夜福利剧场 | 国产玉足脚交 | 福利站导航 | 国产自产25区 | 久热这里只有 | 日韩成人精品 | 欧美日韩一区二区三 | 91免费在线观看 | 成人导航在 | 精品三级影视亚洲 | 日本中文字幕视频久 | 日本公与 | 日本三级网站 | 日韩福利在线视频 | 日韩在线观看视频 | 国产欧美日韩久 | 人性情感短| 国产老妇伦| 日本中文高清国产 | 国产宗合色| 无码av永久免费专区无毒 | 日韩小片| 国产偷窥不卡视频 | 91热爆在线 | 97超级碰碰碰 | 午夜日韩 | 午夜亚洲一区二区福 | 青青爽在线视频精品 | 成人午夜福利A视频 | 午夜成人影院在线看 | 国产乱子 | 另类图片 | 日韩欧美激情刺激 | 91丨熟女丨对白 | 国产一区精品自拍 | 国产亚洲成aⅴ | 国产女同精品9 | 人妖性爱影院 | 国产91福利在线 | 欧美一级特 | 日韩精品在线免费 | 国产欧美日本精品 | 日韩高清电影网 | 日韩xo影院 | 日韩午夜在线观看 | 国产精选线路一 | 欧美日韩精品网 | 国产在线拍偷自 | 精品福利导航 | 乱伦视频网站 | 精品国产福利片在 | 成人免费视频在 | 国产精品二三区 | 国产专区日韩欧美色 | 国产萝控精品福利 | 午夜一级高清免费看 | 日本乱伦网站 | 国产精品偷伦费看 | 精品国产自在现线看 | 成人精品HD| 伦午夜视频观看 | 精品国产乱 | 国产男女爽爽 | 岛国资源在线视频网 | 欧美午夜视频一区 | 日韩美女免费在线 | 中文字幕乱倫视频 | 国产xxxx视频| 欧美性十八变态另类 | 日韩在线一区卜 | 99惹99| 精品一区二区在线视 | 乱子轮熟睡1区 | 国产欧美一v精品 | 青青热在| 国产拍在线2025 | 国产二区三区 | 成人污污污w | 成人动漫一区二区 | 日本成年人视频网站 | 午夜福利影视 | 欧美另类吹潮 | 午夜电影网首页 | 91色啪|