92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

web下的性能優化1(網絡方向)

2020-4-20    seo達人

性能優化(網絡方向)

web應用無非是兩臺主機之間互相傳輸數據包的一個過程; 如何減少傳輸過程的耗時就是網絡方向優化的重點, 優化出發點從第一篇文章中說起


DNS解析過程的優化

當瀏覽器從第三方服務跨域請求資源的時候,在瀏覽器發起請求之前,這個第三方的跨域域名需要被解析為一個IP地址,這個過程就是DNS解析;

DNS緩存可以用來減少這個過程的耗時,DNS解析可能會增加請求的延遲,對于那些需要請求許多第三方的資源的網站而言,DNS解析的耗時延遲可能會大大降低網頁加載性能。


dns-prefetch

當站點引用跨域域上的資源時,都應在<head>元素中放置dns-prefetch提示,但是要記住一些注意事項。首先,dns-prefetch僅對跨域域上的DNS查找有效,因此請避免將其用于您當前訪問的站點


<link rel="dns-prefetch" >

preconnect

由于dns-prefetch僅執行DNS查找,但preconnect會建立與服務器的連接。如果站點是通過HTTPS服務的,則此過程包括DNS解析,建立TCP連接以及執行TLS握手。將兩者結合起來可提供機會,進一步減少跨源請求的感知延遲


<!-- 注意順序, precontent和dns-prefetch的兼容性 -->

<link rel="preconnect" crossorigin>

<link rel="dns-prefetch" >

TCP傳輸階段優化

這個前端方面好像能做的有限, 我們都知道 http協議 是基于 tcp的;

升級http協議版本可以考慮下, 比如把 http/1.0 -> http/1.1 -> http/2;

這個需要我們在應用服務器上配置(nginx, Apache等), 不做概述了, 另外還需要客戶端和服務器都支持哦, 目前還沒開發出穩定版本,好多只支持https,不過也不遠了...


http2 的優勢

#  1.多路復用: 同一個tcp連接傳輸多個資源

這樣可以突破統一域名下只允許有限個tcp同時連接,

這樣http1.1所做的減少請求數優化就沒有太大必要了

如多張小圖合成一張大圖(雪碧圖),合并js和css文件


# 2.報文頭壓縮和二進制編碼: 減少傳輸體積

http1 中第一次請求有完整的http報文頭部,第二次請求的也是;

http2 中第一次請求有完整的http報文頭部,第二次請求只會攜帶 path 字段;

這樣就大大減少了發送的量。這個的實現要求客戶端和服務同時維護一個報文頭表。


# 3.Server Push

http2可以讓服務先把其它很可能客戶端會請求的資源(比如圖片)先push發給你,

不用等到請求的時候再發送,這樣可以提高頁面整體的加載速度

但目前支持性不太好...emm...

總的來說, 在 c 端業務下不會太普及, 畢竟需要軟件支持才行...


http 請求響應階段優化

為了讓數據包傳輸的更快, 我們可以從兩個方面入手: 請求的數據包大小(服務器), 請求數據包的頻率(客戶端)


減少請求文件的大小

請求文件對應的是我們項目完成后,打包所指的靜態資源文件(會被部署到服務器), 文件越小, 傳輸的數據包也會相對較小, 講道理也會更快到達客戶端


how to reduce a package size?

目前我們都會使用打包工具了(比如webpack, rollup, glup 等), 如何使用工具來減小包的體積呢? 這邊建議您去官網文檔呢...當然這里列舉一下常用的手段(webpack 的), 但是注意要插件版本更新哦


JS文件壓縮

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {

plugins: [

  new UglifyJsPlugin({

    // 允許并發

    parallel: true,

    // 開啟緩存

    cache: true,

    compress: {

      // 刪除所有的console語句    

      drop_console: true,

      // 把使用多次的靜態值自動定義為變量

      reduce_vars: true,

    },

    output: {

      // 不保留注釋

      comment: false,

      // 使輸出的代碼盡可能緊湊

      beautify: false

    }

  })

]

}

CSS 文件壓縮

// optimize-css-assets-webpack-plugin

plugins: [

 new OptimizeCSSAssetsPlugin({

   assetNameRegExp: /\.css$/g,

   cssProcessor: require('cssnano'),

 }),

];

html 文件壓縮

// html-webpack-plugin

plugins: [

 new HtmlWebpackPlugin({

   template: path.join(__dirname, 'src/index.html'),

   filename: 'index.html',

   chunks: ['index'],

   inject: true,

   minify: {

     html5: true,

     collapseWhitespace: true,

     preserveLineBreaks: false,

     minifyCSS: true,

     minifyJS: true,

     removeComments: false,

   },

 }),

];

source map 文件關閉

tree shaking

1.代碼不會被執行,不可到達,比如 if(false){// 這里邊的代碼}

2.代碼執行的結果不會被用到

3.代碼只會影響死變量(只寫不讀)

4.方法不能有副作用


// 原理相關: 以后在研究

利用 ES6 模塊的特點:

 只能作為模塊頂層的語句出現

 import 的模塊名只能是字符串常量

 import binding 是 immutable 的

代碼擦除: uglify 階段刪除無用代碼

scope hoisting(作用域提升)

分析出模塊之間的依賴關系,盡可能的把打散的模塊合并到一個函數中去,但前提是不能造成代碼冗余


const ModuleConcatenationPlugin = require('webpack/lib/optimize/ModuleConcatenationPlugin');

module.exports = {

 resolve: {

   // 針對 Npm 中的第三方模塊優先采用 jsnext:main 中指向的 ES6 模塊化語法的文件

   mainFields: ['jsnext:main', 'browser', 'main']

 },

 plugins: [

   // 開啟 Scope Hoisting

   new ModuleConcatenationPlugin(),

 ],

};

項目中使用按需加載,懶加載(路由,組件級)

const router = new VueRouter({

 routes: [

   { path: '/foo', component: () => import(/* webpackChunkName: "foo" */ './Foo.vue') }

   { path: '/bar', component: () => import(/* webpackChunkName: "bar" */ './Bar.vue') }

 ]

})

開啟 gizp 壓縮

有時候啟用也會消耗服務器性能, 看情況使用吧

暫時先提這么些吧...后續想到了再加


減少請求頻率

因為同一域名下 tcp 連接數的限制導致過多的請求會排隊阻塞, 所以我們需要盡量控制請求的數量和頻率


常見措施

將靜態資源的內聯到HTML中

這樣這些資源無需從服務器獲取, 但可能影響到渲染進程...


<!-- 1.小圖片內聯 base64 (url-loader) -->

<!-- 2.css內聯 -->

<!-- 3.js內聯 -->

<script>

 ${require('raw-loader!babel-loader!./node_modules/lib-flexible/flexible.js')}

</script>

利用各級緩存(下一篇存儲方面介紹)

通常都是在服務端做相關配置, 但你要知道


我們可以利用http緩存(瀏覽器端)來減少和攔截二次請求, 當然一般都是在服務端設置的;

服務器端也可以設置緩存(redis等), 減少數據查詢的時間同樣可以縮短整個請求時間

利用本地存儲

我們可以將常用不變的信息存在本地(cookie,storage API 等);

判斷存在就不去請求相關的接口, 或者定期去請求也是可以的

花錢買 CDN 加速

CDN 又叫內容分發網絡,通過把資源部署到世界各地,用戶在訪問時按照就近原則從離用戶最近的服務器獲取資源,從而加速資源的獲取速度。 CDN 其實是通過優化物理鏈路層傳輸過程中的網速有限、丟包等問題來提升網速的...


購買 cdn 服務器;

然后把網頁的靜態資源上傳到 CDN 服務上去,

在請求這些靜態資源的時候需要通過 CDN 服務提供的 URL 地址去訪問;


# 注意, cdn 緩存導致的新版本發布后不生效的問題

所以打包的時候常在文件后面加上 hash 值

然后在 HTML 文件中的資源引入地址也需要換成 CDN 服務提供的地址

/alicdn/xx12dsa311.js


# 利用不同域名的 cdn 去存放資源, (tcp連接限制)

webpack 構建時添加 cdn

// 靜態資源的導入 URL 需要變成指向 CDN 服務的絕對路徑的 URL 而不是相對于 HTML 文件的 URL。

// 靜態資源的文件名稱需要帶上有文件內容算出來的 Hash 值,以防止被緩存。

// 不同類型的資源放到不同域名的 CDN 服務上去,以防止資源的并行加載被阻塞。

module.exports = {

 // 省略 entry 配置...

 output: {

   // 給輸出的 JavaScript 文件名稱加上 Hash 值

   filename: '[name]_[chunkhash:8].js',

   path: path.resolve(__dirname, './dist'),

   // 指定存放 JavaScript 文件的 CDN 目錄 URL

   publicPath: '//js.cdn.com/id/',

 },

 module: {

   rules: [

     {

       // 增加對 CSS 文件的支持

       test: /\.css$/,

       // 提取出 Chunk 中的 CSS 代碼到單獨的文件中

       use: ExtractTextPlugin.extract({

         // 壓縮 CSS 代碼

         use: ['css-loader?minimize'],

         // 指定存放 CSS 中導入的資源(例如圖片)的 CDN 目錄 URL

         publicPath: '//img.cdn.com/id/'

       }),

     },

     {

       // 增加對 PNG 文件的支持

       test: /\.png$/,

       // 給輸出的 PNG 文件名稱加上 Hash 值

       use: ['file-loader?name=[name]_[hash:8].[ext]'],

     },

     // 省略其它 Loader 配置...

   ]

 },

 plugins: [

   // 使用 WebPlugin 自動生成 HTML

   new WebPlugin({

     // HTML 模版文件所在的文件路徑

     template: './template.html',

     // 輸出的 HTML 的文件名稱

     filename: 'index.html',

     // 指定存放 CSS 文件的 CDN 目錄 URL

     stylePublicPath: '//css.cdn.com/id/',

   }),

   new ExtractTextPlugin({

     // 給輸出的 CSS 文件名稱加上 Hash 值

     filename: `[name]_[contenthash:8].css`,

   }),

   // 省略代碼壓縮插件配置...

 ],

};

/*

以上代碼中最核心的部分是通過 publicPath 參數設置存放靜態資源的 CDN 目錄 URL,

為了讓不同類型的資源輸出到不同的 CDN,需要分別在:


output.publicPath 中設置 JavaScript 的地址。

css-loader.publicPath 中設置被 CSS 導入的資源的的地址。

WebPlugin.stylePublicPath 中設置 CSS 文件的地址。

設置好 publicPath 后,WebPlugin 在生成 HTML 文件和 css-loader 轉換 CSS 代碼時,會考慮到配置中的 publicPath,用對應的線上地址替換原來的相對地址。

*/

參考

DNS MDN]

webpack 文檔

深入淺出 Webpack

Scope Hoisting



日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
亚洲美女尤物影院| 国产不卡av一区二区| 国产日韩一区二区三区在线播放| 国产精品私人自拍| 欧美日韩精品一区| 4438x成人网最大色成网站| 久久九九国产精品怡红院| 国产午夜亚洲精品午夜鲁丝片| 天天爽天天狠久久久| 日韩色av导航| 欧美另类z0zxhd电影| www.日韩欧美| eeuss鲁片一区二区三区在线观看| 国产精品成人免费视频| 高清av一区二区三区| 欧美一区少妇| 欧美色婷婷久久99精品红桃| 国产一区在线观看麻豆| 国产精品美女久久久久久久久久久| 日本一区二区成人在线| 国产精品色婷婷在线观看| 综合激情一区| 国产亚洲一区二区在线观看| 99久久精品国产一区| 国产综合色在线视频区| 欧美性生交大片免网| 欧美高清一级片在线观看| 啪啪激情综合网| 清纯唯美亚洲经典中文字幕| 欧美aa视频| 四虎成人精品永久免费av九九| 老司机免费视频一区二区| 宅男噜噜噜66国产精品免费| 88xx成人免费观看视频库| 日精品一区二区三区| 日本不卡影院| 美日韩精品免费观看视频| 亚洲精品视频在线播放| 免费人成网站在线观看欧美高清| 久久国产剧场电影| 日本高清不卡的在线| 欧美高清性猛交| 国产精品片aa在线观看| 精品亚洲第一| 精品入口麻豆88视频| 亚洲校园激情春色| 在线观看wwwxxxx| 福利视频在线看| 久久日韩粉嫩一区二区三区| 91麻豆精品国产无毒不卡在线观看| 欧美性受ⅹ╳╳╳黑人a性爽| 久久亚洲黄色| 日韩激情av在线播放| 国产福利第一视频在线播放| 国产私拍福利精品视频二区| 国产精品户外野外| av色综合久久天堂av色综合在| 中文无码日韩欧| 亚洲国产小视频| 欧美v亚洲v综合ⅴ国产v| 日韩视频不卡| 狠狠躁少妇一区二区三区| 蘑菇福利视频一区播放| 欧美精品日日操| 国产精品高清免费在线观看| 99精品一区二区三区| 国产精品影视在线| 黑人精品欧美一区二区蜜桃| 欧美图区在线视频| 久久99在线观看| 欧美精品日日鲁夜夜添| 精品久久久久久一区二区里番| 少妇高潮久久77777| 日韩欧美国产二区| 婷婷精品国产一区二区三区日韩| 欧美三级韩国三级日本一级| **欧美大码日韩| 午夜性色一区二区三区免费视频| 荡女精品导航| 国产欧美日韩视频一区二区三区| 亚洲午夜激情网页| 欧美成人三级视频网站| 久久精品国产亚洲精品2020| 91精品婷婷国产综合久久性色| 久久在线视频免费观看| gogogogo高清视频在线| 91av在线免费观看视频| 欧美性受极品xxxx喷水| 岛国成人毛片| 欧美亚洲另类在线| 99国产高清| 国产一二精品视频| jizz一区二区| 免费精品国产| 毛片在线视频| 麻豆免费在线观看| 成人短视频在线观看| 日韩欧美福利视频| 欧美日韩激情美女| 色综合一本到久久亚洲91| 爱高潮www亚洲精品| 日韩一区二区电影| 国产日本欧洲亚洲| 久久精品一级爱片| 视频一区二区在线观看| 人人视频精品| 国产精品综合视频| 麻豆一区区三区四区产品精品蜜桃| 亚洲一级高清| 国产精品678| 日韩av电影免费观看高清完整版| 国产精品91久久久久久| 国产伦精品一区二区三区视频青涩| 国产一二区在线观看| 91蝌蚪精品视频| 久久久精品综合| av大大超碰在线| 成人久久久久爱| 欧美极品少妇xxxxx| 欧美中文字幕亚洲一区二区va在线| 国产精品成人观看视频免费| 禁断一区二区三区在线| 欧美精品久久一区二区| 俺来也官网欧美久久精品| 懂色av影视一区二区三区| 欧美性色aⅴ视频一区日韩精品| 国产视频一区二区在线播放| 2020国产精品极品色在线观看| 日本欧美一区二区三区乱码| 亚洲一区欧美| 欧美天堂在线观看| 精品视频一区二区三区免费| 51精品视频一区二区三区| 少妇精品久久久| 久久夜色精品国产欧美乱| 久久99国产精品久久99大师| 亚洲欧洲三级| 欧美一级片久久久久久久| 素人一区二区三区| 99热精品久久| 欧美日韩国产成人在线免费| 亚洲黄一区二区| 全球成人免费直播| 69视频在线免费观看| 亚洲美女性生活视频| 7878成人国产在线观看| 色综合久久精品亚洲国产| 欧美主播一区二区三区美女 久久精品人| 成人77777| 午夜亚洲福利在线老司机| 秋霞蜜臀av久久电影网免费| 欧美性做爰毛片| 国产综合久久久| 丁香婷婷综合激情五月色| 澳门av一区二区三区| 国产日产欧美精品一区二区三区| 成人激情动漫在线观看| 欧美做爰性生交视频| 北条麻妃在线一区二区免费播放| 极品美女销魂一区二区三区| 午夜日韩在线| 69久久99精品久久久久婷婷| 欧美激情1区2区3区| 日韩电影在线免费看|