精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript項目優(yōu)化總結(jié)

開發(fā) 前端 項目管理
前端時間對公司已有項目JavaScript代碼進(jìn)行優(yōu)化,本文的是對優(yōu)化工作的一個總結(jié),拿出來與大家分享。當(dāng)然我的優(yōu)化方式可能并不是最優(yōu)的,或者說有些不對的地方,請指教。

前端時間對公司已有項目JavaScript代碼進(jìn)行優(yōu)化,本文的是對優(yōu)化工作的一個總結(jié),拿出來與大家分享。當(dāng)然我的優(yōu)化方式可能并不是最優(yōu)的,或者說有些不對的地方,請指教。

JavaScript優(yōu)化總結(jié)分為以下幾點(diǎn)

優(yōu)化前后對比

模塊化(類編程):代碼清晰、有效防止變量污染問題、代碼重用方便擴(kuò)展等;

JavaScript壓縮混淆:減少size優(yōu)化加載時間,混淆保護(hù)代碼;

JavaScript文件合并:減少http請求優(yōu)化網(wǎng)絡(luò)耗時提升性能;生成文檔:方便公共庫的使用,查找接口方便。

模塊化(類編程)

對于靜態(tài)類來說JavaScript實現(xiàn)比較簡單,使用Object直接量就已經(jīng)夠用了;但是要創(chuàng)建實例化、可繼承經(jīng)典的類需要做一番工作。因為JavaScript是基于原型的(prototype-based)編程語言,并沒有包含內(nèi)置類的實現(xiàn)(它沒有訪問控制符,它沒有定義類的關(guān)鍵字class,它沒有支持繼承的extend或冒號,它也沒有用來支持虛函數(shù)的virtual等),但是我們通過JavaScript可以輕易地模擬出經(jīng)典的類。

靜態(tài)類

根據(jù)寶寶JS公共接口的特性,它們不需要實例化,所以優(yōu)化使用了該方式。下面以PetConfigParser為例介紹下實現(xiàn)方式:

  1. var PetConfigParser;  
  2. if (!PetConfigParser) {  
  3.     PetConfigParser = {};  
  4. }  
  5. (function () {  
  6.     //private 變量、函數(shù)  
  7.     /**  
  8.      * 寶寶所有配置字典,以【cate * 10000 + (lvl - 1) * 10 + dex - 1】為key  
  9.      * @attribute    petDic  
  10.      * @type {Object}  
  11.      * @private  
  12.      */ 
  13.     var petDic = null;  //寶寶字典  
  14.     /**  
  15.      * 根據(jù)__pet_config構(gòu)建一個Object字典,以cate、dex、lvl組合作為key  
  16.      * @method buildPetDic  
  17.      * @private  
  18.      * @return {void}  
  19.      */ 
  20.     function buildPetDic() {  
  21.         petDic = new Object();  
  22.         for (var item in __pet_config) {  
  23.             var lvl = parseInt(__pet_config[item]['lvl']);  
  24.             var dex = parseInt(__pet_config[item]['dex']);  
  25.             var cate = parseInt(__pet_config[item]['cate']);  
  26.             var key = cate * 10000 + (lvl - 1) * 10 + dex;  
  27.             petDic[key] = __pet_config[item];  
  28.         }  
  29.     }  
  30.     //public 接口  
  31.     /**  
  32.      * 根據(jù)寶寶id,讀取__pet_config中對應(yīng)寶寶的信息  
  33.      * @method getPetById  
  34.      * @param   {String/int} petId 寶寶id  
  35.      * @return  {Object} pet 寶寶的所有靜態(tài)信息,如{id:"300003289", lvl:"1", dex:"2", price:"200", life:"2592000", cate:"3", name:"飛天小使等級1熟練2", intro:"", skill:"護(hù)身符", skill1_prob:"30", skill2_prob:"0"}  
  36.      */ 
  37.     if (typeof PetConfigParser.getPetById !== 'function') {  
  38.         PetConfigParser.getPetById = function (petId) {  
  39.             var pet = ("undefined" == typeof (__pet_config)) ? null : __pet_config["pet_" + petId];  
  40.             return pet;  
  41.         }  
  42. }  
  43. })();  

這種方式利用了JavaScript匿名函數(shù)來創(chuàng)建私有作用域,這些私有作用域只能在內(nèi)部訪問。總結(jié)上述過程分為以下幾個步驟:

定義一個全局的變量(var PetConfigParser),注意變量首字母大寫與普通變量區(qū)別;

然后創(chuàng)建一個匿名函數(shù)并運(yùn)行( (function () {/*xxxx*/ })(); ),在匿名函數(shù)內(nèi)部創(chuàng)建局部變量和函數(shù),它們只能在當(dāng)前作用域中被訪問到;

全局變量(var PetConfigParser)可以在任何地方訪問到,在匿名函數(shù)內(nèi)部操作PetConfigParser添加靜態(tài)函數(shù)。

使用實例:

  1. $(function () {  
  2.         DialogManager.init();  
  3.         $('#showDialog').click(function () {  
  4.             DialogManager.show("#msgBoxTest""#closeId");  
  5.             return false;  
  6.         });  
  7.         $('#cofirmBtn').click(function () {  
  8.             DialogManager.hide();  
  9.             return false;  
  10.         });  
  11. }) 

#p#

實例類

JavaScript實現(xiàn)經(jīng)典的類,總結(jié)有三種方法:

構(gòu)造函數(shù)方式;

原型方式;

構(gòu)造函數(shù)+原型的混合方式

構(gòu)造函數(shù)方式

構(gòu)造函數(shù)用來初始化實例對象的屬性和值。任何JavaScript函數(shù)都可以用作構(gòu)造函數(shù),構(gòu)造函數(shù)必須使用new運(yùn)算符作為前綴來創(chuàng)建新的實例。

  1. var Person = function (name) {  
  2.     this.name = name;  
  3.     this.sayName = function(){  
  4.         alert(this.name);  
  5.     };  
  6. }  
  7. //實例化  
  8. var tyler = new Person("tylerzhu");  
  9. var saylor = new Person("saylorzhu");  
  10. tyler.sayName();  
  11. saylor.sayName();   
  12. //檢查實例  
  13. alert(tyler instanceof Person); 

構(gòu)造函數(shù)方式跟傳統(tǒng)的面向?qū)ο笳Z言是不是很相識!只不過是class關(guān)鍵字用function替換了。

注意:不要省略new否則Person(“tylerzhu”) //==>undefined。當(dāng)使用new關(guān)鍵字來調(diào)用構(gòu)造函數(shù)時,執(zhí)行上下文(context)從全局對象(window)變成一個空的上下文,這個上下文代表了新生成的實例。因此,this關(guān)鍵子指向當(dāng)前創(chuàng)建的實例。所以省略new時,沒有進(jìn)行上下文切換會在全局對象中查找name,沒有找到而創(chuàng)建一個全局變量name返回undefined。

原型方式

構(gòu)造函數(shù)方式簡單,但是存在一個浪費(fèi)內(nèi)存的問題。如上面的例子中實例化了兩個對象tyler、saylor,表面上好像沒什么問題,但是實際上對于每一個實例對象,sayName()方法都是一模一樣的內(nèi)容,每一次生成一個實例,都必須為重復(fù)的內(nèi)容申請內(nèi)容。

alert(tyler. sayName == saylor. sayName) 輸出false!!!

Javascript中每一個構(gòu)造函數(shù)都有一個prototype屬性,指向另一個對象。這個對象的所有屬性和方法,都會被構(gòu)造函數(shù)的實例共享。

  1. var Person = function (name) {  
  2.     Person.prototype = name;  
  3.     Person.prototype.sayName = function(){  
  4.         alert(this.name);  
  5.     }  
  6. }  
  7. //實例化  
  8. var tyler = new Person("tylerzhu");  
  9. var saylor = new Person("saylorzhu");  
  10. tyler.sayName();  
  11. saylor.sayName();  
  12. //檢查實例  
  13. alert(tyler instanceof Person); 

這時tyler、saylor實例的sayName方法,都是同一個內(nèi)存地址(指向prototype對象),因此原型方法更節(jié)省內(nèi)存。

但是看tyler.sayName();saylor.sayName();兩者輸出,會看出問題 —— 它們都輸出“saylorzhu”。因為原型所有屬性都共享,只要一個實例改變其他的都會跟著改變,所以實例化對象saylor覆蓋了tyler。

構(gòu)造函數(shù)+原型的混合方式

構(gòu)造函數(shù)方式可以為同一個類的每一個對象分配不同的內(nèi)存,這很適合寫類的時候設(shè)置屬性;但是設(shè)置方法的時候我們就需要讓同一個類的不同對象共享同一個內(nèi)存了,寫方法用原型的方式最好。所以寫類的時候需要把構(gòu)造方法和原型兩種方式混合著用(很多類庫提供的創(chuàng)建類的方法或框架的寫類方式本質(zhì)上都是:構(gòu)造函數(shù)+原型)。

  1. var Person = function (name) {  
  2.     Person.prototype = name;  
  3.     Person.prototype.sayName = function(){  
  4.         alert(this.name);  
  5.     }  
  6. }  
  7. //實例化  
  8. var tyler = new Person("tylerzhu");  
  9. var saylor = new Person("saylorzhu");  
  10. tyler.sayName();  
  11. saylor.sayName();  
  12. //檢查實例  
  13. alert(tyler instanceof Person); 

這樣即可通過構(gòu)造函數(shù)構(gòu)造不同name的人,對象實例也都共享sayName方法,不會造成內(nèi)存浪費(fèi)。

#p#

JavaScript壓縮/合并

JavaScript代碼壓縮混淆的意義:簡單的說就是為了減小js文件大小,去掉多余的注釋和換行縮進(jìn)等,使得下載起來更快,提高用戶體驗。

JavaScript壓縮工具有很多,我推薦使用jQuery現(xiàn)在使用的工具UglifyJS(jQuery以前也使用過多種壓縮工具,如Packer),因為它壓縮性能很好。

“jQuery 1.5 發(fā)布的時候 john resig 大神說所用的代碼優(yōu)化程序從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意”

下面是官方性能對比:We’re still a lot better than YUI in terms of compression, though slightly slower. We’re still a lot faster than Closure, and compression after gzip is comparable.

 

#p#

Uglifyjs安裝

UglifyJS是基于 NodeJS 的Javascript語法解析/壓縮/格式化工具,所以我們要安裝NodeJS。

N ode.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

JavaScript最早是運(yùn)行在瀏覽器中,然而瀏覽器只是提供了一個上下文,它定義了使用JavaScript可以做什么,但并沒有“說”太多關(guān)于JavaScript語言本身可以做什么。事實上,JavaScript是一門“完整”的語言: 它可以使用在不同的上下文中,其能力與其他同類語言相比有過之而無不及。Node.js事實上就是另外一種上下文,它允許在后端(脫離瀏覽器環(huán)境)運(yùn)行JavaScript代碼。

要實現(xiàn)在后臺運(yùn)行JavaScript代碼,代碼需要先被解釋然后正確的執(zhí)行。Node.js的原理正是如此,它使用了Google的V8虛擬機(jī)(Google的Chrome瀏覽器使用的JavaScript執(zhí)行環(huán)境),來解釋和執(zhí)行JavaScript代碼。

除此之外,伴隨著Node.js的還有許多有用的模塊,它們可以簡化很多重復(fù)的勞作,比如向終端輸出字符串。因此,Node.js事實上既是一個運(yùn)行時環(huán)境,同時又是一個庫。

Windows下面直接下載exe文件執(zhí)行即可。(http://nodejs.org/

C:\Users\tyler>node -v
 

v0.8.2

設(shè)置代理(公司網(wǎng)絡(luò)不設(shè)置代理無法下載,外網(wǎng)環(huán)境不需要)

“npm,全稱是"node packagemanager",它是node包管理器,第三方的package全是通過npm去安裝的。”

為npm設(shè)在代理

npm config set proxy=http://proxy.tencent.com:8080

為npm默認(rèn)選擇http方式,不選用https

 npm config set registry http://registry.npmjs.org

npm安裝uglify-js

npm –g install uglify-js

驗證安裝是否成功

C:\Users\tyler>npm -v

1.1.36

UglifyJS使用

文件參數(shù)應(yīng)該放在選項后面,uglifyjs 會讀取文件中的javascript代碼進(jìn)行處理。如果你不指定輸出的文件名,那么他會把處理后的內(nèi)容輸出到命令行中。

支持的選項:

-b 或 --beautify - 輸出格式化代碼,當(dāng)傳入該參數(shù),下面的附加選項用于更美觀的控制格式化:

-i N 或 --indent N - 縮進(jìn)級別(空格數(shù)量)

-q 或 --quote-keys - 是否用引號引起字符串對象的鍵(默認(rèn)只會引起不能被正確標(biāo)志的鍵名)

--ascii -默認(rèn) UglifyJS 不處理字符編碼而直接輸出 Unicode 字符,通過傳入該參數(shù)將非ASCII編碼的字符轉(zhuǎn)化為\cXXXX的序列(輸出總按照UTF8編碼,但傳入該選項能得到ASCII編碼的輸出)。

-nm 或 --no-mangle - 不改變變量名稱

-ns 或 --no-squeeze - 不調(diào)用 ast_squeeze() 函數(shù)(該函數(shù)會做多種優(yōu)化使得結(jié)果更小,可讀性略有降低)

-mt 或 --mangle-toplevel - 在頂級作用域打亂變量名稱(默認(rèn)不開啟)

--no-seqs - 當(dāng)調(diào)用 ast_squeeze() 將會合并多個語句塊為一個語句塊,如 "a=10; b=20; foo()" 將被轉(zhuǎn)換為 "a=10,b=20,foo()"

--no-dead-code - 默認(rèn) UglifyJS 將會刪除不被用到的代碼,傳入該參數(shù)禁用此功能。

-nc 或 --no-copyright - 默認(rèn) uglifyjs 會在輸出后的代碼中添加版權(quán)信息等注釋代碼,傳入該參數(shù)禁用此功能。

-o 文件名 或 --output 文件名 - 指定輸出文件名,如果不指定,則打印到標(biāo)準(zhǔn)輸出(STDOUT)

--overwrite - 如果傳入的JS代碼來自文件而不是標(biāo)準(zhǔn)輸入,傳入該參數(shù),輸出會覆蓋該文件。

--ast - 傳入該參數(shù)會得到抽象的語法樹而不是Javascript,對調(diào)試或了解內(nèi)部代碼很有用。

-v 或 --verbose - 在標(biāo)準(zhǔn)錯誤輸出一些信息(目前的版本僅輸出操作用時)

--extra - 開啟附加優(yōu)化,這些優(yōu)化并未得到全面的測試。

--unsafe - 開啟其他附加優(yōu)化,這些優(yōu)化已知在特定情況下并不安全,目前僅支持:

foo.toString() ==> foo+””

--max-line-len (默認(rèn)32K字節(jié)) - 在32K字節(jié)出增加換行符,傳入0禁用此功能。

--reserved-names - 一些類庫會依賴一些變量,該參數(shù)指定的名稱不會被混淆掉,多個用逗號隔開

下面是我們使用uglifyjs壓縮,PetConfigParser.js的例子:

  1. uglifyjs -nc -mt PetConfigParser.js > PetConfigParser.min.js 

PetConfigParser.js壓縮前后對比

#p#

JavaScript文件合并

規(guī)則1——減少HTTP請求(Minimize HTTP Requests)。Yahoo前端優(yōu)化性能規(guī)則[5]

只有10%~20%的最終用戶響應(yīng)時間花在接收請求的HTML文檔上,剩下的80%~90%時間都花在HTML文檔所引用的所有組件(圖片、腳本、樣式表、Flash等)進(jìn)行的HTTP請求上。因此,改善響應(yīng)時間最簡單的辦法就是減少組件數(shù)量并由此減少HTTP請求數(shù)。

對公共庫合并壓縮在減少size的同時,減少http請求優(yōu)化網(wǎng)絡(luò)耗時提升性能。

文檔生成

YUIDoc 是一個基于 Node.js 的應(yīng)用程序,用來根據(jù) JavaScript 的注釋中生成 API 文檔,類似 JavaDoc、ASDoc,這也是當(dāng)前 YUI 用來生成文檔的工具。

YUIDoc安裝與使用

YUIDoc安裝

與UglifyJS一樣,YUIDoc也是基于Nodejs的一個應(yīng)用程序,使用npm安裝即可。

  1. npm -g install yuidocjs. 

校驗安裝是否成功

  1. C:\Users\tyler>yuidoc -v  
  2. 0.3.15 

生成文檔(一次性生成)yuidoc .

一次性生成該目錄及其子目錄下所有JS的文檔 默認(rèn)在不配置的情況下會生成在當(dāng)前目錄的out目錄中。

  1. -o, --out <directory path> Path to put the generated files (defaults to ./out) 

生成文檔(實時生成)

YUIDoc還提供了一種實時文檔生成的方式,有利于團(tuán)隊協(xié)作開發(fā) 比如在SVN上部署YUIDoc實時文檔,遞交到SVN的代碼都會及時生成文檔提供團(tuán)隊使用查閱

  1. yuidoc --server  

默認(rèn)開放監(jiān)聽當(dāng)前目錄文件變動,開放3000端口 可以通過http://127.0.0.1:3000/,來訪問文檔 如果3000端口被占用,也可以指定特定端口號

  1. yuidoc --server 5000 

來通過開放5000端口提供文檔訪問

#p#

YUIDoc標(biāo)簽

要使用YUIDoc,那么所有注釋都得安裝YUIDoc的標(biāo)準(zhǔn)來,否則不能正確解析出文檔。YUIDoc使用的標(biāo)簽和其它語言類同,比較容易理解。下面不詳細(xì)說明每個標(biāo)簽,只列舉幾個例子,具體可參加官方文檔。例如:

對PetConfigParser類進(jìn)行注釋:

  1. /**  
  2.  * 寶寶配置文件解析,及提供查詢寶寶配置相關(guān)的操作方法<br/>  
  3.  * 1. getPetById 根據(jù)寶寶id獲取對應(yīng)寶寶的信息<br/>  
  4.  * 2. getPetName 根據(jù)寶寶的id,讀取寶寶信息,然后拼接出寶寶的名字,如3+10天蝎寶寶<br/>  
  5.  * 等等<br/>  
  6.  * @author tylerzhu  
  7.  * @class PetConfigParser  
  8.  * @static  
  9.  */ 

對類中的變量進(jìn)行注釋:

  1. /**  
  2.     * 寶寶所有配置字典,以【cate * 10000 + (lvl - 1) * 10 + dex - 1】為key  
  3.     * @attribute    petDic  
  4.     * @type {Object}  
  5.     * @private  
  6.     */ 

對類中函數(shù)進(jìn)行注釋:

  1. /**  
  2.      * 根據(jù)寶寶id,讀取__pet_config中對應(yīng)寶寶的信息  
  3.      * @method getPetById  
  4.      * @param   {String/int} petId 寶寶id  
  5.      * @return  {Object} pet 寶寶的所有靜態(tài)信息,如{id:"300003289", lvl:"1", dex:"2", price:"200", life:"2592000", cate:"3", name:"飛天小使等級1熟練2", intro:"", skill:"護(hù)身符", skill1_prob:"30", skill2_prob:"0"}  
  6.      */ 

默認(rèn)生成的文檔樣式如下:

clip_image005

參考鏈接、進(jìn)一步閱讀

[1]NodeJS,http://nodejs.org/

[2]UglifyJS,https://github.com/mishoo/UglifyJS/

[3]用UglifyJS解析/壓縮/格式化你的Javascript,http://goo.gl/bwf8U

[4]Yahoo前端優(yōu)化性能規(guī)則,http://goo.gl/nfEBg

[5]用YUIDoc文檔化JavaScript代碼,http://goo.gl/5RJxn

[6]YUIDoc官方,http://yui.github.com/yuidoc/

原文鏈接:http://www.cnblogs.com/skynet/archive/2012/08/14/2639066.html

【編輯推薦】

  1. JavaScript實現(xiàn)HTML5重要語言
  2. JavaScript,只有你想不到
  3. JavaScript面試后的反思
  4. JavaScript制作新浪網(wǎng)易的評論塊
  5. JavaScript 鉤子機(jī)制
責(zé)任編輯:張偉 來源: 吳秦的博客
相關(guān)推薦

2013-01-21 10:19:50

JavaScript項目管理JS

2017-12-04 12:29:15

前端JavaScript性能優(yōu)化

2020-12-17 07:52:38

JavaScript

2021-08-27 14:26:06

開發(fā)技能React

2019-05-07 11:24:07

ReactJavascriptTypescript

2024-09-14 11:23:19

2022-08-31 12:15:09

JavaScript代碼優(yōu)化

2022-05-23 13:44:53

前端開發(fā)優(yōu)化

2019-02-25 07:07:38

技巧React 優(yōu)化

2012-09-11 15:43:32

HBase

2009-01-11 09:14:45

Javascript開發(fā)總結(jié)

2015-07-02 11:17:30

MySQLSlave延遲優(yōu)化

2011-07-13 09:46:23

javaScript

2021-05-17 09:27:07

項目實戰(zhàn)優(yōu)化項目構(gòu)建時間

2015-09-15 08:30:23

Android代碼優(yōu)化

2011-06-20 14:22:58

外鏈

2009-12-24 16:46:03

WPF性能優(yōu)化

2024-08-20 17:37:37

2016-12-19 10:00:00

React性能優(yōu)化

2009-02-17 11:23:08

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

免费的av在线| 国产精品久久久久9999| av2014天堂网| 在线视频欧美亚洲| 久久久久久久久久久久久久久久久久| 91精品国产91综合久久蜜臀| 日韩av中文字幕第一页| 国产资源在线播放| 国产精品69久久久久水密桃| 欧美亚洲一区在线| 亚洲熟女乱综合一区二区| 黄色影院在线看| 精品无人码麻豆乱码1区2区| 欧美极品欧美精品欧美视频| 成人性生交大免费看| 免费观看亚洲视频大全| 欧美午夜激情小视频| 99亚洲精品视频| 欧美女v视频| 国产成人免费高清| 国产在线观看一区二区三区| 国产精品视频免费播放| 中文字幕一区二区三区欧美日韩 | 欧美成人一二三| 日本黄色网址大全| jizzjizzjizz欧美| 91麻豆精品国产91久久久久久久久| 国产精品沙发午睡系列| 欧美日韩经典丝袜| 国产精品的网站| 茄子视频成人在线观看| 老熟妇高潮一区二区高清视频| 久久精品av| 国产视频自拍一区| 日本50路肥熟bbw| 精品视频一区二区三区| 欧美日韩亚洲综合一区二区三区| 久久精品国产精品亚洲色婷婷| 污视频免费在线观看| 国产精品久久久久久久第一福利| 蜜桃久久精品乱码一区二区| 黑人精品一区二区| 国产精品一区二区视频| 成人久久一区二区三区| 伊人免费在线观看| 美女视频黄 久久| 日韩亚洲欧美中文在线| 久久精品国产亚洲AV熟女| gogo人体一区| 欧美一区二区性放荡片| 久国产精品视频| 国产第一页在线视频| 亚洲欧美日韩综合aⅴ视频| 亚洲日本精品| 欧美午夜电影一区二区三区| 中文av字幕一区| 色视频一区二区三区| 成人高清网站| 国产精品久久久久天堂| 亚洲国产精品综合| 在线观看h片| 国产精品一区二区果冻传媒| 成人福利网站在线观看11| 亚洲一区二区天堂| 国产一区二区三区日韩| 亚洲自拍偷拍网址| 亚洲国产中文字幕在线| 丝袜国产日韩另类美女| 国产91在线播放精品91| 欧美在线视频精品| 捆绑紧缚一区二区三区视频| 91老司机精品视频| www.久久综合| 日本在线成人一区二区| 亚洲精品乱码久久久久久蜜桃图片| 天堂a√中文在线| 99久久精品国产导航| 国产成人97精品免费看片| √资源天堂中文在线| 久久精品亚洲一区二区| 国产精品视频地址| 国产成人亚洲欧洲在线| 国产偷自视频区视频一区二区| 欧美亚洲成人xxx| 999视频在线| 九一九一国产精品| 成人免费看片网站| 色一情一乱一区二区三区| 久久久亚洲午夜电影| 91最新在线免费观看| www.成人在线观看| 91捆绑美女网站| 亚洲欧洲精品一区| wwww在线观看免费视频| 91久久精品一区二区三| 人妻体体内射精一区二区| 免费观看成人www动漫视频| 欧美区一区二区三区| 亚洲AV无码久久精品国产一区| 国产精品网在线观看| 国产亚洲成精品久久| 欧美特级一级片| 国产亚洲精品v| 成人午夜高潮视频| 视频国产在线观看| 亚洲色欲色欲www| 日本wwww视频| 欧美日韩午夜电影网| 亚洲片在线资源| 久久久香蕉视频| 日韩国产欧美三级| 国产精品视频一区二区三区经| 成年人在线免费观看| 亚洲最新在线观看| 日韩av一卡二卡三卡| 亚洲精品国模| 欧美日韩国产va另类| 欧美丰满熟妇bbbbbb| 夜久久久久久| 亚洲aⅴ男人的天堂在线观看| 午夜在线视频免费| 亚洲理论在线观看| 最近中文字幕一区二区| 美国一区二区| 色综合久久中文字幕综合网小说| 怡红院av久久久久久久| 成+人+亚洲+综合天堂| 国产盗摄视频在线观看| 成人性片免费| 欧美三级韩国三级日本三斤 | av影视在线看| 6080国产精品一区二区| 国产传媒国产传媒| 久久久久久穴| 久久国产主播精品| 国产剧情av在线播放| 精品国产一区二区三区忘忧草 | 国产精品久久久久久av下载红粉| 污视频在线免费观看| 亚洲无线码一区二区三区| 爽爽爽在线观看| 欧美1级片网站| 国产精品日韩专区| 成人综合影院| 欧美性生活大片视频| 免费看污片网站| 亚洲欧美卡通另类91av| 九色一区二区| 这里有精品可以观看| 日韩精品久久久久| 国产高清中文字幕| 国产亚洲欧美在线| 国产精品入口免费软件| 国产原创一区| 上原亚衣av一区二区三区| 国产主播第一页| 国产拍揄自揄精品视频麻豆| av免费网站观看| 蜜桃国内精品久久久久软件9| 热久久美女精品天天吊色| 免费一级在线观看播放网址| 色8久久精品久久久久久蜜| www在线观看免费视频| 手机精品视频在线观看| 亚洲精品一卡二卡三卡四卡| 免费成人黄色网| 欧美日韩不卡合集视频| 日本黄色免费视频| 国产精品乱人伦| 免费在线观看污网站| 欧美日韩网址| 久久国产精品免费一区| 亚洲天堂一区二区| 日韩在线视频网站| 超碰免费在线97| 午夜欧美2019年伦理| 在线 丝袜 欧美 日韩 制服| 日韩电影在线免费观看| 综合视频在线观看| gogo久久日韩裸体艺术| 国产精品99久久久久久www | 国产欧美精品在线观看| 日韩av片专区| 亚洲黑丝一区二区| 日本免费高清一区| 懂色av色香蕉一区二区蜜桃| 日韩精品视频免费在线观看| 无码人妻丰满熟妇奶水区码| 亚洲欧美一区二区视频| 影音先锋人妻啪啪av资源网站| 日韩av一区二区在线影视| 91精品一区二区三区四区| 久久草在线视频| 国产欧美亚洲精品| 激情在线视频播放| 国产一区二区三区视频免费| 国产日韩欧美视频在线观看| 狠狠躁夜夜躁人人爽天天天天97 | 中文精品久久| 欧美久久久久久久| 精品国产亚洲日本| 日本成人黄色片| 污污的视频在线观看| 国产亚洲精品久久久优势| 99热这里只有精品66| 色婷婷精品久久二区二区蜜臂av| 乱h高h女3p含苞待放| 国产亚洲自拍一区| 在线免费看黄色片| 久热成人在线视频| 欧洲av无码放荡人妇网站| 亚洲国产日韩欧美在线| 欧美激情一区二区三区在线视频 | 国产一二三四区| 国产香蕉久久精品综合网| av av在线| 国产一区二区不卡老阿姨| 99久久国产宗和精品1上映| 亚洲图片在线| 美女av免费观看| 欧美肥老太太性生活| 日本黑人久久| 日韩极品在线| 欧美一区三区三区高中清蜜桃| 男女啪啪在线观看| 国产亚洲欧洲高清一区| 午夜福利理论片在线观看| 日韩女优av电影| a在线观看免费| 制服丝袜日韩国产| 在线播放成人av| 欧美无砖专区一中文字| 亚洲成人av影片| 欧美日韩国内自拍| 欧美xxxx黑人xyx性爽| 亚洲欧洲精品成人久久奇米网| 韩国三级hd中文字幕| 国产亚洲精品bt天堂精选| 特级西西人体wwwww| a在线播放不卡| 国产二级一片内射视频播放| 国产99久久久精品| 乱码一区二区三区| 粉嫩欧美一区二区三区高清影视| 日本黄色一级网站| 国产精品资源在线看| av在线网站免费观看| 国产乱人伦偷精品视频不卡| 亚洲黄色片免费看| 国产一区二区0| 中文字幕乱妇无码av在线| 国产一区高清在线| 男人女人拔萝卜视频| 国产69精品久久777的优势| 伊人av在线播放| 成人夜色视频网站在线观看| 伦理片一区二区| 26uuu欧美日本| 欧美人妻一区二区三区| 国产精品国产三级国产a | 免费在线性爱视频| 亚洲嫩模很污视频| www.av在线播放| 久久久国产视频91| 久久不射影院| 日本一区二区不卡| 福利视频亚洲| aaa级精品久久久国产片| 欧美做受69| 涩涩涩999| 正在播放日韩欧美一页| 国产极品在线视频| 三级欧美韩日大片在线看| 尤物国产在线观看| 高清不卡在线观看av| 国产精品三级在线观看无码| 日本一区二区三区dvd视频在线 | 岛国av一区二区| 日本成人一级片| 欧美一区二区三区四区在线观看| 国产麻豆一精品一男同| 亚洲福利精品在线| 东凛在线观看| 色综合视频一区中文字幕| 亚洲伊人av| 91香蕉嫩草影院入口| 国内精品偷拍| 亚洲综合欧美日韩| 99精品国产99久久久久久福利| 冲田杏梨av在线| 粉嫩一区二区三区性色av| 女人十八毛片嫩草av| 亚洲天堂精品在线观看| 青青草成人av| 91麻豆精品久久久久蜜臀| 日本私人网站在线观看| 久久艳片www.17c.com| 福利在线导航136| 国产精品久久久久一区二区| 欧美中文高清| 日本成人黄色免费看| 韩日精品在线| 国产视频手机在线播放| 成人h精品动漫一区二区三区| 欧日韩不卡视频| 欧美日韩在线第一页| a级片免费观看| 日日摸夜夜添一区| 午夜影院在线观看国产主播| 亚洲自拍偷拍视频| 欧美aaaa视频| 国产欧美高清在线| gogo大胆日本视频一区| 久久国产波多野结衣| 欧美亚洲一区三区| 手机在线观看免费av| 日韩三级成人av网| 456亚洲精品成人影院| 精品日韩美女| 亚洲高清不卡| 欧美熟妇精品一区二区| 自拍偷拍亚洲综合| 精品国产www| 亚洲人成电影网| 密臀av在线播放| 国产在线精品一区二区中文| 一区二区三区免费在线看| 亚洲欧洲免费无码| 天堂一区二区在线免费观看| 欲求不满的岳中文字幕| 亚洲一区免费在线观看| a天堂中文在线观看| 久久精品国产69国产精品亚洲| 你懂得影院夜精品a| 蜜桃视频在线观看91| 日韩视频一区| 毛茸茸free性熟hd| 亚洲成人激情自拍| 国产综合在线播放| 欧美激情区在线播放| 日韩在线成人| 黄色成人在线免费观看| 国产福利91精品一区二区三区| www欧美com| 日韩一本二本av| 国产啊啊啊视频在线观看| www.成人av.com| 在线日韩电影| 亚洲成人av免费在线观看| 精品久久久久久久久久久久久久| 天堂av电影在线观看| 欧美在线视频播放| 国内成人自拍| 亚洲色图 在线视频| www.桃色av嫩草.com| 日韩激情视频在线| 亚洲精品一区| 日本一区视频在线播放| 三级在线观看一区二区| 毛片视频免费播放| 91精品午夜视频| 国产精品一品| 精品一区二区不卡| 日本视频一区二区三区| 欧美h片在线观看| 日韩一二在线观看| 久草在线资源福利站| 日韩av高清在线播放| 狠狠狠色丁香婷婷综合激情 | 亚洲综合一二区| 天堂av资源网| 国产精品www| 欧美一区在线看| 在线观看国产网站| 欧美在线三级电影| 亚洲综合伊人久久大杳蕉| 国产日韩亚洲精品| 视频一区免费在线观看| 成人三级视频在线观看| 精品成人私密视频| 欧美日韩亚洲国产| 国产树林野战在线播放| 91亚洲男人天堂| 一本色道久久综合精品婷婷| 欧美成人网在线| 少妇精品久久久一区二区| 亚洲自拍第三页| 精品久久在线播放| 黄色网页在线免费看| 久久99国产精品| 精品影视av免费| 久久露脸国语精品国产91| 综合久久五月天| 久久中文资源| 日韩在线不卡一区| 精品日本美女福利在线观看| 男人的天堂在线视频免费观看| 国产在线视频欧美一区二区三区| 精品一区二区三区在线视频| 西西44rtwww国产精品|