<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          解讀前端熱更新原理

          時間:?2017-11-23閱讀:?1867標簽:?前端

          猿類創造的原始動力多來源于偷懶
          前端的同學們在搭建自己的開發環境的時候,為了避免手動刷新瀏覽器的繁復,使用起了熱更新工具
          browserSync 和 webpack-dev-server是其中的代表作品

          一、websocket簡介

          在h5推出之前,瀏覽器應用跟服務器端通信的機制只有http協議,http是一種無狀態的網絡協議,前端向服務器發起一個請求,服務器給出一次應答,服務器無法主動向客戶端發起通信,這種設計主要是為了節省帶寬資源,客戶端和服務器端不需要維持長連接

          早期要實現一個瀏覽器即使通信工具(如webqq),由于服務器端不能主動向客戶端發起通信,只能客戶端設置一個定時器,定時向服務器端發起請求拉取消息,很顯然,這種輪詢的方式對性能來說是一把殺豬刀

          h5很應景的推出了websocket,這給了web開發者另一種選擇去應付紛繁復雜的場景。WebSocket 是一個獨立的基于TCP的協議,前端和服務器端可以建立起一個長連接,客戶端可以向服務器端推送消息,服務器也可以主動向客戶端推送消息

          本文不對websocket做太深入的說明,有興趣可留下你的評論

          二、熱更新原理


          熱更新

          瀏覽器的網頁通過websocket協議與服務器建立起一個長連接,當服務器的css/js/html進行了修改的時候,服務器會向前端發送一個更新的消息,如果是css或者html發生了改變,網頁執行js直接操作dom,局部刷新,如果是js發生了改變,只好刷新整個頁面

          js發生改變的時候,不太可能判斷出對dom的局部影響,只能全局刷新
          為何沒有提到圖片的更新,如果是在html或者css里修改了圖片路徑,那么更新html和css,只要圖片路徑沒有錯,那么就已經達到了更新圖片的路徑。如果是相同路徑的圖片進行了替換,這往往需要重啟下服務

          在簡單的網頁應用中,這一個過程可能僅僅是節省了手動刷新瀏覽器的繁瑣,但是在負責的應用中,如果你在調試的部分需要從頁面入口操作好幾步才到達,例如:登錄->列表->詳情->彈出窗口,那么局部刷新將大大提高調試效率

          三、實例剖析

          如果你使用gulp構建的前端開發工作環境,想必對browserSync不會陌生,你明白它的工作方式么?

          browserSync易于使用:

              var bs = browserSync({
                  port: 5000, //服務端口
                  notify: false,
                  logPrefix: 'PSK',
                  
                  server: {
                      baseDir: '_dev', //服務路徑,也就是頁面資源存放的路徑
                      directory: true
                  },
                  open: false //需不需要自動打開瀏覽器
              }, function() {
                  //啟動后的回調
              });
          

          很容易想到,這開啟了一個http服務,在瀏覽器輸入localhost:5000/path就可以訪問到頁面,不知道有沒有細心的觀眾在查看頁面源碼的時候發現多了點什么不是你寫的東西


          browserSync

          沒錯,browser-sync-client.2.9.6.js并不是你引入的,這個是browserSync在創建的時候,為你的html自動注入的(baseDir目錄下),部分代碼:

              .........
              ___browserSync___.io = window.io;
              window.io = window.___browserSync___oldSocketIo;
              window.___browserSync___oldSocketIo=undefined;
              ___browserSync___.socketConfig = {"reconnectionAttempts":50,"path":"/browser-sync/socket.io"};
              ___browserSync___.socket = ___browserSync___.io('' + location.host + '/browser-sync', ___browserSync___.socketConfig);
              "use strict";
              (function (window, document, bs, undefined) {
                  var socket = bs.socket;
          
                  var uiOptions = {
                      bs: {}
                  };
              ..........
          

          原諒我并未仔細研讀過次文件代碼,因為實在太多太凌亂,但是從上面這幾行代碼,以及文件名,就基本可以確定這是websocket-client的代碼

          讀過的同學求抱大腿

          下面再來做一個實驗來確認下,control+c 把服務器關閉,再來看看剛才那網頁的控制臺:


          browserSync-error

          控制臺一直在報錯,why? 因為服務器關閉了之后,連接斷開,客戶端一直在嘗試對服務器發起重連

          再來看看webpack是怎么做的,webpack可以使用webpack-dev-server來搭建熱跟新的開發環境,webpack-dev-server是基于express的輕量級服務器,作用有點類似于上述的browserSync,你需要在webpack.config.js中的entry配置里增加的點東西

              var config = {
                entry: ['webpack/hot/dev-server', './app/main.js'], 
                output: {
                  path: path.resolve(__dirname, './build'),
                  filename: 'bundle.js'
                },
                module: {
                  loaders: [{
                    test: /\.js$/,
          
                    // Use the property "loaders" instead of "loader" and 
                    // add "react-hot" in front of your existing "jsx" loader
                    // 使用 "loaders" 屬性代替 "loader"
                    // 然后在 "jsx" 加載器之前添加 "react-hot" 
                    loaders: ['react-hot', 'babel']
                  }]
                }
              };
          
          

          配置中增加了webpack/hot/dev-server實體,跟main.js一起打包成bundle.js,這個就可以類比到上面的browser-sync-client.2.9.6.js

          如果自己搭建express,還可以使用webpack的熱跟新中間件

          四、總結

          知其然并知其所以然是很重要的,不要求搞清楚每一個細節,但要懂得實現原理

          原文鏈接:www.jianshu.com  
          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/156

          前后端分離的優缺點

          前后端分離已經成為互聯網項目開發的業界標準使用方式,通過 nginx + Tomcat 的方式(也可以中間加一個 nodejs) 有效的進行解耦,并且前后端分離會為以后的大型分布式架構,彈性計算架構,微服務架構

          前端開發面試,如何寫好一個簡歷,脫穎而出

          通常在各個招聘網站,我們填寫完一些信息后,網站就可以幫助我們生成一個很不錯的簡歷。但是作為一名開發者,尤其是前端開發者,可能對這種簡歷并不滿意。這時候,相信有很多同胞們就希望能自己動手做一個很漂亮的web版的簡歷:

          前端一定要會node嗎?

          Node 是一個讓 JavaScript 運行在服務端的開發平臺,它讓 JavaScript 成為與PHP、Python、Perl、Ruby 等服務端語言平起平坐的腳本語言。

          張鑫旭:我對前端從業人員分布與技術風向的一點看法

          Web 前端這個職業從出現到現在 20 年的歷史應該有了,隨著這么多年前端發展和積累,累積百萬前端從業開發者絕對有的,當下至少有 50 萬前端開發從業者。從我篩選簡歷到最終錄取大概百分之一的錄取率,綜合我們廠算是小廠來看

          中臺微服務了,那前端呢?

          文章中詳細描述了基于 DDD 設計思想的中臺微服務設計方法以及分布式架構實施過程中的關注點等內容。中臺建設完成后,通過微服務實現了后端應用的解耦,提高了中臺應用的彈性伸縮能力

          學習web前端開發,學歷到底重不重要?

          首先,我們先了解一下一般情況下學歷的作用是什么,對于我們大多數人來講,在進行面試的時候,學歷最重要的一個作用就是“敲門磚”,現在任何公司招聘,都會寫上大專學歷以上或者是本科學歷以上,但是對于真正有能力的人

          千萬級用戶網站門戶前端設計

          對于千萬級的注冊用戶的門戶項目是前端這塊是怎么去實現的,自己在平常的工作中總結了一些經驗,也是在不斷的挫折中,不斷演練的,希望總結出來給大家參考下,和大家一起探討,一起進步。

          前端為什么學node?

          隨著互聯網的高速發展以及市場需求推動,Node已經成為前端知識棧必備技能之一,很多企業在招聘中也會著重考察求職者對Node的掌握程度。那么就有人好奇了從事Web前端為什么要學習Node.js?下面本篇文章就來給大家詳細的分析一下

          自學WEB前端的詳細路線

          學習web前端編程技術肯定是以就業拿到高薪工作為主要目的的,可是高薪不會那么輕易拿到,這是一個最簡單的道理。沒有付出就沒有回報,在整個學習web前端編程技術的過程中,你需要付出時間、精力、金錢。廢話不多說直接上干貨

          大前端時代下的熱修復平臺建設

          隨著移動需求的增加、移動項目的拓展,如果移動端應用出現 Bug 不能及時得到修復,影響的不僅僅是用戶體驗,還會造成業務上的損失,因此,建立一套完整的熱修復平臺迫在眉睫。

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网