HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專(zhuān)注品牌策劃15年

    前端如何優(yōu)化網(wǎng)站性能(前端如何優(yōu)化網(wǎng)站性能設(shè)置)

    發(fā)布時(shí)間:2023-04-19 04:38:49     稿源: 創(chuàng)意嶺    閱讀: 63        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于前端如何優(yōu)化網(wǎng)站性能的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話(huà)答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線(xiàn)網(wǎng)頁(yè)版、PC客戶(hù)端

    官網(wǎng):https://ai.de1919.com

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶(hù)遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話(huà)175-8598-2043,或添加微信:1454722008

    本文目錄:

    前端如何優(yōu)化網(wǎng)站性能(前端如何優(yōu)化網(wǎng)站性能設(shè)置)

    一、網(wǎng)站性能優(yōu)化有哪些

    一、提高服務(wù)器并發(fā)處理能力

    我們總是希望一臺(tái)服務(wù)器在單位時(shí)間內(nèi)能處理的請(qǐng)求越多越好,這也成了web服務(wù)器的能力高低的關(guān)鍵所在。服務(wù)器之所以可以同時(shí)處理多個(gè)請(qǐng)求,在于操作系統(tǒng)通過(guò)多執(zhí)行流體系設(shè)計(jì),使得多個(gè)任務(wù)可以輪流使用系統(tǒng)資源,這些資源包括CPU、內(nèi)存以及I/O等。這就需要選擇一個(gè)合適的并發(fā)策略來(lái)合理利用這些資源,從而提高服務(wù)器的并發(fā)處理能力。這些并發(fā)策略更多的應(yīng)用在apache、nginx、lighttpd等底層web server軟件中。

    二、Web組件分離

    這里所說(shuō)的web組件是指web服務(wù)器提供的所有基于URL訪(fǎng)問(wèn)的資源,包括動(dòng)態(tài)內(nèi)容,靜態(tài)網(wǎng)頁(yè),圖片,樣式表,腳本,視頻等等。這些資源在文件大小,文件數(shù)量,內(nèi)容更新頻率,預(yù)計(jì)并發(fā)用戶(hù)數(shù),是否需要腳本解釋器等方面有著很大的差異,對(duì)不同特性資源采用能充分發(fā)揮其潛力的優(yōu)化策略,能極大的提高web站點(diǎn)的性能。例如:將圖片部署在獨(dú)立的服務(wù)器上并為其分配獨(dú)立的新域名,對(duì)靜態(tài)網(wǎng)頁(yè)使用epoll模型可以在大并發(fā)數(shù)情況下吞吐率保持穩(wěn)定。

    三、數(shù)據(jù)庫(kù)性能優(yōu)化和擴(kuò)展。

    Web服務(wù)器軟件在數(shù)據(jù)庫(kù)方面做的優(yōu)化主要是減少訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的次數(shù),具體做法就是使用各種緩存方法。也可以從數(shù)據(jù)庫(kù)本身入手提高其查詢(xún)性能,這涉及到數(shù)據(jù)庫(kù)性能優(yōu)化方面的知識(shí)本文不作討論。另外也可以通過(guò)主從復(fù)制,讀寫(xiě)分離,使用反向代理,寫(xiě)操作分離等方式來(lái)擴(kuò)展數(shù)據(jù)庫(kù)規(guī)模,提升數(shù)據(jù)庫(kù)服務(wù)能力。

    四、Web負(fù)載均衡及相關(guān)技術(shù)

    負(fù)載均衡是web站點(diǎn)規(guī)模水平擴(kuò)展的一種手段,實(shí)現(xiàn)負(fù)載均衡的方法有好幾種包括基于HTTP重定向的負(fù)載均衡,DNS負(fù)載均衡,反向代理負(fù)載均衡,四層負(fù)載均衡等等。

    對(duì)這些負(fù)載均衡方法做簡(jiǎn)單的介紹:基于HTTP重定向的負(fù)載均衡利用了HTTP重定向的請(qǐng)求轉(zhuǎn)移和自動(dòng)跳轉(zhuǎn)功能來(lái)實(shí)現(xiàn)負(fù)載均衡,我們熟悉的鏡像下載就使用這種負(fù)載均衡。DNS負(fù)載均衡是指在一個(gè)DNS服務(wù)器中為同一個(gè)主機(jī)名配置多個(gè)IP地址,在應(yīng)答DNS查詢(xún)時(shí)返回不同的解析結(jié)果將客戶(hù)端的訪(fǎng)問(wèn)引到不同的機(jī)器上,使得不同的客戶(hù)端訪(fǎng)問(wèn)不同的服務(wù)器,從而達(dá)到負(fù)載均衡的目的。反向代理負(fù)載均衡也叫七層負(fù)載均衡,這是因?yàn)榉聪虼矸?wù)器工作在TCP七層結(jié)構(gòu)的第七層(應(yīng)用層),它通過(guò)檢查流經(jīng)的HTTP報(bào)頭,根據(jù)報(bào)頭內(nèi)的信息來(lái)執(zhí)行負(fù)載均衡任務(wù)。四層負(fù)載均衡是基于NAT技術(shù)的負(fù)載均衡,它將一個(gè)Internet上合法注冊(cè)的IP地址映射為多個(gè)內(nèi)部服務(wù)器的IP地址,對(duì)每次TCP連接請(qǐng)求動(dòng)態(tài)使用其中一個(gè)內(nèi)部IP地址,達(dá)到負(fù)載均衡的目的。此外,還有工作在數(shù)據(jù)鏈路層(第二層)的直接路由方式下的負(fù)載均衡,它通過(guò)修改數(shù)據(jù)包目標(biāo)MAC地址來(lái)實(shí)現(xiàn)。以及,基于IP隧道的負(fù)載均衡,在這種方式下可以將實(shí)際服務(wù)器根據(jù)需要部署在不同的地域,并根據(jù)就近訪(fǎng)問(wèn)的原則來(lái)轉(zhuǎn)移請(qǐng)求,CDN服務(wù)便是基于IP隧道技術(shù)來(lái)實(shí)現(xiàn)的。

    Web負(fù)載均衡在擴(kuò)展web服務(wù)器規(guī)模的同時(shí)也給web站點(diǎn)性能優(yōu)化提供了一個(gè)更大更復(fù)雜也更靈活自由的平臺(tái),基于該平臺(tái)性能優(yōu)化的策略包括共享文件系統(tǒng),內(nèi)容分發(fā)與同步,分布式文件系統(tǒng),分布式計(jì)算,分布式緩存等等。

    五、web緩存技術(shù)

    web緩存技術(shù)被認(rèn)為是減輕服務(wù)器負(fù)載、降低網(wǎng)絡(luò)擁塞、增強(qiáng)萬(wàn)維網(wǎng)可擴(kuò)展性的有效途徑,其基本思想是利用客戶(hù)訪(fǎng)問(wèn)的時(shí)間局部性(Temporal Locality)原理,將客戶(hù)訪(fǎng)問(wèn)過(guò)的內(nèi)容在Cache中存放一個(gè)副本,當(dāng)該內(nèi)容下次被訪(fǎng)問(wèn)時(shí),不必連接到駐留網(wǎng)站或重新計(jì)算生成,而是由Cache中保留的副本提供。Web緩存可以帶來(lái)如下的好處:

    (1) 減少網(wǎng)絡(luò)流量,從而減輕網(wǎng)絡(luò)擁塞;這是因?yàn)榫彺姹苊饬艘徊糠諬TTP請(qǐng)求。

    (2) 降低客戶(hù)訪(fǎng)問(wèn)延遲,其主要原因有:①已緩存的內(nèi)容,客戶(hù)可以緩存獲取而不是從服務(wù)器獲取或重新計(jì)算生成,從而減小了傳輸延遲縮短了響應(yīng)時(shí)間;②沒(méi)有被緩存的內(nèi)容由于網(wǎng)絡(luò)擁塞及服務(wù)器負(fù)載的減輕而可以較快地被客戶(hù)獲取;

    (3) 由于客戶(hù)的部分或者全部請(qǐng)求內(nèi)容可以從通過(guò)緩存獲取,從而減輕了遠(yuǎn)程服務(wù)器負(fù)載。

    (4) 如果由于服務(wù)器故障或網(wǎng)絡(luò)故障造成服務(wù)器無(wú)法響應(yīng)客戶(hù)請(qǐng)求,客戶(hù)可以從緩存中獲取緩存的內(nèi)容副本,使得web站點(diǎn)服務(wù)的魯棒性(Robustness)得到了加強(qiáng)。

    可以看出web緩存能給web站點(diǎn)帶可觀的性能提升。其實(shí)在用戶(hù)發(fā)出請(qǐng)求到一幅完整的網(wǎng)頁(yè)呈現(xiàn)在用戶(hù)面前這一過(guò)程中緩存無(wú)處不在,下面是web性能優(yōu)化時(shí)常用的緩存技術(shù),你會(huì)發(fā)現(xiàn)緩存被廣泛應(yīng)用在各個(gè)環(huán)節(jié)。

    瀏覽器緩存:瀏覽器一般會(huì)在用戶(hù)文件系統(tǒng)中創(chuàng)建一個(gè)目錄,用于存放緩存文件,并給每個(gè)緩存文件打上必要的標(biāo)記,比如過(guò)期時(shí)間等。這些標(biāo)記主要用于瀏覽器和服務(wù)器之間的緩存協(xié)商。

    Web服務(wù)器緩存:一個(gè)URL在一段較長(zhǎng)時(shí)間內(nèi)對(duì)應(yīng)一個(gè)唯一的響應(yīng)內(nèi)容,比如靜態(tài)內(nèi)容或者更新不太頻繁的動(dòng)態(tài)內(nèi)容,web服務(wù)器可將響應(yīng)內(nèi)容緩存起來(lái),下次web服務(wù)器便可以在收到請(qǐng)求后立即拿出事先緩存好的響應(yīng)內(nèi)容并返回給瀏覽器。

    代理服務(wù)器緩存:暴露在互聯(lián)網(wǎng)中與后端的web服務(wù)器通過(guò)內(nèi)部網(wǎng)絡(luò)相連的前端服務(wù)器稱(chēng)為反向代理服務(wù)器,建立在反向代理服務(wù)器上的緩存稱(chēng)為反向代理緩存。暴露在互聯(lián)網(wǎng)中與后端的web客戶(hù)端通過(guò)內(nèi)部網(wǎng)絡(luò)相連的前端服務(wù)器稱(chēng)為正向代理服務(wù)器,建立在正向代理服務(wù)器上的緩存稱(chēng)為正向代理緩存。代理服務(wù)器緩存位于客戶(hù)端和web服務(wù)器之間,可以將它看做二者之間的一個(gè)中繼站。它的存在可以改善客戶(hù)端的訪(fǎng)問(wèn)速度、提升web server的服務(wù)能力、安全性等等。

    總共分析總結(jié)了五種技術(shù),主要希望能夠?qū)eb server性能優(yōu)化這塊提供一個(gè)整體的認(rèn)識(shí)。后續(xù)會(huì)專(zhuān)門(mén)就web緩存技術(shù)發(fā)表一些自己的看法。

    二、北大青鳥(niǎo)設(shè)計(jì)培訓(xùn):web前端工程師都需要學(xué)習(xí)什么?

    Web前端開(kāi)發(fā)工程師現(xiàn)在的發(fā)展是一個(gè)很新穎的職業(yè),簡(jiǎn)單的說(shuō)在國(guó)內(nèi)或是在國(guó)際上真正開(kāi)始受到重視的時(shí)間不到10年。

    Web前端開(kāi)發(fā)是從網(wǎng)頁(yè)制作演變而來(lái)的,名稱(chēng)上有很明顯的時(shí)代特征。

    洛陽(yáng)北大青鳥(niǎo)http://www.kmbdqn.cn/發(fā)現(xiàn)在互聯(lián)網(wǎng)的演化進(jìn)程中,網(wǎng)頁(yè)制作是Web1.0時(shí)代的產(chǎn)物,那時(shí)網(wǎng)站的主要內(nèi)容都是靜態(tài)的,用戶(hù)使用網(wǎng)站的行為也以瀏覽為主要成為web前端工程師都需要學(xué)習(xí)什么?第一,必須掌握基本的Web前端開(kāi)發(fā)技術(shù),其中包括:CSS、HTML、SEO、DOM、BOM、Ajax、JavaScript等,在掌握這些技術(shù)的同時(shí),還要清楚地了解它們?cè)诓煌瑸g覽器上的兼容情況、渲染原理和存在的Bug。

    第二,在一名合格的前端工程師的知識(shí)結(jié)構(gòu)中,網(wǎng)站性能優(yōu)化、SEO和服務(wù)器端的基礎(chǔ)知識(shí)也是必須掌握的。

    第三,必須學(xué)會(huì)運(yùn)用各種工具進(jìn)行輔助開(kāi)發(fā)。

    第四,除了要掌握技術(shù)層面的知識(shí),還要掌握理論層面的知識(shí),包括代碼的可維護(hù)性、組件的易用性、分層語(yǔ)義模板和瀏覽器分級(jí)支持,等等。

    可見(jiàn),看似簡(jiǎn)單的網(wǎng)頁(yè)制作,如果要做得更好、更專(zhuān)業(yè),真的是不簡(jiǎn)單。

    這就是前端開(kāi)發(fā)的特點(diǎn),也是讓很多人困惑的原因。

    如此繁雜的知識(shí)體系讓新手學(xué)習(xí)起來(lái)無(wú)從下手,對(duì)于老手來(lái)說(shuō),也時(shí)常不知道下一步該學(xué)什么。

    代碼質(zhì)量是前端開(kāi)發(fā)中應(yīng)該重點(diǎn)考慮的問(wèn)題之一。

    例如,實(shí)現(xiàn)一個(gè)網(wǎng)站界面可能會(huì)有無(wú)數(shù)種方案,但有些方案的維護(hù)成本會(huì)比較高,有些方案會(huì)存在性能問(wèn)題,而有些方案則更易于維護(hù),而且性能也比較好。

    這里的關(guān)鍵影響因素就是代碼質(zhì)量。

    CSS、HTML、JavaScript這三種前端開(kāi)發(fā)語(yǔ)言的特點(diǎn)是不同的,對(duì)代碼質(zhì)量的要求也不同,但它們之間又有著千絲萬(wàn)縷的聯(lián)系。

    在web前端工程師之前,我們是需要學(xué)習(xí)、實(shí)操,掌握靜態(tài)網(wǎng)頁(yè)的制作,能夠靈活的使用html+css語(yǔ)言和Div+css的布局來(lái)制作優(yōu)良的靜態(tài)頁(yè)面。

    能夠使用JavaScript語(yǔ)言制作精良的動(dòng)態(tài)效果和用戶(hù)體驗(yàn),并且深入淺出的對(duì)于JavaScript的函數(shù)框架制作與使用。

    能夠使用Html5來(lái)制作精美網(wǎng)頁(yè)效果以及移動(dòng)APP開(kāi)發(fā)和混合APP的開(kāi)發(fā)與制作。

    如何才能成為一個(gè)好的web前端工程師?一位好的Web前端開(kāi)發(fā)工程師在知識(shí)體系上既要有廣度,又要有深度,所以很多大公司即使出高薪也很難招聘到理想的前端開(kāi)發(fā)工程師。

    現(xiàn)在說(shuō)的重點(diǎn)不在于講解技術(shù),而是更側(cè)重于對(duì)技巧的講解。

    技術(shù)非黑即白,只有對(duì)和錯(cuò),而技巧則見(jiàn)仁見(jiàn)智。

    以前會(huì)Photoshop和Dreamweaver就可以制作網(wǎng)頁(yè),現(xiàn)在只掌握這些已經(jīng)遠(yuǎn)遠(yuǎn)不夠了。

    無(wú)論是開(kāi)發(fā)難度上,還是開(kāi)發(fā)方式上,現(xiàn)在的網(wǎng)頁(yè)制作都更接近傳統(tǒng)的網(wǎng)站后臺(tái)開(kāi)發(fā),所以現(xiàn)在不再叫網(wǎng)頁(yè)制作,而是叫Web前端開(kāi)發(fā)。

    Web前端開(kāi)發(fā)在產(chǎn)品開(kāi)發(fā)環(huán)節(jié)中的作用變得越來(lái)越重要,而且需要專(zhuān)業(yè)的前端工程師才能做好,這方面的專(zhuān)業(yè)人才近兩年來(lái)備受青睞。

    Web前端開(kāi)發(fā)是一項(xiàng)很特殊的工作,涵蓋的知識(shí)面非常廣,既有具體的技術(shù),又有抽象的理念。

    簡(jiǎn)單地說(shuō),它的主要職能就是把網(wǎng)站的界面更好地呈現(xiàn)給用戶(hù)。

    所以一名優(yōu)秀的前端開(kāi)發(fā)工程師,不單單需要掌握前端必須的各種技術(shù),同時(shí)還要掌握其它技術(shù),需要掌握一點(diǎn)后臺(tái)的知識(shí),同時(shí)也要對(duì)網(wǎng)站構(gòu)架有一定的了解,同時(shí)還要掌握一定的SEO網(wǎng)站優(yōu)化技術(shù),這樣才可以稱(chēng)之為一個(gè)“優(yōu)秀的web前端開(kāi)發(fā)工程師”。

    除了技術(shù)以外,還需要一定的時(shí)間來(lái)沉淀自己。

    一名資深的優(yōu)秀web前端開(kāi)發(fā)工程師,是每個(gè)大型企業(yè)都渴望的人才。

    業(yè)內(nèi)人士表示,寧可高薪招人,險(xiǎn)企也不愿自己培養(yǎng)相關(guān)的技術(shù)人才

    三、前端怎么優(yōu)化大數(shù)據(jù)頁(yè)面?

    只給瀏覽器肯定用得上的數(shù)據(jù)。后端服務(wù)往往不知道前端具體需要哪些數(shù)據(jù),給的數(shù)據(jù)冗余,如果去掉不必要的數(shù)據(jù),可以節(jié)省數(shù)據(jù)傳輸時(shí)間。

    先展示用戶(hù)第一眼看到的界面,然后懶加載其余部分。不管頁(yè)面有多大,用戶(hù)同一時(shí)間看到的也就屏幕那么大,先把用戶(hù)第一眼看到的數(shù)據(jù)加載展示了,能打打提高感知性能。

    緩存數(shù)據(jù)。這個(gè)緩存可以放在瀏覽器端,比如用Service Worker的Cache Storage,也可以在服務(wù)器端,比如常用的圖表的顯示,可以在服務(wù)器端預(yù)先計(jì)算出接過(guò)來(lái),省去瀏覽器的計(jì)算時(shí)間

    四、Web前端新手應(yīng)該了解的Cookie知識(shí)!

    今天小編要跟大家分享的文章是關(guān)于Web前端新手應(yīng)該了解的Cookie知識(shí)。正準(zhǔn)備學(xué)習(xí)Web前端知識(shí)和準(zhǔn)備從事Web

    前端工作的小伙伴怎么能不了解Cookie。今天小編就為大家?guī)?lái)了這篇文章,讓我們一起來(lái)看一看Web前端新手應(yīng)該了解的Cookie知識(shí)。

    一、Cookie的出現(xiàn)

    瀏覽器和服務(wù)器之間的通信少不了HTTP協(xié)議,但是因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,所以服務(wù)器并不知道上一次瀏覽器做了什么樣的操作,這樣嚴(yán)重阻礙了交互式Web

    應(yīng)用程序的實(shí)現(xiàn)。

    針對(duì)上述的問(wèn)題,網(wǎng)景公司的程序員創(chuàng)造了Cookie。

    二、Cookie的傳輸

    服務(wù)器端在實(shí)現(xiàn)Cookie標(biāo)準(zhǔn)的過(guò)程中,需要對(duì)任意HTTP請(qǐng)求發(fā)送Set-CookieHTTP頭作為響應(yīng)的一部分:

    1.Set-Cookie:name=value;expires=Tue,03-Sep-201914:10:21GMT;path=/;

    domain=.#;

    瀏覽器端會(huì)存儲(chǔ)這樣的Cookie,并且為之后的每個(gè)請(qǐng)求添加CookieHTTP請(qǐng)求頭發(fā)送回服務(wù)器:

    1.Cookie:name=value

    服務(wù)器通過(guò)驗(yàn)證Cookie值,來(lái)判斷瀏覽器發(fā)送請(qǐng)求屬于哪一個(gè)用戶(hù)。

    三、瀏覽器中的Cookie

    瀏覽器中的Cookie主要由以下幾部分組成:

    ·名稱(chēng):Cookie唯一的名稱(chēng),必須經(jīng)過(guò)URL編碼處理。(同名會(huì)出現(xiàn)覆蓋的情況)

    ·值:必須經(jīng)過(guò)URL編碼處理。

    ·域(domain):默認(rèn)情況下cookie在當(dāng)前域下有效,你也可以設(shè)置該值來(lái)確保對(duì)其子域是否有效。

    ·路徑(path):指定Cookie在哪些路徑下有效,默認(rèn)是當(dāng)前路徑下。

    ·

    失效時(shí)間(expires):默認(rèn)情況下,瀏覽器會(huì)話(huà)結(jié)束時(shí)會(huì)自動(dòng)刪除Cookie;也可以設(shè)置一個(gè)GMT格式的日期,指定具體的刪除日期;如果設(shè)置的日期為以前的日期,那么Cookie會(huì)立即刪除。

    ·安全標(biāo)志(secure):指定之后只允許Cookie發(fā)送給https協(xié)議。

    瀏覽器在發(fā)送請(qǐng)求時(shí),只會(huì)將名稱(chēng)與值添加到請(qǐng)求頭的Cookie字段中,發(fā)送給服務(wù)端。

    瀏覽器提供了一個(gè)非常蹩腳的API來(lái)操作Cookie:

    1.document.cookie

    通過(guò)上述方法可以對(duì)該Cookie進(jìn)行寫(xiě)操作,每一次只能寫(xiě)入一條Cookie字符串:

    1.document.cookie='a=1;secure;path=/'

    通過(guò)該方法還可以進(jìn)行Cookie的讀操作:

    1.document.cookie//"a=1"

    由于上述方法操作Cookie非常的不直觀,一般都會(huì)寫(xiě)一些函數(shù)來(lái)簡(jiǎn)化Cookie讀取、設(shè)置和刪除操作。

    對(duì)于Cookie的設(shè)置操作中,需要以下幾點(diǎn):

    對(duì)于名稱(chēng)和值進(jìn)行URL編碼處理,也就是采用JavaScript中的encodeURIComponent()方法;

    expires要求傳入GMT格式的日期,需要處理為更易書(shū)寫(xiě)的方式,比如:設(shè)置秒數(shù)的方式;注意只有的屬性名的secure;

    每一段信息需要采用分號(hào)加空格。

    1.functionsetCookie(key,value,attributes){

    2.if(typeofdocument==='undefined'){

    3.return

    4.}

    5.attributes=Object.assign({},{

    6.path:'/'

    7.},attributes)

    8.

    9.let{domain,path,expires,secure}=attributes

    10.

    11.if(typeofexpires==='number'){

    12.expires=newDate(Date.now()+expires*1000)

    13.}

    14.if(expiresinstanceofDate){

    15.expires=expires.toUTCString()

    16.}else{

    17.expires=''

    18.}

    19.

    20.key=encodeURIComponent(key)

    21.value=encodeURIComponent(value)

    22.

    23.letcookieStr=`${key}=${value}`

    24.

    25.if(domain){

    26.cookieStr+=`;domain=${domain}`

    27.}

    28.

    29.if(path){

    30.cookieStr+=`;path=${path}`

    31.}

    32.

    33.if(expires){

    34.cookieStr+=`;expires=${expires}`

    35.}

    36.

    37.if(secure){

    38.cookieStr+=`;secure`

    39.}

    40.

    41.return(document.cookie=cookieStr)

    42.}

    Cookie的讀操作需要注意的是將名稱(chēng)與值進(jìn)行URL解碼處理,也就是調(diào)用JavaScript中的decodeURIComponent()方法:

    1.functiongetCookie(name){

    2.if(typeofdocument==='undefined'){

    3.return

    4.}

    5.letcookies=[]

    6.letjar={}

    7.document.cookie&&(cookies=document.cookie.split(';'))

    8.

    9.for(leti=0,max=cookies.length;i

    10.let[key,value]=cookies[i].split('=')

    11.key=decodeURIComponent(key)

    12.value=decodeURIComponent(value)

    13.jar[key]=value

    14.if(key===name){

    15.break

    16.}

    17.}

    18.

    19.returnname?jar[name]:jar

    20.}

    最后一個(gè)清除的方法就更加簡(jiǎn)單了,只要將失效日期(expires)設(shè)置為過(guò)去的日期即可:

    1.functionremoveCookie(key){

    2.setCookie(key,'',{expires:-1})

    3.}

    介紹Cookie基本操作的封裝之后,還需要了解瀏覽器為了限制Cookie不會(huì)被惡意使用,規(guī)定了Cookie所占磁盤(pán)空間的大小以及每個(gè)域名下Cookie的個(gè)數(shù)。

    四、服務(wù)端的Cookie

    相比較瀏覽器端,服務(wù)端執(zhí)行Cookie的寫(xiě)操作時(shí),是將拼接好的Cookie字符串放入響應(yīng)頭的Set-Cookie字段中;執(zhí)行Cookie的讀操作時(shí),則是解析HTTP請(qǐng)求頭字段Cookie中的鍵值對(duì)。

    與瀏覽器最大的不同,在于服務(wù)端對(duì)于Cookie的安全性操碎了心

    signed

    當(dāng)設(shè)置signed=true時(shí),服務(wù)端會(huì)對(duì)該條Cookie字符串生成兩個(gè)Set-Cookie響應(yīng)頭字段:

    1.Set-Cookie:lastTime=2019-03-05T14:31:05.543Z;path=/;httponly

    2.Set-Cookie:lastTime.sig=URXREOYTtMnGm0b7qCYFJ2Db400;path=/;

    httponly

    這里通過(guò)再發(fā)送一條以.sig為后綴的名稱(chēng)以及對(duì)值進(jìn)行加密的Cookie,來(lái)驗(yàn)證該條Cookie是否在傳輸?shù)倪^(guò)程中被篡改。

    httpOnly

    服務(wù)端Set-Cookie字段中新增httpOnly屬性,當(dāng)服務(wù)端在返回的Cookie信息中含有httpOnly字段時(shí),開(kāi)發(fā)者是不能通過(guò)JavaScript來(lái)操縱該條Cookie字符串的。

    這樣做的好處主要在于面對(duì)XSS(Cross-sitescripting)攻擊時(shí),黑客無(wú)法拿到設(shè)置httpOnly字段的Cookie信息。

    此時(shí),你會(huì)發(fā)現(xiàn)localStorage相比較Cookie,在XSS攻擊的防御上就略遜一籌了。sameSite

    在介紹這個(gè)新屬性之前,首先你需要明白:當(dāng)用戶(hù)從#發(fā)起#的請(qǐng)求也會(huì)攜帶上Cookie,而從#攜帶過(guò)來(lái)的Cookie稱(chēng)為第三方Cookie。

    雖然第三方Cookie有一些好處,但是給CSRF(Cross-siterequestforgrey)攻擊的機(jī)會(huì)。

    為了從根源上解決CSRF攻擊,sameSite屬性便閃亮登場(chǎng)了,它的取值有以下幾種:

    ·

    strict:瀏覽器在任何跨域請(qǐng)求中都不會(huì)攜帶Cookie,這樣可以有效的防御CSRF攻擊,但是對(duì)于有多個(gè)子域名的網(wǎng)站采用主域名存儲(chǔ)用戶(hù)登錄信息的場(chǎng)景,每個(gè)子域名都需要用戶(hù)重新登錄,造成用戶(hù)體驗(yàn)非常的差。

    ·lax:相比較strict,它允許從三方網(wǎng)站跳轉(zhuǎn)過(guò)來(lái)的時(shí)候使用Cookie。

    為了方便大家理解sameSite的實(shí)際效果,可以看這個(gè)例子:

    1.//#服務(wù)端會(huì)在訪(fǎng)問(wèn)頁(yè)面時(shí)返回如下Cookie

    2.cookies.set('foo','aaaaa')

    3.cookies.set('bar','bbbbb')

    4.cookies.set('name','cccccc')

    5.

    6.//#服務(wù)端會(huì)在訪(fǎng)問(wèn)頁(yè)面時(shí)返回如下Cookie

    7.cookies.set('foo','a',{sameSite:'strict'})

    8.cookies.set('bar','b',{sameSite:'lax'})

    9.cookies.set('baz','c')

    如何現(xiàn)在用戶(hù)在#中點(diǎn)擊鏈接跳轉(zhuǎn)到#,它的請(qǐng)求頭是這樣的:

    1.RequestHeaders

    2.

    3.Cookie:bar=b;baz=c

    五、網(wǎng)站性能優(yōu)化

    Cookie在服務(wù)端和瀏覽器的通信中,主要依靠HTTP的響應(yīng)頭和請(qǐng)求頭傳輸?shù)模訡ookie會(huì)占據(jù)一定的帶寬。

    前面提到瀏覽器會(huì)為每一次HTPP請(qǐng)求自動(dòng)攜帶上Cookie信息,但是對(duì)于同站內(nèi)的靜態(tài)資源,服務(wù)器并不需要處理其攜帶的Cookie,這無(wú)形中便浪費(fèi)了帶寬。

    在最佳實(shí)踐中,一般都會(huì)將靜態(tài)資源部署到獨(dú)立的域名上,從而可以避免無(wú)效Cookie的影響。

    以上就是小編今天為大家分享的關(guān)于Web前端新手應(yīng)該了解的Cookie知識(shí),希望本篇文章能夠?qū)φ趶氖耊eb前端工作和準(zhǔn)備從事Web

    前端學(xué)習(xí)的小伙伴們有所幫助。想要了解更多Web前端相關(guān)知識(shí)記得關(guān)注北大青鳥(niǎo)Web培訓(xùn)官網(wǎng)!

    作者|descire

    來(lái)源|#/article/286535

    *聲明:內(nèi)容與圖片均來(lái)源于網(wǎng)絡(luò)(部分內(nèi)容有修改),版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜

    以上就是關(guān)于前端如何優(yōu)化網(wǎng)站性能相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    杭州前端培訓(xùn)學(xué)校(杭州前端培訓(xùn)學(xué)校排名)

    北京前端開(kāi)發(fā)人力外包(北京前端開(kāi)發(fā)人力外包怎么樣)

    前端attr方法(前端tr td)

    中國(guó)最好十大排名醫(yī)院(中國(guó)最好十大排名醫(yī)院)

    seo推廣的方法(seo推廣方法知識(shí))