整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          CSS 實(shí)現(xiàn)風(fēng)吹動(dòng)樹葉的動(dòng)畫

          題,要實(shí)現(xiàn)樹葉在風(fēng)中搖擺的動(dòng)畫,首先準(zhǔn)備主體:樹葉

          這里準(zhǔn)備了兩張矢量的高清版 SVG 各式的不同種類的樹葉。

          首先我們使用 img 標(biāo)簽來在網(wǎng)頁中顯示樹葉,然后給它一個(gè)名為 leaf 的類,好給它附加樣式。

          <img class="leaf" src="/blog/virtual_safari_leaf.svg" alt="Leaf" />

          接下來就是編寫 CSS 動(dòng)畫代碼,這里利用了 tranform 屬性中的兩個(gè)變換,skew 將元素在二維平面上傾斜角度進(jìn)行拉伸,rotate 以中心為坐標(biāo)軸進(jìn)行旋轉(zhuǎn)。

          .leaf {
          transform: scale(0.8);
          animation: leftRuffle 3s infinite alternate;
          }
          @keyframes leftRuffle {
          50% {
          transform: scale(0.8) skew(5deg) rotate(-5deg);
          }
          100% {
          transform: scale(0.8) skew(0) rotate(0);
          }
          }

          我們先讓第一個(gè)樹葉動(dòng)起來

          第二個(gè)樹葉我們將它左右翻轉(zhuǎn)下,利用 scaleX(-1),然后同理

          .leaf {
          transform: scale(0.7) scaleX(-1);
          animation: rightRuffle 3s infinite alternate;
          }
          @keyframes rightRuffle {
          0% {
          transform: scale(0.7) scalex(-1) skew(0) rotate(0);
          }
          50% {
          transform: scale(0.7) scalex(-1) skew(5deg) rotate(-5deg);
          }
          100% {
          transform: scale(0.7) scalex(-1) skew(0) rotate(0);
          }
          }

          動(dòng)是動(dòng)起來了,可單獨(dú)看是否覺得有點(diǎn)奇怪。

          我們給它增加一個(gè)場景:

          通常這種大樹葉的綠植要么生長在熱帶雨林,要么被我們放在室內(nèi)當(dāng)做風(fēng)景或者背景。


          原文鏈接:https://juejin.cn/post/7320426329164496935

          .比較http 0.9和http 1.0

          1. http0.9只是一個(gè)簡單的協(xié)議,只有一個(gè)GET方法,沒有首部,目標(biāo)用來獲取HTML。
          2. HTTP1.0協(xié)議大量內(nèi)容:首部,響應(yīng)碼,重定向,錯(cuò)誤,條件請求,內(nèi)容編碼等。

          http0.9流程:

          客戶端,構(gòu)建請求,通過DNS查詢IP地址,三次握手建立TCP連接,客戶端發(fā)起請求,服務(wù)器響應(yīng),四次揮手,斷開TCP連接。(與服務(wù)器只有一個(gè)來回)

          http1.0流程:

          客戶端,構(gòu)建請求,通過DNS查詢IP地址,三次握手建立TCP連接,客戶端發(fā)起請求,服務(wù)器響應(yīng),四次揮手,斷開TCP連接。(與服務(wù)器有兩個(gè)來回)

          因?yàn)椴蛔闳毕荩陀辛薶ttp1.1。

          2.關(guān)于http1.1及http2

          http1.1中瀏覽器再也不用為每個(gè)請求重新發(fā)起TCP連接了,增加內(nèi)容有:緩存相關(guān)首部的擴(kuò)展,OPTIONS方法,Upgrade首部,Range請求,壓縮和傳輸編碼,管道化等。但還是滿足不了現(xiàn)在的web發(fā)展需求,so,就有了http.2版本。

          http2解決了(管道化特性可以讓客戶端一次發(fā)送所有的請求,但是有些問題阻礙了管道化的發(fā)展,即使某個(gè)請求花了很長時(shí)間,那么隊(duì)頭阻塞會(huì)影響其他請求。)http中的隊(duì)頭阻塞問題。

          使用http2會(huì)比http1.1在使用TCP時(shí),用戶體驗(yàn)的感知多數(shù)延遲的效果有了量化的改善,以及提升了TCP連接的利用率(并行的實(shí)現(xiàn)機(jī)制不依賴與服務(wù)器建立多個(gè)連接)

          所以需要學(xué)習(xí)http2,了解更過的內(nèi)容來掌握計(jì)算機(jī)網(wǎng)絡(luò)。

          對于http2,你可以來運(yùn)行一個(gè)http2的服務(wù)器,獲取并安裝一個(gè)http2的web服務(wù)器,下載并安裝一張TLS證書,讓瀏覽器和服務(wù)器通過http2來連接。(從數(shù)字證書認(rèn)證機(jī)構(gòu)申請一張證書)。

          了解http2的協(xié)議,先讓我們了解一下web頁面的請求,就是用戶在瀏覽器中呈現(xiàn)的效果,發(fā)生了些什么呢?

          資源獲取的步驟:

          把待請求URL放入隊(duì)列,判斷URL是否已在請求隊(duì)列,否的話就結(jié)束,是的話就判斷請求域名是否DNS緩存中,沒有的話就解析域名,有的話就到指定域名的TCP連接是否開啟,沒有的話就開啟TCP連接,進(jìn)行HTTPS請求,初始化并完成TLS協(xié)議握手,向頁面對應(yīng)的URL發(fā)送請求。

          接收響應(yīng)以及頁面渲染步驟:

          接收請求,判斷是否HTML頁面,是就解析HTML,對頁面引用資源排優(yōu)先級,添加引用資源到請求隊(duì)列。(如果頁面上的關(guān)鍵資源已經(jīng)接收到,就開始渲染頁面),判斷是否有還要繼續(xù)接收資源,繼續(xù)解析渲染,直到結(jié)束。

          3.HTTP的幾種請求方法用途

          第一種GET方法:發(fā)送一個(gè)請求來獲取服務(wù)器上的某一些資源。

          第二種POST方法:向URL指定的資源提交數(shù)據(jù)或附加新的數(shù)據(jù)。

          第三種PUT方法:跟POST方法一樣,可以向服務(wù)器提交數(shù)據(jù),但是它們之間也所有不同,PUT指定了資源在服務(wù)器的位置,而POST沒有哦。

          第四種HEAD方法:指請求頁面的首部。

          第五種DELETE方法:刪除服務(wù)器上的某資源。

          第六種OPTIONS方法:它用于獲取當(dāng)前URL所支持的方法,如果請求成功,在Allow的頭包含類似GET,POST等的信息。

          第七種TARCE方法:用于激發(fā)一個(gè)遠(yuǎn)程的,應(yīng)用層的請求消息回路。

          第八種CONNECT方法:把請求連接轉(zhuǎn)換到TCP/TP通道。

          4.從瀏覽器地址欄輸入url到顯示頁面的步驟

          簡單說說,瀏覽器根據(jù)請求的url交給dns域名解析,查找真正的ip地址,向服務(wù)器發(fā)起請求;服務(wù)器交給后臺(tái)處理后,返回?cái)?shù)據(jù),瀏覽器會(huì)接收到文件數(shù)據(jù),比如,html,js,css,圖像等;然后瀏覽器會(huì)對加載到的資源進(jìn)行語法解析,建立相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu);載入解析到的資源文件,渲染頁面,完成顯示頁面效果。

          不夠清楚明白碼?

          那就再次詳細(xì)一下,咳咳,從瀏覽器接收url,開始進(jìn)行網(wǎng)絡(luò)請求線程,發(fā)出一個(gè)完整的HTTP請求,從服務(wù)器端接收請求到對應(yīng)的后臺(tái)接收到請求,然后是后臺(tái)和前臺(tái)的http交互;其中的緩存問題(http的緩存),瀏覽器接收到http數(shù)據(jù)包后的解析流程,css的可視化格式模型,js引擎解析過程等;其他呈現(xiàn)頁面效果。

          :這里就需要你對瀏覽器內(nèi)核的理解:其中主要的渲染引擎和JS引擎,這里了解一下你對瀏覽器內(nèi)核的理解。

          1. 渲染引擎,是負(fù)責(zé)取得網(wǎng)頁的內(nèi)容,整理信息,以及計(jì)算網(wǎng)頁的顯示方式,然后輸出到顯示器上。
          2. JS引擎是用于解析和執(zhí)行javascript來實(shí)現(xiàn)網(wǎng)頁的動(dòng)態(tài)效果。

          瀏覽器的內(nèi)核的不同對于網(wǎng)頁的語法解釋會(huì)有不同,所以渲染的效果也不相同。其實(shí)最開始渲染引擎和JS引擎是沒有區(qū)分明確的,不過后來JS引擎越來越獨(dú)立,so,內(nèi)核就傾向于渲染引擎。

          對于資源請求/獲取,資源響應(yīng)/頁面渲染,會(huì)給網(wǎng)絡(luò)帶寬和設(shè)備資源帶來壓力,這個(gè)時(shí)候就會(huì)考慮到web的性能優(yōu)化。

          5.web的性能優(yōu)化

          其中里面的性能關(guān)鍵:

          什么是數(shù)據(jù)包 數(shù)據(jù)包(IP數(shù)據(jù)包),指封裝在固定結(jié)構(gòu)的一系列字節(jié),它定義了數(shù)據(jù)包的長度,傳輸?shù)募?xì)節(jié),以及其他與TCP相關(guān)的信息。

          延遲:指IP數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)端點(diǎn)到另一個(gè)網(wǎng)絡(luò)端點(diǎn)所花費(fèi)的時(shí)間。(所花費(fèi)時(shí)間在于往返時(shí)延,是延遲的時(shí)間的兩倍)

          帶寬:只要帶寬沒有飽和,兩個(gè)網(wǎng)絡(luò)端點(diǎn)的連接會(huì)一次處理盡可能多的數(shù)據(jù)量(所以帶寬可能會(huì)成為性能的瓶頸)

          建立連接時(shí)間:在客戶端和服務(wù)器之間建立連接往返數(shù)據(jù)(三次握手)

          TCP三次握手過程:客戶端向服務(wù)器發(fā)起一個(gè)SYN包,服務(wù)器端返回對應(yīng)的SYN的ACK響應(yīng)以及新的SYN包,然后客戶端返回對應(yīng)的ACK。(在客戶端和服務(wù)器之間建立正常的TCP網(wǎng)絡(luò)連接時(shí),客戶端首先發(fā)出一個(gè)SYN消息,服務(wù)器使用SYN+ACK應(yīng)答表示接收了這個(gè)消息,最后客戶端再以ACK消息響應(yīng)。)

          SYN是同步序列編號(hào),是TCP/IP建立連接時(shí)使用的握手信息。ACK是確認(rèn)字符,在數(shù)據(jù)通信中,接收站發(fā)給發(fā)送站的一種傳輸類控制字符。表示發(fā)來的數(shù)據(jù)已確認(rèn)接收無誤。在TCP/IP協(xié)議中,如果接收方成功的接收到數(shù)據(jù),那么會(huì)回復(fù)一個(gè)ACK數(shù)據(jù)。通過ACK信號(hào)有自己固定的格式,長度大小,由接收方回復(fù)給發(fā)送方。

          詳解三次握手

          第一次握手,建立連接時(shí),客戶端發(fā)送SYN包到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn),其中SYN就是同步序列編號(hào)。

          第二次握手,服務(wù)器收到SYN包,必須確認(rèn)客戶的SYN,同時(shí)自己也發(fā)送一個(gè)SYN包,即是SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。

          第三次握手,客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手。

          完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)。

          TLS協(xié)商時(shí)間(TLS會(huì)造成額外的往返傳輸)

          1. 客戶端發(fā)起https連接,需要進(jìn)行傳輸層安全協(xié)議協(xié)商
          2. TLS用來取代安全套接層SSL

          除了網(wǎng)絡(luò),還有頁面內(nèi)容本身或服務(wù)器性能,如首字節(jié)時(shí)間TTFB,內(nèi)容下載時(shí)間,開始渲染時(shí)間,文檔加載完成的時(shí)間等。

          那么什么是TTFB,它是指客戶端從開始定位到web頁面,直接收到主體頁面響應(yīng)的第一字節(jié)所耗費(fèi)的時(shí)間。它是測量:從瀏覽器發(fā)起請求至收到其第一字節(jié)之間的耗時(shí)。

          內(nèi)容下載時(shí)間是等同于被請求資源的最后字節(jié)到達(dá)時(shí)間。

          開始渲染時(shí)間,從客戶看到空白頁面的時(shí)長。

          5.1web性能優(yōu)化技術(shù)(減少客戶端網(wǎng)絡(luò)延遲和優(yōu)化頁面渲染性能來提升web性能)

          優(yōu)化技術(shù):

          • DNS查詢優(yōu)化
          • 客戶端緩存
          • 優(yōu)化TCP連接
          • 避免重定向
          • 網(wǎng)絡(luò)邊緣的緩存
          • 條件緩存
          • 壓縮和代碼極簡化
          • 圖片優(yōu)化

          6. http1.1

          • 改進(jìn)持久連接和CDN域名的分片機(jī)制
          • 不成熟的http管道化
          • 提供虛擬主機(jī)支持
          • 對動(dòng)態(tài)生成的內(nèi)容完美支持
          • 引入cookie以及安全機(jī)制

          對于http1的問題,迎來了http2。其中http1的問題:

          隊(duì)頭阻塞,大多數(shù)情況下,瀏覽器會(huì)希望同時(shí)獲取許多資源,但http1未提供機(jī)制來同時(shí)請求這些資源,如果僅是使用一個(gè)連接,需要發(fā)起請求,等待響應(yīng),然后才能發(fā)起下一個(gè)請求。

          在http1中要給特性為管道化,可以允許一次發(fā)送一組請求,但是需要按照發(fā)送順序依次接收響應(yīng)。所以在請求應(yīng)答過程中,如發(fā)生什么情況,剩下的工作都會(huì)被阻塞,這就是“隊(duì)頭阻塞”(阻塞在那次請求應(yīng)答發(fā)生錯(cuò)誤),阻礙網(wǎng)絡(luò)傳輸和web頁面的渲染,指導(dǎo)失去響應(yīng)。

          低效的TCP利用,TCP協(xié)議作為最可靠的協(xié)議之一,其核心是擁塞窗口。

          擁塞窗口,是衛(wèi)星通信在因特網(wǎng)中防止通信擁塞的一種措施,它是在發(fā)端采用了一種“擁塞避免”算法和“慢速啟動(dòng)”算法相結(jié)合的機(jī)制。“擁塞窗口”就是“擁塞避免”的窗口,它是一個(gè)裝在發(fā)送端的可滑動(dòng)窗口,窗口的大小是不超過接收端確認(rèn)通知的窗口。

          擁塞窗口指在接收方確認(rèn)數(shù)據(jù)包之前,發(fā)送方可以發(fā)送的TCP包的數(shù)據(jù)。(如擁塞窗口指定為1的情況,那么發(fā)送方就發(fā)出1個(gè)數(shù)據(jù)包之后,只有接收方確認(rèn)了那個(gè)發(fā)出的數(shù)據(jù)包,才能發(fā)送下一個(gè))

          擁塞控制能防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中,用于避免網(wǎng)絡(luò)過載,TCP中可以通過慢啟動(dòng)探索當(dāng)前連接對應(yīng)擁塞窗口的合適大小。即發(fā)送者發(fā)送數(shù)據(jù)的時(shí)候并非一開始注入大量數(shù)據(jù)到網(wǎng)絡(luò)中,而是發(fā)送一個(gè)數(shù)據(jù)包進(jìn)行測試,當(dāng)?shù)玫酱_認(rèn)回復(fù)后,額外發(fā)送一個(gè)未確認(rèn)包。

          這意味著得到一個(gè)確認(rèn)回復(fù),可以發(fā)送兩個(gè)數(shù)據(jù)包,得到兩個(gè)確認(rèn)回復(fù),可以發(fā)送四個(gè)數(shù)據(jù)包,以幾何形式增長很快到達(dá)協(xié)議規(guī)定的擁塞窗口大小(發(fā)包數(shù)上限),這時(shí)候連接進(jìn)入擁塞避免階段,這種機(jī)制需要往返幾次才能得知最佳擁塞窗口大小,但往返幾次所需的時(shí)間成本不可忽略。

          • 擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動(dòng)態(tài)地在變化。發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口。如果再考慮到接收方的接收能力,那么發(fā)送窗口還可能小于擁塞窗口。
          • 發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減少一些,以減少注入到網(wǎng)絡(luò)中的分組數(shù)。

          tcp中的慢啟動(dòng)概念,是用來探索當(dāng)前連接對應(yīng)擁塞窗口的合適大小。用來弄清楚新連接當(dāng)前的網(wǎng)絡(luò)情況。“慢速啟動(dòng)”是在連接建立后,每收到一個(gè)來自收端的確認(rèn),就控制窗口增加一個(gè)段值大小,當(dāng)窗口值達(dá)到“慢速啟動(dòng)”的限值后,慢速啟動(dòng)便停止工作,避免了網(wǎng)絡(luò)發(fā)生擁塞。

          TCP傳輸控制協(xié)議的設(shè)計(jì)思路是,對假設(shè)情況很保守情況下,能夠公平對待同一網(wǎng)絡(luò)的不同流量的應(yīng)用,它的避免擁塞機(jī)制被設(shè)計(jì)城即使在最差的網(wǎng)絡(luò)情況下也可以起作用。

          臃腫的消息首部,HTTP/1.1能壓縮請求內(nèi)容,但是消息首部卻不能壓縮。它可能占據(jù)請求的絕大部分(也可能是全部)也是比較常見了。(在這里如果能壓縮請求首部,把請求變得更小,就能夠緩解帶寬壓力了,降低系統(tǒng)的總負(fù)載)

          受限的優(yōu)先級設(shè)置,即如果瀏覽器針對指定域名開啟多個(gè)socket請求,若web頁面某些資源會(huì)比另外一些資源重要,會(huì)加重資源的排隊(duì)效應(yīng),會(huì)延遲請求其他的資源,優(yōu)先級高的資源先獲取,優(yōu)先級低的資源會(huì)在資源高的資源處理完成,(在處理過程中,瀏覽器不會(huì)發(fā)起新的資源請求)等待高的完成后再發(fā)起請求,(這就會(huì)讓總的頁面下載時(shí)間延長)。

          在請求優(yōu)先級高的資源的時(shí)間區(qū)間內(nèi)瀏覽器并不會(huì)發(fā)起優(yōu)先級較低的新請求

          小結(jié):HTTP1.1慢啟動(dòng)影響資源首次加載速度,TCP建立連接后,會(huì)開始請求傳輸,開始比較慢,然后不斷加快,為了防止出現(xiàn)網(wǎng)絡(luò)擁堵,會(huì)讓頁面的首次渲染時(shí)間變長。開始多個(gè)tcp,如出現(xiàn)網(wǎng)絡(luò)下降,無法識(shí)別資源的優(yōu)先級,會(huì)出現(xiàn)靜態(tài)問題。

          7.如何進(jìn)行網(wǎng)站性能優(yōu)化

          1. 內(nèi)容方面,減少Http請求(合并文件,css精靈,inline Image),減少DNS查詢(DNS緩存,將資源分布到合適的數(shù)量的主機(jī)名),減少DOM元素的數(shù)量。
          2. Cookie方面,可以減少Cookie的大小。
          3. css方面,將樣式表放到頁面頂部;不使用css表達(dá)式;使用<link>不使用@import;可將css從外部引入;壓縮css。
          4. JavaScript方面,將腳本放到頁面底部;將JavaScript從外部引入;壓縮JavaScript,刪除不需要的腳本,減少DOM的訪問。
          5. 圖片方面,可優(yōu)化css精靈,不要在HTML中拉伸圖片,優(yōu)化圖片(壓縮)。

          8.http狀態(tài)碼以及含義

          1. 對于1xx的狀態(tài)碼,為信息狀態(tài)碼,100 為繼續(xù),表示確認(rèn),成功返回具體參數(shù)信息。
          2. 對于2xx的狀態(tài)碼,200 表示正常返回信息,201表示請求成功并且服務(wù)器創(chuàng)建了新的資源,202表示服務(wù)器已接受請求,但尚未處理。
          3. 對于3xx,重定向,301表示,請求的網(wǎng)頁已永久移動(dòng)到新位置,302表示,臨時(shí)性重定向,303表示臨時(shí)性重定向,且總是使用 GET 請求新的 URI。304表示,自從上次請求后,請求的網(wǎng)頁未修改過。
          4. 對于4xx,客戶端錯(cuò)誤,404,服務(wù)器無法理解請求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請求,401,請求未授權(quán),403,禁止訪問,404,找不到如何與 URI 相匹配的資源。
          5. 對于5xx,服務(wù)器錯(cuò)誤,500,最常見的服務(wù)器端錯(cuò)誤,503,服務(wù)器端暫時(shí)無法處理請求,可能是過載或維護(hù)。

          9.http-數(shù)據(jù)壓縮

          數(shù)據(jù)壓縮,在瀏覽器中發(fā)送請求時(shí)會(huì)帶著Content-Encoding: gzip,里面時(shí)瀏覽器支持的壓縮格式列表,有多種如,gzip,deflate,br等。這樣服務(wù)器就可以從中選擇一個(gè)壓縮算法,放進(jìn)Content-Encoding響應(yīng)頭里,再把原數(shù)據(jù)壓縮后發(fā)給瀏覽器。

          10.http-分塊傳輸

          分塊傳輸,就是將傳輸?shù)奈募纸獬啥鄠€(gè)小塊,然后分發(fā)給瀏覽器,瀏覽器收到后再重新組裝復(fù)原。

          每個(gè)分開包含兩個(gè)部分,分塊長度和分塊數(shù)據(jù)(長度頭和數(shù)據(jù)塊),長度頭以CRLF結(jié)尾的一行明文,數(shù)據(jù)塊緊跟在長度頭后面,也是用CRLF結(jié)尾,最后用一個(gè)長度為0的塊表示結(jié)束。

          在響應(yīng)報(bào)文里用頭字段Transfer-Encoding:chunked表示報(bào)文里的body部分不是一次性發(fā)送過來的,而是分成了許多塊逐個(gè)發(fā)送的。

          在Transfer-Encoding:chunked和Content-Length中,這兩個(gè)字段是互斥的。

          一個(gè)響應(yīng)報(bào)文的傳輸長度要么已知,要么長度未知(chunked)。

          Content-Length: 299

          11.http-范圍請求

          斷點(diǎn)續(xù)傳

          要實(shí)現(xiàn)該功能需要制定下載的實(shí)體范圍,這種制定范圍發(fā)送請求叫做范圍請求。

          Accept-Ranges:服務(wù)器使用http響應(yīng)頭Accept-Ranges標(biāo)識(shí)自身支持范圍請求,字段的具體值用于定義范圍請求的單位。

          語法



          Accept-Ranges: bytes,范圍請求的單位是 bytes (字節(jié))
          Accept-Ranges: none,不支持任何范圍請求單位

          范圍請求時(shí)用于不需要全部數(shù)據(jù),只需要其中的部分請求時(shí),可以使用范圍請求,允許客戶端在請求頭里使用專用字段來表示只獲取文件的一部分。

          Range的格式,請求頭Range是HTTP范圍請求的專用字段,格式是“bytes=x-y”,以字節(jié)為單位的數(shù)據(jù)范圍。

          1. “0-”表示從文檔起點(diǎn)開始到文檔結(jié)束的整個(gè)文件。
          2. “100-”表示從第100個(gè)字節(jié)開始到文檔末尾。
          3. “-10”表示從文檔末尾倒數(shù)的第10個(gè)字節(jié)開始。

          示例:

          執(zhí)行范圍時(shí)會(huì)使用頭部字段 Range 來指定資源 byte 的范圍。
          Range格式:
          5001-10000字節(jié)
          Range : byte = 5001-10000
          5000之后的
          Range : byte = 5001-
          0-3000字節(jié),5001-10000字節(jié)
          Range : byte=-3000,5001-10000
          

          上圖表示服務(wù)器收到Range字段后,檢測范圍合法性,范圍越界,就會(huì)返回狀態(tài)碼416,如你的文件只有1000個(gè)字節(jié),但請求范圍在20000-3000,就會(huì)導(dǎo)致這個(gè)狀態(tài)碼的出現(xiàn)。

          如果成功讀取文件,范圍正確,返回狀態(tài)碼“206”。服務(wù)器要添加一個(gè)響應(yīng)頭字段Content-Range,告訴片段的實(shí)際偏移量和資源的總大小。

          最后是發(fā)送數(shù)據(jù),直接把片段用TCP發(fā)給客戶端,一個(gè)范圍請求就算是處理完了。

          格式是“bytes x-y/length”,與Range頭區(qū)別在沒有“=”

          Content-Range: bytes 0-4395719/4395720

          12.http-多段數(shù)據(jù)

          多端數(shù)據(jù),就是在Range頭里使用多個(gè)“x-y",一次性獲取多個(gè)片段數(shù)據(jù)。使用一種特殊的MIME類型:“multipart/byteranges”,用來表示響應(yīng)報(bào)文包含了多個(gè)范圍時(shí)使用。多種范圍請求 響應(yīng)會(huì)在頭部 Content-Type 表明 multipart-byteranges。

          多段數(shù)據(jù)圖:分隔標(biāo)記boundary來區(qū)分不同的分段

          13.說一說cookies,sessionStorage 和 localStorage 的區(qū)別?

          • cookie是網(wǎng)站用來標(biāo)識(shí)用戶身份而存儲(chǔ)在用戶本地終端上的數(shù)據(jù)
          • cookie數(shù)據(jù)始終在同源的http請求中攜帶,即使是不需要的情況,so,會(huì)在瀏覽器和服務(wù)器間來回傳遞
          • sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)送給服務(wù)器,僅僅在本地保存

          存儲(chǔ)的大小

          cookie的數(shù)據(jù)大小不能超過4k;sessionStorage和localStorage雖然也有存儲(chǔ)大小的限制,但比cookie大得多,可以達(dá)到5M或者更大。

          有限期時(shí)間

          1. localStorage存儲(chǔ)持久數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不會(huì)丟失,除了主動(dòng)刪除數(shù)據(jù)
          2. sessionStorage數(shù)據(jù)在當(dāng)前瀏覽器窗口關(guān)閉后自動(dòng)刪除
          3. 設(shè)置得cookie過期時(shí)間之前都有效,就算窗口或者是瀏覽器關(guān)閉

          14.為什么說利用多個(gè)域名來存儲(chǔ)網(wǎng)站資源會(huì)更有效?

          因?yàn)镃DN緩存更方便;突破瀏覽器并發(fā)限制;節(jié)約cookie帶寬;節(jié)約主域名得連接數(shù),優(yōu)化頁面響應(yīng)速度;防止不必要得安全性問題。

          15.http2.0的內(nèi)容

          http2是超文本傳輸協(xié)議的第二版,相比http1協(xié)議的文本傳輸格式,http2是以二進(jìn)制的格式進(jìn)行數(shù)據(jù)傳輸?shù)模哂懈〉膫鬏旙w積以及負(fù)載。

          http2.0分層,分幀層(http2多路復(fù)用能力的核心部分),數(shù)據(jù)或http層(包含傳統(tǒng)上被認(rèn)為是 HTTP 及其關(guān)聯(lián)數(shù)據(jù)的部分)。

          HTTP2.0:

          • 多路復(fù)用機(jī)制,引入了二進(jìn)制的分幀層機(jī)制來實(shí)現(xiàn)多路復(fù)用。(分幀層是基于幀的二進(jìn)制協(xié)議。這方便了機(jī)器解析。請求和響應(yīng)交織在一起。)
          • 可以設(shè)置請求的優(yōu)先級(客戶端的分幀層對分割塊標(biāo)上請求的優(yōu)先級)。
          • 頭部壓縮 請求頭壓縮,增加傳輸效率。

          HTTP/2較HTTP/1.1優(yōu)化亮點(diǎn)

          • 多路復(fù)用的流
          • 頭部壓縮
          • 資源優(yōu)先級和依賴設(shè)置
          • 服務(wù)器推送
          • 流量控制
          • 重置消息

          多路復(fù)用的實(shí)現(xiàn):

          在單個(gè)域名下仍可以建立一個(gè)TCP管道,使用一個(gè)TCP長連接,下載整個(gè)資源頁面,只需要一次慢啟動(dòng),并且避免了靜態(tài),瀏覽器發(fā)起請求,分幀層會(huì)對每個(gè)請求進(jìn)行分割,將同一個(gè)請求的分割塊打上相同的id編號(hào),然后通過協(xié)議棧將所有的分割體發(fā)送給服務(wù)器,然后通過服務(wù)器的分幀層根據(jù)id編號(hào)進(jìn)行請求組裝,服務(wù)器的分幀層將回應(yīng)數(shù)據(jù)分割按同一個(gè)回應(yīng)體進(jìn)行ID分割回應(yīng)給客戶端,客戶端拼裝回應(yīng)。

          對于http2中的幀(frame),http1不是基于幀(frame)的,是文本分隔的。

          GET/HTTP/1.1 <crlf>

          這樣,對于http1的請求或者是響應(yīng)可能有的問題:

          1. 一次只能處理一個(gè)請求或者是響應(yīng),完成之前是不能停止解析的。
          2. 無法預(yù)判解析需要多少內(nèi)層。

          HTTP/1 的請求和響應(yīng)報(bào)文,是由起始行、首部和正文組成,換行符分隔;HTTP/2是將請求和響應(yīng)數(shù)據(jù)分割成更小的幀,采用二進(jìn)制編碼,易于解析的。

          參考圖片:

          幀結(jié)構(gòu)總結(jié) 所有的幀都包含一個(gè)9 byte的幀頭 + 可邊長的正文不同。根據(jù)幀的類型不同,正文部分的結(jié)構(gòu)也不一樣。

          幀頭:

          16.http2-幕后

          http2作為一個(gè)二進(jìn)制協(xié)議,擁有包含輕量型,安全和快速在內(nèi)的所有優(yōu)勢,保留了原始的http協(xié)議語義,對于http2更改了在系統(tǒng)之間傳輸數(shù)據(jù)的方式。

          二進(jìn)制分幀層(binary framing layer),所有通信都在單個(gè)TCP連接上執(zhí)行,該連接在整個(gè)對話期間一直處于打開狀態(tài),主要是二進(jìn)制協(xié)議將通信分解為幀的方式,這些幀交織在客戶端與服務(wù)器之間的雙向邏輯流中。

          HTTP/2 連接的拓?fù)浣Y(jié)構(gòu)(展示了一個(gè)用于建立多個(gè)流的連接)

          在流 1 中,發(fā)送了一條請求消息,并返回了相應(yīng)的響應(yīng)消息。

          HTTP/2 幀結(jié)構(gòu)

          前9個(gè)字節(jié)對于每個(gè)幀是一致的。解析時(shí)只需要讀取這些字節(jié),就可以準(zhǔn)確地知道在整個(gè)幀中期望的字節(jié)數(shù)。

          幀首部字段表格:

          名稱長度描述length3字節(jié)表示幀負(fù)載的長度type1字節(jié)當(dāng)前幀類型Flags1字節(jié)具體幀類型的標(biāo)識(shí)R1位保留位,不要設(shè)置,否則會(huì)帶來嚴(yán)重后果Stream Identifier31位每個(gè)流的唯一IDFrame Payload長度可變真實(shí)的幀內(nèi)容,長度是在length字段中設(shè)置的

          備注:流Id是用來標(biāo)識(shí)幀所屬的流。流看作在連接上的一系列幀,它們構(gòu)成了單獨(dú)的 HTTP 請求和響應(yīng)。

          對于http1 的請求和響應(yīng)都分成消息首部和消息體兩部分;http2 從上面一張圖可以知道,http2的請求和響應(yīng)分成HEADERS 幀和 DATA 幀。

          比較一下:

          http2的一個(gè)重要特性是基于流的流量控制。提供了客戶端調(diào)整傳輸速度的能力。其中WINDOW_UPDATE 幀用來指示流量控制信息。

          有了多路復(fù)用,客戶端可以一次發(fā)出多有資源的請求,不用像http1那樣,發(fā)出對新對象請求之前,需要等待前一個(gè)響應(yīng)完成。所以瀏覽器失去了在Http1中的默認(rèn)資源請求優(yōu)先級策略。

          17.瀏覽器生成http請求消息

          http的頭字段

          頭字段類型含義Date表示請求和響應(yīng)生成的日期Pragma表示數(shù)據(jù)是否允許緩存的通信選項(xiàng)Cache-Control控制緩存的相關(guān)信息Connection設(shè)置發(fā)送響應(yīng)之后TCP連接是否繼續(xù)保持的通信選項(xiàng)Transfer-Encoding表示消息主體的編碼格式Via記錄途中經(jīng)過的代理和網(wǎng)關(guān)Authorization身份認(rèn)證數(shù)據(jù)From請求發(fā)送者的郵件地址Referer當(dāng)通過點(diǎn)擊超級鏈接進(jìn)入下一個(gè)頁面時(shí),在這里會(huì)記錄下上一個(gè)頁面的URIUser-Agent客戶端軟件的名稱和版本號(hào)等相關(guān)信息Accept客戶端可支持的數(shù)據(jù)類型,以MIME類型來表示Accept-Charset客戶端可支持的字符集Accept-Language客戶端可支持的語言Host接收請求的服務(wù)器ip地址和端口號(hào)Range當(dāng)需要只獲取部分?jǐn)?shù)據(jù)而不是全部數(shù)據(jù)時(shí),可通過這個(gè)字段指定要獲取的數(shù)據(jù)范圍Location表示信息的準(zhǔn)確位置Server服務(wù)器程序的名稱和版本號(hào)等相關(guān)信息Allow表示指定的URI支持Content-Encoding當(dāng)消息體經(jīng)過壓縮等編碼處理時(shí),表示其編碼格式Content-Length表示消息體的長度Content-Type表示消息體的數(shù)據(jù)類型,以MIME規(guī)格定義的數(shù)據(jù)類型來表示Expires表示消息體的有效期Last-Modified數(shù)據(jù)的最后更新日期Content-Language表示消息體的語言Content-Location表示消息體在服務(wù)器上的位置Content-Range當(dāng)僅請求部分?jǐn)?shù)據(jù)時(shí),表示消息體包含的數(shù)據(jù)范圍

          HTTP消息示例:

          1. HTTP,超文本傳送協(xié)議。
          2. 協(xié)議,通信操作的規(guī)則定義稱為協(xié)議。
          3. URI,統(tǒng)一資源標(biāo)識(shí)符。
          4. 1 條請求消息中只能寫 1 個(gè) URI。如果需要獲取多個(gè)文件,必須 對每個(gè)文件單獨(dú)發(fā)送 1 條請求。

          IP 的基本思路

          Ip地址的表示方法

          IP地址的結(jié)構(gòu)-子網(wǎng)掩碼表示網(wǎng)絡(luò)號(hào)與主機(jī)號(hào)之間的邊界。

          解析器的調(diào)用方法

          DNS服務(wù)器的基本工作

          DNS 服務(wù)器之間的查詢操作

          數(shù)據(jù)通過類似管道的結(jié)構(gòu)來流動(dòng)

          18.了解網(wǎng)絡(luò)基礎(chǔ)知識(shí)

          • 物理層
          • 數(shù)據(jù)鏈路層
          • 網(wǎng)絡(luò)層
          • 傳輸層
          • 會(huì)話層
          • 表示層
          • 應(yīng)用層

          . 前端需要注意哪些SEO

          • 合理的 title description keywords :搜索對著三項(xiàng)的權(quán)重逐個(gè)減?, title值強(qiáng)調(diào)重點(diǎn)即可,重要關(guān)鍵詞出現(xiàn)不要超過2次,?且要靠前,不同?? title 要有所不 同; description 把??內(nèi)容?度概括,?度合適,不可過分堆砌關(guān)鍵詞,不同??description 有所不同; keywords 列舉出重要關(guān)鍵詞即可
          • 語義化的 HTML 代碼,符合W3C規(guī)范:語義化代碼讓搜索引擎容易理解??
          • 重要內(nèi)容 HTML 代碼放在最前:搜索引擎抓取 HTML 順序是從上到下,有的搜索引擎對抓 取?度有限制,保證重要內(nèi)容?定會(huì)被抓取
          • 重要內(nèi)容不要? js 輸出:爬?不會(huì)執(zhí)?js獲取內(nèi)容
          • 少? iframe :搜索引擎不會(huì)抓取 iframe 中的內(nèi)容
          • ?裝飾性圖?必須加 alt
          • 提??站速度:?站速度是搜索引擎排序的?個(gè)重要指標(biāo)

          2. img的 title 和 alt 有什么區(qū)別

          通常當(dāng)?標(biāo)滑動(dòng)到元素上的時(shí)候顯示

          alt 是 的特有屬性,是圖?內(nèi)容的等價(jià)描述,?于圖??法加載時(shí)顯示、讀屏器 閱讀圖?。可提圖??可訪問性,除了純裝飾圖?外都必須設(shè)置有意義的值,搜索引擎會(huì) 重點(diǎn)分析。

          3. HTTP的?種請求?法?途

          • GET ?法

          發(fā)送?個(gè)請求來取得服務(wù)器上的某?資源

          • POST ?法

          URL 指定的資源提交數(shù)據(jù)或附加新的數(shù)據(jù)

          • PUT ?法

          POST ?法很像,也是想服務(wù)器提交數(shù)據(jù)。但是,它們之間有不同。 PUT 指定了資 源在服務(wù)器上的位置,? POST 沒有

          • HEAD ?法

          只請求??的?部

          • DELETE ?法

          刪除服務(wù)器上的某資源

          • OPTIONS ?法

          它?于獲取當(dāng)前 URL 所?持的?法。如果請求成功,會(huì)有?個(gè) Allow 的頭包含類 似 “GET,POST” 這樣的信息

          • TRACE ?法

          TRACE ?法被?于激發(fā)?個(gè)遠(yuǎn)程的,應(yīng)?層的請求消息回路

          • CONNECT ?法

          把請求連接轉(zhuǎn)換到透明的 TCP/IP 通道

          4. 從瀏覽器地址欄輸?url到顯示??的步驟

          基礎(chǔ)版本 瀏覽器根據(jù)請求的 URL 交給 DNS 域名解析,找到真實(shí) IP ,向服務(wù)器發(fā)起請求; 服務(wù)器交給后臺(tái)處理完成后返回?cái)?shù)據(jù),瀏覽器接收?件( HTML、JS、CSS 、圖象等); 瀏覽器對加載到的資源( HTML、JS、CSS 等)進(jìn)?語法解析,建?相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu) (如 HTML DOM ); 載?解析到的資源?件,渲染??,完成。

          詳細(xì)版

          1. 在瀏覽器地址欄輸?URL

          2. 瀏覽器查看緩存,如果請求資源在緩存中并且新鮮,跳轉(zhuǎn)到轉(zhuǎn)碼步驟

          • 如果資源未緩存,發(fā)起新請求
          • 如果已緩存,檢驗(yàn)是否?夠新鮮,?夠新鮮直接提供給客戶端,否則與服務(wù)器進(jìn)?驗(yàn) 證。
          • 檢驗(yàn)新鮮通常有兩個(gè)HTTP頭進(jìn)?控制 Expires Cache-Control : HTTP1.0提供Expires,值為?個(gè)絕對時(shí)間表示緩存新鮮?期 HTTP1.1增加了Cache-Control: max-age=,值為以秒為單位的最?新鮮時(shí)間

          3. 瀏覽器解析URL獲取協(xié)議,主機(jī),端?,path

          4. 瀏覽器組裝?個(gè)HTTP(GET)請求報(bào)?

          5. 瀏覽器獲取主機(jī)ip地址,過程如下:

          • 瀏覽器緩存
          • 本機(jī)緩存
          • hosts?件
          • 路由器緩存
          • ISP DNS緩存
          • DNS遞歸查詢(可能存在負(fù)載均衡導(dǎo)致每次IP不?樣)

          6. 打開?個(gè)socket與?標(biāo)IP地址,端?建?TCP鏈接,三次握?如下:

          • 客戶端發(fā)送?個(gè)TCP的SYN=1,Seq=X的包到服務(wù)器端?
          • 服務(wù)器發(fā)回SYN=1, ACK=X+1, Seq=Y的響應(yīng)包
          • 客戶端發(fā)送ACK=Y+1, Seq=Z

          7. TCP鏈接建?后發(fā)送HTTP請求

          8. 服務(wù)器接受請求并解析,將請求轉(zhuǎn)發(fā)到服務(wù)程序,如虛擬主機(jī)使?HTTP Host頭部判斷請 求的服務(wù)程序

          9. 服務(wù)器檢查HTTP請求頭是否包含緩存驗(yàn)證信息如果驗(yàn)證緩存新鮮,返回304等對應(yīng)狀態(tài)碼 10. 處理程序讀取完整請求并準(zhǔn)備HTTP響應(yīng),可能需要查詢數(shù)據(jù)庫等操作

          11. 服務(wù)器將響應(yīng)報(bào)?通過TCP連接發(fā)送回瀏覽器

          12. 瀏覽器接收HTTP響應(yīng),然后根據(jù)情況選擇關(guān)閉TCP連接或者保留重?,關(guān)閉TCP連接的四 次握?如下: 1. 主動(dòng)?發(fā)送Fin=1, Ack=Z, Seq= X報(bào)? 2. 被動(dòng)?發(fā)送ACK=X+1, Seq=Z報(bào)? 3. 被動(dòng)?發(fā)送Fin=1, ACK=X, Seq=Y報(bào)? 4. 主動(dòng)?發(fā)送ACK=Y, Seq=X報(bào)?

          13. 瀏覽器檢查響應(yīng)狀態(tài)嗎:是否為1XX,3XX, 4XX, 5XX,這些情況處理與2XX不同

          14. 如果資源可緩存,進(jìn)?緩存

          15. 對響應(yīng)進(jìn)?解碼(例如gzip壓縮)

          16. 根據(jù)資源類型決定如何處理(假設(shè)資源為HTML?檔)

          17. 解析HTML?檔,構(gòu)件DOM樹,下載資源,構(gòu)造CSSOM樹,執(zhí)?js腳本,這些操作沒有嚴(yán) 格的先后順序,以下分別解釋

          18. 構(gòu)建DOM樹: 1. Tokenizing:根據(jù)HTML規(guī)范將字符流解析為標(biāo)記 2. Lexing:詞法分析將標(biāo)記轉(zhuǎn)換為對象并定義屬性和規(guī)則 3. DOM construction:根據(jù)HTML標(biāo)記關(guān)系將對象組成DOM樹

          19. 解析過程中遇到圖?、樣式表、js?件,啟動(dòng)下載

          20. 構(gòu)建CSSOM樹:

          5 如何進(jìn)??站性能優(yōu)化

          content ??

          • 減少 HTTP 請求:合并?件、 CSS 精靈、 inline Image
          • 減少 DNS 查詢: DNS 緩存、將資源分布到恰當(dāng)數(shù)量的主機(jī)名
          • 減少 DOM 元素?cái)?shù)量

          Server ??

          • 使? CDN
          • 配置 ETag
          • 對組件使? Gzip 壓縮

          Cookie ??

          • 減? cookie ??

          css ??

          • 將樣式表放到??頂部
          • 不使? CSS 表達(dá)式
          • 使?link 不使? @import

          Javascript ??

          • 將腳本放到??底部
          • javascript css 從外部引?
          • 壓縮 javascript css
          • 刪除不需要的腳本
          • 減少 DOM 訪問

          圖???

          • 優(yōu)化圖?:根據(jù)實(shí)際顏?需要選擇?深、壓縮
          • 優(yōu)化 css 精靈
          • 不要在 HTML 中拉伸圖?


          每天來個(gè)5題就行,關(guān)注我,每天一起學(xué)一點(diǎn)點(diǎn)。


          主站蜘蛛池模板: 无码中文字幕乱码一区| 精品香蕉一区二区三区| 狠狠做深爱婷婷久久综合一区 | 在线视频国产一区| 精品少妇一区二区三区在线| 日韩社区一区二区三区| 日韩人妻一区二区三区免费| 爆乳熟妇一区二区三区霸乳 | 日本精品一区二区三区视频| 亚洲一本一道一区二区三区| 动漫精品专区一区二区三区不卡| 精品国产一区二区三区AV性色 | 亚洲一区电影在线观看| 成人精品一区二区电影| 日亚毛片免费乱码不卡一区 | 国产一区在线播放| 久久se精品一区二区| 极品尤物一区二区三区| 日韩精品一区二区三区中文字幕 | 精品国产一区二区三区在线| 国产精品一区二区av不卡| 精品人体无码一区二区三区 | 国产精品乱码一区二区三| 精品视频在线观看一区二区三区| 香蕉免费一区二区三区| 日韩精品一区二区三区老鸦窝| 无码人妻久久一区二区三区免费| 日本免费电影一区| 亚洲午夜精品一区二区麻豆| 国产成人精品一区二区A片带套| 色综合久久一区二区三区| 免费av一区二区三区| 国产在线精品一区二区三区不卡| 亚洲欧洲一区二区| 精品乱子伦一区二区三区| 美女视频黄a视频全免费网站一区| 亚洲AV无码一区二区一二区| 精品一区二区三区东京热| AV天堂午夜精品一区二区三区| 亚洲无码一区二区三区| 麻豆果冻传媒2021精品传媒一区下载|