亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 網頁設計 > 正文

淺談前端網絡、JavaScript優化以及開發小技巧

2024-08-30 08:36:05
字體:
來源:轉載
供稿:網友

一、網絡優化

YSlow 有23條規則。這幾十條規則最主要是在做消除或減少不必要的網絡延遲,將需要傳輸的數據壓縮至最少。

1)合并壓縮CSS、JavaScript、圖片,靜態資源CDN緩存

通過構建工具Gulp ,可以在開發的時候就將合并壓縮的事情一起做掉。

之所以要做合并壓縮是因為:HTTP 1.x不允許一個連接上的多個響應數據交錯到達(多路復用),因而一個響應必須完全返回后,下一個響應才會開始傳輸。

也就是說即使客戶端同時發送了兩個請求,而且CSS資源先準備就緒,服務器也會先發送HTML響應,然后再交付CSS。

使用CDN是為了讓用戶訪問的時候能用最近的資源,減少來回傳輸時間。

HTTP2.0改進了HTTP1.x很多方面。

2)CSS放頂部,JavaScript放底部

CSS可以并行下載,而JavaScript加載之后會造成阻塞。

但凡事還是會有例外,如果把行內腳本放在樣式表之后,會明顯地延遲資源的下載(結果是樣式表下載完成并且行內腳本執行完畢時,后續資源才能開始下載)。

這是因為行內腳本可能含有依賴于樣式表中樣式的代碼,比如document.getElementsByClassName()。

<head>  <link rel="stylesheet" href="css/all-normal.css" type="text/css" /></head><body>  <div id="content"></div>  <script>    var content = '';    for(i=1; i<1000000; i++)        content += '寫入頁面';    document.getElementById('content').innerHTML = content;  </script>  <img src="images/ui.png" /></body>

下面通過Chrome的工具查看下:

3)優化DNS解析,減少重定向

在做一個“女神評選活動”的時候,需要在微信中訪問能夠獲取用戶的openid,微信獲取用戶基本信息是需要經過幾個步驟的:

先獲取code,再通過code獲取openid,最后再跳轉訪問靜態頁面。

由于公司將業務分成了多個小組,所以短短的三步其實需要三個小組配合,需要重定向多個域名。

下圖是未優化前的瀑布圖,但不是最壞情況,有時候訪問到靜態頁面需要經過10多秒,完全不能接受,下圖中會跳轉4個域名:

后面不跳index那個域名,直接跳轉到微信操作域名,減少一個域名的跳轉,各小組代碼再做優化,但效果還是不理想,僅僅快了幾秒。

最后發現其實是在與微信的服務器做交互的時候,DNS解析花了太多時間!不得已,在服務器的host中添加一條記錄,直接通過IP指向。

下圖是最終優化結果,雖然達不到秒開,但至少可以接受了:

二、JavaScript優化

1)圖片預加載

在做一個“秋名山活動”的時候,使用了圖片預加載。這個活動中有120多張圖片。

流程很簡單,就是答題,最后給評論結果,再分享出去。

  

如果一下子加載那么多圖片,一定是愚蠢的想法,最后決定,在頁面載入的時候先加載一些通用圖片。

在答題的時候當前頁面,預先加載后面頁面中的圖片,防止訪問頁面的時候直接不展示圖片,圖片也做了適當的合并。

將網站地址放在gtmetrix.com 測試,下面是最終的瀑布圖,可以發現圖片都在其他靜態資源的后面,這樣能盡早的展現頁面給用戶:

優化還遠遠沒有結束,在Chrome中分別模擬了good 2G、good 3G以及4G后,有結果的情況并不理想。

good 2G:

  

good 3G:

  

4G:

  

2)減少分支

在寫業務邏輯的時候,經常會用到if else,switch之類的邏輯判斷,如果每次都做這么多判斷,很容易影響性能。

所以可以通過多種方式來避免過多的判斷。

1. 惰性模式

這是在看《JavaScript設計模式》的時候看到的。

減少每次代碼執行時的重復性分支判斷,通過對對象重定義來屏蔽原對象中的分支判斷。

惰性模式分為兩種:第一種文件加載后立即執行對象方法來重定義,第二種是當第一次使用方法對象時來重定義。

公司有個頁面要提供給第三方APP,但是最終發現第三方APP不能使用localStorage緩存,最終只得做兼容的方式。

但為了避免每次引用方法的時候都做判斷,就使用加載后立即重定義:

var getFn = function() {  if (sore.enabled)    return sore.get;  return cookie.get;}();var setFn = function() {  if (sore.enabled)    return sore.set;  return cookie.set;}();

2. 建立映射關系

頁面中經常需要彈出框提示,后面就自己做了一個,但彈出框會有很多款式。

如果用簡單工廠模式創建的話,免不了switch分支判斷,后面就直接用賦不同的key,還能緩存起來,只初始化一次。

/** * 彈出框單例模式 */var factories = {};var DialogFactory = function(type, options) {  if (factories[type])    return factories[type];  return factories[type] = new iDialog(options);};/** * 提示框 */var Alert = function(content, options) {  var d = DialogFactory('alert', options);  //其他邏輯省略  return d;};/** * 確認框 */var Confirm = function(content, options) {  var d = DialogFactory('confirm', options);  //其他邏輯省略  return d;};

 3)第三方代碼異步加載

第三方代碼,例如百度統計、微信SDK等,這些完全可以在將業務資源加載完后再添加。

/** * 百度統計設置 */util.baidu = function(key) {  global._hmt = global._hmt || [];  (function() {    var hm = document.createElement("script");    hm.src = "//#/hm.js?" + key;    var s = document.getElementsByTagName("script")[0];    s.parentNode.insertBefore(hm, s);  })();};

4)cookie與localStorage緩存

有了緩存后,就能減少與服務器的通信,在本地操作。

公司有個查違章的業務,在本地添加好車輛后,再次進入頁面的時候就需要能直接選擇事先添加好的車輛。

最理想的方式就是添加好后,就在本地緩存起來,下次進入直接調取緩存。

  

我會優先使用localStorage,下面的表格就是對比:

 

cookie

localStorage

數據生命周期 

可設置失效時間 除非被清除,否則永久保存

數據大

大約4KB 大約5M

與服務器通信

每次都會攜帶在HTTP頭中,如果使用cookie保存過多數據會帶來性能問題  不參與和服務器的通信

本地存儲,之前的歷史大概如下圖所示:

localStorage在瀏覽器兼容方面,IE8居然也支持了。

5)事件委托

使用事件委托技術能讓你避免對特定的每個節點添加事件監聽器。

事件監聽器是被添加到它們的父元素上,通過事件冒泡,觸發執行。

在開發的時候,經常會出現動態添加元素的情況。

如果每次都重新綁定一次事件,那會有很多多余操作,而綁定在此元素的父級,就只需綁定一次即可。

document.getElementById('ul').onclick = function(e) {  var e = e || window.event,    tar = e.target || e.srcElement;  if (tar.nodeName.toLowerCase() == 'li') {    tar.style.background = 'black';  }}

6)節流與去抖動

節流(throttle):預先設定一個執行周期,當調用動作的時刻大于等于執行周期則執行該動作,然后進入下一個新周期。

例如mousemove 事件、window對象的resize和scroll事件。

去抖動(debounce):當調用動作n毫秒后,才會執行該動作,若在這n毫秒內又調用此動作則將重新計算執行時間。

例如文本輸入keydown 事件,keyup 事件,做autocomplete等。

節流與去抖動最大的不同的地方就是在計算最后執行時間的方式上。著名的開源工具庫underscore中有內置了兩個方法。

在做公司內部的一個系統的時候,需要方希望在左右滾動表格的時候,能將第一列固定在最左邊,方便查看。

為了讓操作能更流暢,我再這里用了節流,有些瀏覽器會出現卡頓,就得需要增加周期時間。

三、小技巧

1)在手機中打印變量

在移動頁面的時候經常需要調試字段,又不能用console.log,每次alert的話,碰到對象就看不到內容了。

只能自己寫個小方法來打印出來,JSON.stringify,通過這個方法能夠方便的實現功能。

var print = function(obj, space) {  space = space || 4;  var html = JSON.stringify(obj, null, space);  html = html.replace(//n/g, '<br>').replace(//s/g, '&nbsp');  var pre = document.createElement('pre');  var div = document.createElement('code');  pre.style.cssText = 'border:1px solid #000;padding:10px;background:#FFF;margin-bottom:20px;';  div.innerHTML = html;  pre.appendChild(div);  var body = document.querySelector('body');  body.insertBefore(pre, body.children[0]);};print({a:1, b:'demo', c:{text:'content'}});

2)chrome插件JSON-handle

服務器返回的很多都是JSON格式的數據,通常寫好后給你個接口,順便給你幾個demo參數。

在瀏覽器中打開后,就是一串字符串,但要給人看的話,就得格式化一下了,這個插件就是用來讓人看的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区二区三区电影| 丝袜亚洲欧美日韩综合| 国产精品色午夜在线观看| 日韩在线免费视频观看| 日韩成人在线网站| 亚洲国产精品va| 日韩av不卡在线| 精品国产一区二区三区久久久狼| 77777少妇光屁股久久一区| 国产精品无码专区在线观看| 欧美一级大片在线观看| 狠狠久久五月精品中文字幕| 欧美国产日韩中文字幕在线| 91色视频在线观看| 欧美精品日韩www.p站| 欧美在线亚洲在线| 欧美xxxx做受欧美.88| 2019av中文字幕| 欧美日韩国产麻豆| 国产日本欧美一区| 国内精品视频一区| 中文字幕av一区二区三区谷原希美| www.日韩视频| 日韩av有码在线| 懂色av一区二区三区| 欧美成人国产va精品日本一级| 亚洲精品中文字幕有码专区| 亚洲aa中文字幕| 亚洲免费影视第一页| 国产精品久久久久久久久久ktv| 欧美国产精品人人做人人爱| 亚洲自拍高清视频网站| 日韩精品免费在线视频观看| 精品福利在线视频| 国模精品视频一区二区三区| 大伊人狠狠躁夜夜躁av一区| 亚洲国产中文字幕在线观看| 久久精品国产久精国产思思| 国产欧美亚洲视频| 日韩精品视频观看| 亚洲美女av在线| 亚洲三级av在线| 中文日韩在线观看| 98精品国产自产在线观看| 亚洲人高潮女人毛茸茸| 欧美做受高潮电影o| 国产精品一区二区久久精品| 精品国产一区二区三区久久久| 亚洲一区二区三| 国产精品av网站| 亚洲色无码播放| 亚洲xxxxx电影| 日本欧美黄网站| 欧美精品福利视频| 日韩在线免费高清视频| 欧美在线免费观看| 亚洲欧美在线第一页| 在线成人激情黄色| 欧美激情欧美激情在线五月| 色综合男人天堂| 久久久久久久久久亚洲| 亚洲精品国产精品久久清纯直播| 一区二区日韩精品| 国产日韩在线精品av| 成人性生交大片免费看视频直播| 国产精品27p| 国产一区二区三区三区在线观看| 日韩在线国产精品| 欧美日韩第一视频| 日韩av在线免播放器| 九色91av视频| 国模视频一区二区三区| 亚洲 日韩 国产第一| 亚洲影视九九影院在线观看| 日韩欧美在线视频| 国产精品男人爽免费视频1| 亚洲深夜福利视频| 日韩视频永久免费观看| 九色91av视频| 91精品国产高清久久久久久| 亚洲精品国产精品久久清纯直播| 97视频在线观看免费高清完整版在线观看| 亚洲日韩欧美视频| 国产精品久久久久久久久| 精品国产电影一区| 亚洲精品久久久久久久久久久久久| 亚洲va国产va天堂va久久| 日韩一区av在线| 日韩精品在线私人| 亚洲精品日韩欧美| 国产97人人超碰caoprom| 日韩精品在线私人| 九色精品免费永久在线| 国产一区二区三区欧美| 日韩在线观看免费网站| 欧美黑人巨大精品一区二区| 韩国19禁主播vip福利视频| 亚洲福利小视频| 久久精品久久久久久| 欧美三级免费观看| 日韩精品高清在线| 久久久久久久一区二区三区| 国产成人一区二区| 久久影视电视剧凤归四时歌| 日韩小视频在线观看| 亚洲色图第一页| 国产精品毛片a∨一区二区三区|国| 久久精品91久久香蕉加勒比| 亚洲一区二区中文| 色婷婷久久av| 日日骚久久av| 欧美一级高清免费| 欧美一区二区三区免费观看| 成人在线一区二区| 欧美风情在线观看| 日韩经典中文字幕| 中文字幕自拍vr一区二区三区| 91精品国产91久久久| 国产成人极品视频| 国产精品美腿一区在线看| 亚洲午夜小视频| 在线播放亚洲激情| 国产亚洲欧美视频| 乱亲女秽乱长久久久| 欧美成人一区在线| 成人综合国产精品| 国产亚洲精品美女久久久久| 欧美在线日韩在线| 精品久久久久久中文字幕大豆网| 日韩视频中文字幕| 亚洲精品福利资源站| 久久成年人免费电影| 日韩精品中文字幕在线| 欧美激情亚洲激情| 成人性生交大片免费观看嘿嘿视频| 91av视频在线免费观看| 亚洲国产精品小视频| 91精品视频在线| 九九久久久久久久久激情| 亚洲成成品网站| 亚洲女人天堂视频| 最好看的2019的中文字幕视频| 九九久久综合网站| 日韩美女在线看| 亚洲欧洲一区二区三区久久| 国产在线98福利播放视频| 亚洲一区国产精品| 欧美天天综合色影久久精品| 91免费福利视频| 国产亚洲精品久久久优势| 亚洲欧美日韩图片| 38少妇精品导航| 成人字幕网zmw| 欧美日韩一区二区在线播放| 亚洲一区二区三区视频| 亚洲视频免费一区| 色狠狠av一区二区三区香蕉蜜桃| 亚洲经典中文字幕| 成人国产精品久久久| 日韩成人av网址| 久久伊人免费视频| 精品精品国产国产自在线| 久久久久久91香蕉国产| 97国产精品视频|