整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          超級實用的Dreamweaver快捷鍵

          超級實用的Dreamweaver快捷鍵

          reamweaver快捷鍵

          dreamweaver的所有快捷鍵、給開發人員快速開發編寫

          代碼的好幫手。這個很不錯哦

          新建文檔 Ctrl+N

          打開一個 HTML文件 Ctrl+O或者將文件從[文件管理器]或[站點]窗口拖動到[文檔]窗口中

          在框架中打開 Ctrl+Shift+O

          另存為 Ctrl+Shift+S

          檢查鏈接 Shift + F8

          退出 Ctrl+Q

          編輯菜單

          重復 Ctrl+Y 或 Ctrl+Shift+Z

          剪切 Ctrl+X 或Shift+Del

          拷貝 Ctrl+C 或Ctrl+Ins

          粘貼 Ctrl+V 或Shift+Ins

          選擇父標簽 Ctrl+Shift+<

          選擇子標簽 Ctrl+Shift+>

          查找和替換 Ctrl+F

          查找下一個 F3

          平衡大括弧 Ctrl+’

          啟動外部編輯器 Ctrl+E

          參數選擇 Ctrl+U

          標準視圖 Ctrl+Shift+F6

          布局視圖 Ctrl+F6

          工具條 Ctrl+Shift+T

          查看頁面元素

          可視化助理 Ctrl+Shift+I

          標尺 Ctrl+Alt+R

          顯示網格 Ctrl+Alt+G

          靠齊到網格 Ctrl+Alt+Shift+G

          頭內容 Ctrl+Shift+W

          頁面屬性 Ctrl+Shift+J

          切換到設計視圖 Ctrl+Tab

          打開快速標簽編輯器 Ctrl+T

          選擇父標簽 Ctrl+Shift+<

          平衡大括弧 Ctrl+’

          查找和替換 Ctrl+F

          查找下一個 F3

          替換 Ctrl+H

          重復 Ctrl+Y

          切換斷點 Ctrl+Alt+B

          向上選擇一行 Shift+Up

          向下選擇一行 Shift+Down

          選擇左邊字符 Shift+Left

          選擇右邊字符 Shift+Right

          向上翻頁 Page Up

          向下翻頁 Page Down

          向上選擇一頁 Shift+Page Up

          向下選擇一頁 Shift+Page Down

          選擇左邊單詞 Ctrl+Shift+Left

          選擇右邊單詞 Ctrl+Shift+Right

          移到行首 Home

          移到行尾 End

          向上選擇到代碼頂部 Ctrl+Shift+Home

          向下選擇到代碼頂部 Ctrl+Shift+End

          編輯文本

          創建新段落 Enter

          插入換行

          Shift+Enter

          插入不換行空格 Ctrl+Shift+Spacebar

          拷貝文本或對象到頁面其他位置 Ctrl+拖動選取項目到新位置

          選取一個單詞 雙擊

          將選定項目添加到庫 Ctrl+Shift+B

          在設計視圖和代碼編輯器之間切換 Ctrl+Tab

          打開和關閉[屬性]檢查器 Ctrl+Shift+J

          檢查拼寫 Shift+F7

          格式化文本

          縮進 Ctrl+]

          左縮進 Ctrl+[

          格式>無 Ctrl+0 (零)

          段落格式 Ctrl+Shift+P

          應用標題1到6到段落 Ctrl+1 到 6

          對齊>左對齊 Ctrl+Shift+Alt+L

          對齊>居中 Ctrl+Shift+Alt+C

          對齊>右對齊 Ctrl+Shift+Alt+R

          加粗選定文本 Ctrl+B

          傾斜選定文本 Ctrl+I

          編輯樣式表 Ctrl+Shift+E

          查找和替換文本

          查找下一個/再查找 F3

          替換 Ctrl+H

          處理表格

          選擇表格(光標在表格中) Ctrl+A

          移動到下一單元格 Tab

          移動到上一單元格 Shift+Tab

          插入行(在當前行之前) Ctrl+M

          在表格末插入一行 在最后一個單元格 Tab

          刪除當前行 Ctrl+Shift+M

          插入列 Ctrl+Shift+A

          刪除列 Ctrl+Shift+ - (連字符)

          合并單元格 Ctrl+Alt+M

          拆分單元格 Ctrl+Alt+S

          更新表格布局(在“快速表格編輯”模式中強制重繪) Ctrl+Spacebar

          處理框架

          選擇框架 框架中Alt+點擊

          選擇下一框架或框架頁 Alt+右方向鍵

          選擇上一框架或框架頁 Alt+左方向鍵

          選擇父框架 Alt+上方向鍵

          選擇子框架或框架頁 Alt+下方向鍵

          添加新框架到框架頁 Alt+從框架邊界拖動

          使用推模式添加新框架到框架頁 Alt+Ctrl+從框架邊界拖動

          于加載精簡來說,最大的好處莫過于對頁面的加速。加速有兩點:

          第一是由于資源加載量減少,對于頁面首屏加載速度的提升;

          第二是某些加載精簡的方法,會在一定程度上加快頁面的渲染速度。

          同時,由于加載量的減少,剩下了一些帶寬,從而減少了帶寬費用。

          當然,事情都有兩面的地方。加載精簡會在一定程度上影響頁面的SEO;部分方法也會造成一些額外的腳本開銷。

          尋找合適你的方法很重要,畢竟每個網站性質、用處、節點都可能不同。比如項目初期,可能宣傳和擴散知名度方面重要些,這時候建議不要大量使用動態生成內容的方式,影響SEO。

          第1章 存儲資源

           1.1 離線存儲

          1.1.1 為了移動

          由于瀏覽器支持情況不同,離線存儲在PC端沒有大量的使用,反而在移動端的支持情況越來越好,如今Android、iOS都能使用離線存儲,所以離線存儲廣泛的使用于離線APP應用。

          對于離線存儲,最重要的便是manifest文件。我們將需要緩存的文件列入cache段,將不需要緩存的內容列入network段即可。

          圖2-1 manifest文件示例

          當瀏覽器加載頁面時,發現manifest文件后,會檢查它的內容是不是有修改,如果是,重新下載cache段的文件并緩存;如果不是,則跳過。

          圖2-2 更新離線緩存

          需要注意的是,當我們使用離線存儲時,瀏覽器會強行只讀離線緩存的文件。我們需要將頁面使用到的所有的資源都列入manifest文件中,不論是在cache段,還是network段。否則瀏覽器將報錯,說找不到文件。

          圖2-3 未將所有文件列入的加載報錯情況

          1.1.2 更新

          對離線存儲的資源更新,需要修改manifest文件的內容。當然,我們一般不會隨意修改文件名已達到修改manifest文件內容的目的。一般的做法是,在文件內新增一行注釋,注釋中寫明目前的版本號,以后每次需要更新的時候,修改版本號就行了。

          圖2-4 第二行即為注釋的版本信息

          另外,我們可能需要功能更加強大的離線存儲緩存更新的機制。試想一個新聞類的APP,我們需要在手機離線時讀取本地存儲的數據,當APP發現用戶聯網后,將讀取在線的內容,更新本地的數據和頁面信息。

          對于圖2-5,我們使用HTML5新提供的online時間在頁面加載的時候判斷手機是否在線。監聽window的online和offline時間,可以判斷手機是不是已經聯網。一旦檢測到手機聯網,我們就可以調用applicationCache對象的update方法,去檢測manifest文件是否有更新,如果有,下載新的版本。當updateready時,使用swapCache方法刷新緩存。

          當然swapCache不能刷新頁面的內容,只是把離線存儲的文件更新成我們下載的新內容,我們還需要再使用JS替換頁面的內容。

          圖2-5 離線存儲進階應用

          1.1.3 殘缺美

          在使用離線存儲的時候,總有些感到不是很爽的地方,列出來吐吐槽。

          首先是兩個更新的問題。我們知道,修改manifest文件后,瀏覽器會重新下載文件,而且是全部重新下載。這其實很蛋疼,有時候我們只需要更新其中一個文件,有點兒殃及池魚的感覺。另外,在更新manifest文件后,我們需要刷新兩次頁面才能將最終的新內容呈現在頁面上。

          然后,如果我有很多文件要存儲,需要把文件一個一個列入cache段里,就算使用程序生成,出來的manifest文件也有一定的體積。對于一個需要緩存300個文件的頁面,使用相對路徑,生成的manifest文件也有4K。在碰上更新的話,下載量有點兒大。

          圖2-6 APP有200多個小圖標需要緩存

          最后,對于同一個頁面的帶參URL路徑,離線存儲會當成不同的新文件進行緩存。如果您有100個不同的參數需要穿,而用戶竟然訪問過這100個文件,那就……

          圖2-7 如果您有100個不同的傳參

          1.2 本地存儲

          1.2.1 本地存儲的方法

          userData是IE提供的一個本地存儲方法,他將需要存儲的內容放置在本地的一個XML文件中,并在頁面的一個元素中設置一個調用的錨點。具體使用方法為:使用getElementById獲取頁面內的一個元素,使用addBehavior(“#default#userData”)對其添加本地存儲的行為;使用setAttribute將需要存儲的內容對其進行賦值,并用save(“XXX”)方法將內容存儲在名為XXX的XML文件中;使用load(“XXX”)方法加載本地的XXX.xml文件,并用getAttribute獲取已經存儲的內容。

          圖2-8 IE的本地存儲數據

          關于HTML5本地存儲localStorage的詳細方法,請參見我的翻譯文章《網絡應用程序本地存儲的前世今生》。

          圖2-9 Chrome的本地存儲數據

          對于IE瀏覽器,使用IE提供的userData方法;對于支持HTML5的瀏覽器(Firefox、Chrome、Safari、Opera等),使用localStorage提供的方法;對于其他瀏覽器使用常規方法加載內容。

          圖2-10 判斷流程

          1.2.2 資源處理

          對于本地存儲,我們可以使用來存儲數據,或者能轉為數據形式的文件。例如一些SEO要求不高的文字,鏈接等等。

          圖2-11 數據存儲

          對于圖片、CSS、JS等文件,我們也可以轉為文本來存儲在本地。這種方式大量應用于移動端。例如《掌上英雄聯盟》APP的圖片大部分都轉化為base64編碼存儲在本地(不用離線存儲的原因前面提及了)。Google和Bing的移動版,也將CSS和JS拆分后本地存儲了。

          圖2-12 腳本的本地存儲

          圖2-13 圖片轉base64編碼后的本地存儲

          另外,對于本地存儲更新,我的做法是:先判斷本地是否存在已存儲的內容,如果沒有數據或者版本已過期(所謂版本是我設置的一個變量,當修改這個變量時即為版本過期),加載相應的JS數據,通過一個函數將數據處理為需要的格式,然后存儲在本地;如果有且版本沒過期,直接從本地獲取數據。接著將數據通過函數進行進一步的處理,插入相對應的結構中。

          圖2-14 本地數據版本判斷

          第2章 按需加載

          2.1 滾動加載

          2.1.1 滾動加載的方法

          其實這是很多大型網站都使用了的方法,比如淘寶、拍拍等等。對于不同顯示器分辨率不同,所以第一屏高度不一樣,節省的加載量所浮動。

          首先,記錄所有需要滾動加載對象的縱坐標值到一個數組。然后使用JS的監聽方法(IE是attachEvent,其他瀏覽器是addEventListener),監聽頁面的scroll事件。一旦頁面滾動,就會執行一個編寫的函數,來判斷對象是否處于瀏覽器的當前一屏內,如果是,將加載對象,如果不是,繼續監聽。當頁面內的所有對象都被加載后,取消監聽。

          圖3-1 執行流程

          對于圖片,滾動頁面后,我們可以看到如圖3-2的效果。

          圖3-2 圖片滾動加載過程

          2.1.2 板塊滾動加載

          其實把每個板塊按照上面說的那種方式,像圖片一樣,滾動加載就可以實現這種效果,類似于bigPipe+Lazyload。

          我們將頁面拆分為框架、板塊、板塊內容,甚至可以細分到板塊樣式、板塊腳本。當頁面滾動完成時,判斷處于當前屏的板塊,動態并行加載板塊內容。這種方式可以大大減少頁面的加載量,但會影響SEO。

          圖3-3 板塊滾動加載方式

          2.2 點擊加載

          2.2.1 形式

          點擊后動態加載有很多形式,這是我們平時使用最多的方式。諸如頁卡、翻頁、展開、下拉、切屏等等都會使用到。以往的我們可能直接在頁面寫入內容,或者使用include載入,并將看不到的內容隱藏掉。但如果用戶并沒有點擊切換,那么直接加載這些內容就產生多余的加載量。

          圖3-4 觸發加載頁卡內容

          圖3-5 翻頁觸發動態加載

          2.2.2 觸發加載

          一般來說,動態填充數據的前期判斷有兩種形式。

          一種是使用條件語句,判斷內容區域是否有內容,如果沒有,填充內容。這種方式最容易想到,但每次觸發的時候都會判斷一次。

          另外一種是監聽的方式。我們監聽觸發的對象是否被點擊,如果點擊,就像目標對象填充內容,然后取消這個監聽。

          圖3-6 判斷的兩種方式

          很顯然,第二種方式只需執行一次,測試結果也表明這種方式是最快的。

          2.2.3 數據插入方式

          我們的新聞系統在生成新聞列表的時候,會根據我們的模板同時生成html頁面、xml文件(我們很少使用)、json文件,在選擇將列表插入頁面的時候,我們有兩種方式。

          一種是動態加載json文件,用JS生成內容,插入頁面;另一種是使用XHR加載html文件,使用responseText獲取內容,插入頁面。

          圖3-7 html文件

          圖3-8 json文件

          其實,使用第二種方法有明顯的好處。第一是,html文件體積比json文件小,加載量減少;第二是直接使用html文件,減少了JS動態生成結構的開銷。

          2.3 延時加載

          對于一組有加載時間間隔的資源,我們其實可以對其做加載延時,按照其前后出現的順序,在時間間隔后即時加載下一個資源。例如輪播廣告就很適合這么做。

          圖3-9 輪播廣告

          2.3.1 輪播廣告

          以往輪播廣告的加載模式是一次性全部加載,雖然采用延遲加載,但用戶可能不會瀏覽到所有的輪播廣告。當用戶在首頁只停留5秒時(例如輪播廣告設置的是5秒切換一次),第二張廣告圖片以后的圖片加載就沒有必要了。

          圖3-10 輪播廣告加載的請求瀑布圖

          其實我們可以這樣,第一次加載第一張廣告圖片,當5秒后,判斷第二張圖片是否加載過,如果沒有,加載第二張圖片,以此類推。判斷的方式很簡單,我們只要在初期生成輪播廣告結構的時候,不設置img標簽的src屬性,然后加載時判斷這張圖片是否有src屬性,如果沒有,加載圖片并設置這個屬性。

          圖3-11 判斷方式

          這樣,如果用戶在首頁停留時長只有14秒,那么就節省了第4、5張廣告圖片的下載量,大約有100K左右。

          圖3-12 優化后的請求瀑布圖

          第3章 其他方式

          3.1 文件壓縮

          3.1.1 代碼

          老生常談的方法。我們可以將代碼里多余的空格,回車,無用標簽刪除,替換名字較長的變量名等等方式減少腳本文件大小。

          圖4-1 腳本壓縮對比

          3.1.2 多媒體

          對于圖片,不同格式,不同壓縮率都會造成圖片大小的千差萬別。選擇一個合適并且圖片質量可以接受的壓縮方式,可以節省很大一筆加載量。

          圖4-2 圖片壓縮對比

          對于視頻、音頻、Flash來說,也都一樣,碼率、格式等等方面都會對大小造成影響。

          圖4-3 視頻壓縮對比

          3.2 CSS 3

          CSS 3是一個不算太新,但由于我朝瀏覽器限制而得不到大范圍應用的技術。其實我們可以在一些效果表現不是很重要的頁面使用CSS 3來針對瀏覽器做一些差異化效果,已達到減少加載量的目的。

          3.2.1 替換圖片

          對于移動端,或者一些PC頁面,我們可以用CSS 3來替換一些圖片效果,比如漸變、陰影、圓角等等。

          圖4-4 綠色按鈕

          例如圖4-4中的綠色按鈕,使用CSS 3漸變和圖片所造成的加載量差距很大,在能使用CSS 3的時候,盡量不要使用圖片。

          圖4-5 CSS 3和圖片的大小對比

          3.2.2 替換JS動畫

          一些對象移動、寬高變換等效果,其實可以使用CSS 3動畫來實現。例如使用CSS 3和JS,來實現一個對象左右切換的效果,需要的代碼量如圖4-6所示。我們可以看到,CSS 3的代碼量極少,而且執行過程中沒有JS那些復雜的運算。

          圖4-6 CSS 3和JS的代碼量對比

          3.3 服務器

          3.3.1 GZIP

          雅虎13條里的內容。其壓縮比例很大,大部分網站都使用了。

          圖4-7 gzip效果

          3.3.2 緩存

          設置Expires、Cache-Control以減少頁面加載量,使瀏覽器從本地讀取緩存。

          Expires和Cache-Control

          max-age均用于檢測文件是否過期,如果沒有,瀏覽器讀取本地緩存。Expires是HTTP1.0的內容,需要返回一個304 Not Modified,并且過期時間是GMT時間,一旦客戶端日期不準確,可能導致失效。Cache-Control是HTTP1.1的內容,使用文件自身的age值來做和請求時間對比,相對穩定。

          圖4-8 304 Not Modified

          3.3.3 優圖

          優圖是公司開發的,用于圖片無損壓縮的系統。目前互娛已經接入,在圖片上傳到服務器時,自動進行無損壓縮,加載量減少的效果非常明顯。

          圖4-9 優圖

          第4章 三個話題

          4.1 對比

          在以前一次分享文檔中,有同學提問為啥要拋開瀏覽器與服務器的緩存機制,自己實現一套本地存儲機制,有沒有什么特別的優勢。其實相對與傳統緩存來說,本地存儲的好處有4點。

          一是,對于存儲需要處理的數據來說,本地存儲可以在第一次加載的時候就將處理的數據存在本地,而傳統緩存策略需要每次加載的時候都處理一次數據。

          二是,本地存儲相對穩定,有獨立的存儲空間,一般不會向服務器發送請求,而傳統緩存時常會丟失。

          三是,相對于傳統緩存策略,本地存儲的讀取速度要更快些。當然,也有例外,Chrome的本地存儲讀取速度要慢于緩存文件的加載。

          四是,對于iOS設備,Safari在重啟后(包含本身的重啟,或者設備的重啟),緩存會被清空,而本地存儲和離線存儲不會。

          4.2 SEO

          4.2.1 Landing Page

          對于互娛這邊的游戲,客戶端會有一個Landing Page,上面包含了最新的新聞,活動等等信息,玩家每次啟動客戶端都會看到這個頁面。

          根據監控,Landing Page平均每天給官網帶來250w左右的PV,而官網平均每日PV大約1000多萬。這個量應該完全填補了SEO的損失。而且游戲官網的用處一般僅限于給玩家提供游戲的功能服務、新聞、活動信息等等,玩家查詢游戲攻略、資料一般會去媒體站,而不是游戲官網。

          圖5-1 《英雄聯盟》的Landing Page

          4.2.2 內頁鏈接

          在某些內容需要動態加載的時候,我們可以寫一個到內頁的鏈接,讓搜索引擎爬蟲順著這個鏈接到內頁去記錄信息。

          圖5-2 到內頁的鏈接

          例如頁卡中的新聞列表需要動態填充,如果不做處理,爬蟲可能無法獲取這些列表中的新聞鏈接。我們可以像圖5-2的那兩種方式,寫一個到列表頁的鏈接,這樣爬蟲就可以順著這個鏈接到列表頁去抓取信息。

          4.3 效果

          4.3.1 健康度

          健康度是我們以前接的加載時間檢測系統,最近我們換用了OZ系統。使用了以上方法的網站,在3秒健康度上,有了很大的提升。

          圖5-3 3秒健康度

          4.3.2 請求減少

          采用以上方式減少加載量,雖然會造成整個網頁的全部請求量有少許增加,但因為是按需加載,所以可以大大減少首屏請求量。

          圖5-4 首屏請求量

          圖5-5 整頁請求量

          4.3.3 帶寬消耗

          在我們接入優圖后,圖片服務器的帶寬消耗大大減少。在圖片壓縮一半后,我們的帶寬消耗減少了4G。

          圖5-6 圖片壓縮一半后服務器帶寬消耗趨勢圖

          由于公司系統只能針對服務器做帶寬消耗監控,所以我們看不到做文件存儲和按需加載后的帶寬減少情況,但我們可以大概算算。如果一個游戲官網全部頁面平均每天有PV1500w,用戶平均每次加載頁面節省10KB,假設第1天正常加載,后29天全部讀緩存,每月可以節省帶寬488MB。對于有幾十款游戲產品的我們來說,這是一個很可觀的量。

          結束語

          正如開篇所說的那樣,介紹的這些方法,有部分會傷害SEO,增加腳本開銷。所以大家在使用的時候需要進行一個合理的選擇。

          例如對于一個新產品,SEO相對更加重要些,這個時候可以適當選用一些減少加載量的方法;當產品成熟,有大量用戶的時候,可以考慮進行更加深入的加載量優化。

          希望此文檔能幫助到今后做網站加載量優化的同學。

          直翻頁


          回憶上節課內容


          • 我們上次了解了橫向滾動的相關信息 橫滾幅度 - sidescroll 橫滾留位 - sidescrolloff 自動換行 - wrap
          • g j、g k 可以逐行上下移動
          • 可以控制切換行的控制鍵 whichwrap
          • 這就是橫向移動的內容
          • 不過程序中一般一行不會超過80個字符
          • 縱向移動更為普遍
          • 縱向移動有什么好玩的嗎?
          • 我們先下載個長點的文檔 http://users.csc.calpoly. git clone http://github.com/overmind1980/vimtutorial.git
          • 然后用無模式的方式打開他
          • vi -u NONE tomsawyer.txt


          邊緣移動


          • 首先設置非兼容 :set nocompatible
          • 然后設置顯示行號 :se nu
          • 2 3 G 到 23 行
          • j 再向下的時候
          • 屏幕發生滾動,光標位置如圖


          ?



          上下留邊


          • 上下留邊的話就要用 :set scrolloff=2
          • 這樣的話上下翻動的話,都會有 2 行的預留
          • :h scrolloff 查看幫助
          • s[croll]o[ff] 管的縱向保留邊距
          • 俗稱留天留地


          ?



          留邊細節


          • scrolloff 是一個 option
          • 可以設定最小值
          • 還可以查詢細節 :h 'scrolloff'


          ?



          • scrolloff 管的是 縱向 留天留地
          • sidescrolloff 管的是 橫向 留天留地
          • 也可以用 HML 命令測試一下 H 到當前屏幕能到的最上行 High M 到當前屏幕正中 Middle L 到當前屏幕能到的最下行 Low


          上下翻頁


          ?



          • 在 scroll.txt 可以找到 :h CTRL-F 使用 ctrl + f 可以向下走 f 的含義是 forward 向下走 同理b 的含義是 backward 向上走 ctrl + b 可以向上走
          • 在翻頁之前加上數字 [count] 可以實現一次翻 10 頁 如1 0 ctrl + f 或1 0 ctrl + b 注意觀察cmd的位置


          向上 N 行


          • 我們可以用 ctrl + e 向下 1 行
          • ctrl + e 和 j 的不同是 ctrl + e 光標所在文件位置不變,整個屏幕向上,除非到了邊緣,光標位置才改變 j 是屏幕整個位置不變,光標位置向下,除非到了邊緣,屏幕位置才改變


          ?



          • 同理可以ctrl + y 屏幕向下移動
          • 他們都可以使用 [count] 來翻倍


          翻過半屏


          • ctrl + d 可以向下走 翻半屏 d 代表 Down
          • ctrl + u 可以向上走 翻半屏 u 代表 Up
          • 默認翻的是半屏,但是也可以通過 scroll 來設置
          • :set scroll=5 來明確翻的行數
          • 翻頁的時候,光標在屏幕的相對位置不變,屏幕整體向上或向下移動


          ?



          總結


          • 這次我們主要講的翻頁
          • :set scrolloff=2 控制留天留地
          • 上下翻頁(這個最常用) ctrl + f 屏幕向上走一屏 ctrl + b 屏幕向下走一屏
          • 上下移屏一行 ctrl + e 屏幕向上走一行 ctrl + y 屏幕向下走一行
          • 上下移屏一段 ctrl + u 向上走半屏 ctrl + d 向下走半屏 移動數量和 scroll 相關
          • 上述翻頁都可以用 [count] 翻倍
          • 如果想屏幕相對文件位置不動 只移動光標
          • 可以么?
          • 下次再說
            vimtutorial是oeasy制作的的一套關于vim的教程
            Github地址→https://github.com/overmind1980/vimtutorial
            Gitee地址→https://gitee.com/overmind1980/vimtutorial
            藍橋實驗樓地址→https://www.lanqiao.cn/teacher/courses/2840 邀請碼FJWYIMGB

          ?


          主站蜘蛛池模板: 精品国产一区二区三区2021| 精品国产日韩亚洲一区在线| 无码少妇一区二区| 精品免费久久久久国产一区| 中文字幕一区二区三区视频在线| 在线观看一区二区精品视频| 日韩精品中文字幕视频一区| 波多野结衣在线观看一区| 亚洲国产精品成人一区| 国产免费一区二区三区免费视频 | 无码人妻一区二区三区av| 日韩精品一区二区三区中文版| 亚洲国产精品一区二区三区久久| 国产免费一区二区三区不卡 | 一区二区三区四区在线播放| 国精产品一区一区三区| 亚洲一区二区无码偷拍| 亚洲一区二区三区在线播放| 88国产精品视频一区二区三区| 日本免费一区二区三区最新| 色欲综合一区二区三区| 天堂一区二区三区在线观看| 精品久久国产一区二区三区香蕉 | 糖心vlog精品一区二区三区 | 久久精品国产一区二区三区肥胖| 亚洲综合色一区二区三区| 精品国产一区二区三区AV性色| 精品国产一区AV天美传媒| 国产成人精品无人区一区| 国产一区二区久久久| 国产MD视频一区二区三区| 色噜噜狠狠一区二区三区果冻 | 国产成人精品无码一区二区| 国产第一区二区三区在线观看 | 成人精品一区二区不卡视频| 亚洲AV无码一区二区二三区入口| 极品少妇伦理一区二区| 亚洲视频一区二区三区四区| 奇米精品一区二区三区在| 日本一区中文字幕日本一二三区视频| 一区二区视频在线|