国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 html教程 【前端雜談】細(xì)數(shù)前端優(yōu)化的化零為整_html/css_WEB-ITnose

【前端雜談】細(xì)數(shù)前端優(yōu)化的化零為整_html/css_WEB-ITnose

Jun 24, 2016 pm 12:03 PM
優(yōu)化 前端

很高興看到越來越多的企業(yè)重視前端開發(fā)了,前端不再是網(wǎng)站開發(fā)人員的附屬技能?;叵胛覄傞_始入行時,那時ASP網(wǎng)站(非ASP.NET)盛行,80%的網(wǎng)站都是用ASP來做的,一個網(wǎng)頁可能就是一個ASP文件,里面前端代碼和后端代碼混在一起?,F(xiàn)在不同了,前后端分離,前端可以專注于展示了,不用太在意后端的實(shí)現(xiàn)。但是,因?yàn)榍岸税l(fā)展太快,展示環(huán)境也復(fù)雜多變,需要前端開發(fā)者掌握更廣的知識。

這篇雜談,我打算從一個比較廣的面(包含JS,CSS,網(wǎng)絡(luò)傳輸,HTML5等),以化整為零為出發(fā)點(diǎn),來和大家介紹一些前端優(yōu)化的方法。(因?yàn)閭€人知識和經(jīng)驗(yàn)有限,除了文中提到的幾點(diǎn),一定還有別的優(yōu)化方法有化零為整的特性,歡迎大家一起補(bǔ)充哈,本文會不定期更新)

何為化零為整?通俗點(diǎn)說,就是我們將細(xì)碎的東西整合為一個整體,通過操作這個整體,也能達(dá)到逐個操作細(xì)碎東西的效果。比如,你給我四個蘋果,我雙手可以拿著到處走動;如果給我十個蘋果,我全兜手上,走起路來可能會慢些了,因?yàn)橐疹櫶O果,怕掉了;但是,如果你再給我個袋子,我把十個蘋果裝里面,它們就成為一個整體,我就可以拎著到處跑了。

OK,說了這么一通,開始細(xì)數(shù)前端中需要化零為整的地方吧。

?

1.atlas/sprite assets/精靈圖/雪碧圖

這些都是對圖集合的稱呼,圖集合就是在做圖片資源的時候,將一些小的圖片元素集中做到一張圖片中。在使用時,通過一些參數(shù),來顯示大圖集合中所需要那個圖片原素。比如,需要這個大圖的某個ICON來做為DIV的背景,則除了將這個大圖設(shè)為DIV的背景外,還需要更改背景圖的位置(position)來顯示具體某小圖。

例:某網(wǎng)站的sprite assets如下:

?

2.事件委托

面試時,我經(jīng)常問的一個問題,有一個列表頁,頁面結(jié)構(gòu)是外面一個BODY, 里面有一萬個子DIV,每個DIV里面有一些文字,這些文字都不相同。需求是,點(diǎn)擊一個DIV,要求彈個alert框,將DIV里的文字顯示出來。你會怎么做。

30%的人會用JQuery來綁事件,認(rèn)為看著簡潔,應(yīng)該效率高,如:$("body>div").click(……) ?,有20%的人會寫原生的語句來遍歷,給每個DIV添加點(diǎn)擊事件,有10%的人回答,在頁面滾動時,存下頁面滾動的高度,在點(diǎn)擊時,獲取觸發(fā)點(diǎn)在屏幕的Y坐標(biāo),將Y的坐標(biāo)和頁面滾動的高度相加,然后除以每個DIV的高度,就知道點(diǎn)了第幾個元素,再將這個元素的內(nèi)容彈出來。(或其它類似的做法)

回答出以上答案的面試者在這題會被扣分,正確答案是,只用給外面的元素(本題是BODY)添加點(diǎn)擊事件,在點(diǎn)擊時,可以獲取到引發(fā)點(diǎn)擊事件的源元素(如某DIV),將這個元素的文本內(nèi)容彈出來即可。

?

3.長連接 keep alive

這點(diǎn)和后端有關(guān)系了,不光是前端的事了。大多數(shù)網(wǎng)頁是用http方式來獲取資源(如圖片,樣式表文件,JS文件等),有部分服務(wù)器不會維持連接,來了個請求,就建立連接,然后輸出內(nèi)容,輸出完后斷開連接,再重新建立下個請求的連接和輸出。如果一個網(wǎng)頁需要請求一百個文件,服務(wù)器就要建立和斷開一百次連接。每次建立和斷開都需要時間(甚至比傳輸數(shù)據(jù)時間還長),無疑增加了頁面的呈現(xiàn)時間。如果服務(wù)器啟用了keep alive,不光減輕了服務(wù)器負(fù)擔(dān),也加快了頁面打開時間。

如下圖,我們可以看到,實(shí)際接收內(nèi)容的時間(Receiving)是很短的,大部分時間花在了等待(Waiting)和阻塞(Blocking)。

?

4.多DOM合并

由于前端表現(xiàn)越來越豐富,頁面上東西也越來越多,隨之而來的問題是DOM太多了,在做一些DOM操作時,會帶來性能問題。在DOM非常多的情況下,我們有必要把DOM進(jìn)行合并,可以考慮把多個DOM合并為少量幾個,或在可以的情況下,使用CANVAS來展示。

如:有些需求會要求前端開發(fā)者做這種日期選擇器

?如果使用一個DOM來裝一個選項(xiàng)(如:1970),不考慮按鈕,單獨(dú)看日期選項(xiàng)的話,可能會需要44+12+31=87個DOM,對于移動瀏覽器來說,DOM越少越好。萬一產(chǎn)品后來一想,除了日期,還要添加時分秒選項(xiàng)呢?這就需要44+12+31+24+60+60=231個DOM了。但我們可以細(xì)想一下,如果把各字段(年、月、日)只用一個很高的容器(如DIV)來裝,內(nèi)容可以用換行符來換行,取值時通過一些算法來得到,是不是大幅縮小了DOM數(shù)量?從87個DOM變?yōu)?個DOM。少了一個數(shù)量級。

?

5.WebSocket

很多網(wǎng)頁有實(shí)時更新數(shù)據(jù)的要求,如證券類網(wǎng)站。為了避免頁面刷新,會使用AJAX來進(jìn)行長輪詢,每隔一段時間(如一秒鐘)就連一次服務(wù)器取下數(shù)據(jù)。這樣會造成大量的請求連接,不止給前端,也給后端帶來了不小的壓力。幸好HTML5給我們帶來了WebSocket,網(wǎng)頁能夠和服務(wù)器保持長連接,通過長連接來維持?jǐn)?shù)據(jù)的實(shí)時更新了。

?

6.CSS屬性繼承

CSS會繼承父元素的屬性,我們可以將一些通用的屬性在父元素的CSS中定義,子元素通過繼承來獲取這些元素。在某些情況下,合理使用繼承能較明顯地縮小CSS文件的大小。

?

7.documentFragment

"一個列表頁,需要你往里面插入一千個DOM,你怎么做?" 這是我經(jīng)常問別人的一道題。

很多時候,你往頁面中加一個DOM,就會引起頁面的重構(gòu)。如果你使用遍歷來逐一添加,每添加一次,頁面都會重新渲染一次,這種做法會帶來性能的下降。好的方式是把要添加的元素先緩存起來, 要添加時一次性添加。一般會使用documentFragment來進(jìn)行緩存,還有些使用長的字符串(HTML代碼串)來緩存。

?

8.多動畫合并為一個

在做CSS3的動畫時,如果需求中要求有多步驟的動畫(如,將一個DIV沿Y軸旋轉(zhuǎn)30度,接著沿X軸旋轉(zhuǎn)30度,再沿Z軸旋轉(zhuǎn)30度),我們可以將這些動畫合并,使用animation的關(guān)鍵幀來將這些步驟隔離。省去多步操作DOM的成本。

?

9.多文件壓縮與合并

對JS和CSS文件壓縮,是前端縮小網(wǎng)絡(luò)傳輸量的有效方式(壓縮的做法一般是去除多余空格和換行,以及替換變量名或方法名。YUI?Compressor是個不錯的工具)

將多個小的JS或CSS文件合并(merge)為一個大文件,這種做法可以大幅減少請示的次數(shù)。

?

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

C++ 程序優(yōu)化:時間復(fù)雜度降低技巧 C++ 程序優(yōu)化:時間復(fù)雜度降低技巧 Jun 01, 2024 am 11:19 AM

時間復(fù)雜度衡量算法執(zhí)行時間與輸入規(guī)模的關(guān)系。降低C++程序時間復(fù)雜度的技巧包括:選擇合適的容器(如vector、list)以優(yōu)化數(shù)據(jù)存儲和管理。利用高效算法(如快速排序)以減少計算時間。消除多重運(yùn)算以減少重復(fù)計算。利用條件分支以避免不必要的計算。通過使用更快的算法(如二分搜索)來優(yōu)化線性搜索。

PHP與Vue:完美搭檔的前端開發(fā)利器 PHP與Vue:完美搭檔的前端開發(fā)利器 Mar 16, 2024 pm 12:09 PM

PHP與Vue:完美搭檔的前端開發(fā)利器在當(dāng)今互聯(lián)網(wǎng)高速發(fā)展的時代,前端開發(fā)變得愈發(fā)重要。隨著用戶對網(wǎng)站和應(yīng)用的體驗(yàn)要求越來越高,前端開發(fā)人員需要使用更加高效和靈活的工具來創(chuàng)建響應(yīng)式和交互式的界面。PHP和Vue.js作為前端開發(fā)領(lǐng)域的兩個重要技術(shù),搭配起來可以稱得上是完美的利器。本文將探討PHP和Vue的結(jié)合,以及詳細(xì)的代碼示例,幫助讀者更好地理解和應(yīng)用這兩

Go語言前端技術(shù)探秘:前端開發(fā)新視野 Go語言前端技術(shù)探秘:前端開發(fā)新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的編程語言,在后端開發(fā)領(lǐng)域廣受歡迎。然而,很少有人將Go語言與前端開發(fā)聯(lián)系起來。事實(shí)上,使用Go語言進(jìn)行前端開發(fā)不僅可以提高效率,還能為開發(fā)者帶來全新的視野。本文將探討使用Go語言進(jìn)行前端開發(fā)的可能性,并提供具體的代碼示例,幫助讀者更好地了解這一領(lǐng)域。在傳統(tǒng)的前端開發(fā)中,通常會使用JavaScript、HTML和CSS來構(gòu)建用戶界面

解決 PHP 函數(shù)效率低下的方法有哪些? 解決 PHP 函數(shù)效率低下的方法有哪些? May 02, 2024 pm 01:48 PM

PHP函數(shù)效率優(yōu)化的五大方法:避免不必要的變量復(fù)制。使用引用以避免變量復(fù)制。避免重復(fù)函數(shù)調(diào)用。內(nèi)聯(lián)簡單的函數(shù)。使用數(shù)組優(yōu)化循環(huán)。

前端面試官常問的問題 前端面試官常問的問題 Mar 19, 2024 pm 02:24 PM

在前端開發(fā)面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎(chǔ)、JavaScript基礎(chǔ)、框架和庫、項(xiàng)目經(jīng)驗(yàn)、算法和數(shù)據(jù)結(jié)構(gòu)、性能優(yōu)化、跨域請求、前端工程化、設(shè)計模式以及新技術(shù)和趨勢。面試官的問題旨在評估候選人的技術(shù)技能、項(xiàng)目經(jīng)驗(yàn)以及對行業(yè)趨勢的理解。因此,應(yīng)試者應(yīng)充分準(zhǔn)備這些方面,以展現(xiàn)自己的能力和專業(yè)知識。

Golang與前端技術(shù)結(jié)合:探討Golang如何在前端領(lǐng)域發(fā)揮作用 Golang與前端技術(shù)結(jié)合:探討Golang如何在前端領(lǐng)域發(fā)揮作用 Mar 19, 2024 pm 06:15 PM

Golang與前端技術(shù)結(jié)合:探討Golang如何在前端領(lǐng)域發(fā)揮作用,需要具體代碼示例隨著互聯(lián)網(wǎng)和移動應(yīng)用的快速發(fā)展,前端技術(shù)也愈發(fā)重要。而在這個領(lǐng)域中,Golang作為一門強(qiáng)大的后端編程語言,也可以發(fā)揮重要作用。本文將探討Golang如何與前端技術(shù)結(jié)合,以及通過具體的代碼示例來展示其在前端領(lǐng)域的潛力。Golang在前端領(lǐng)域的作用作為一門高效、簡潔且易于學(xué)習(xí)的

優(yōu)化WIN7系統(tǒng)開機(jī)啟動項(xiàng)的操作方法 優(yōu)化WIN7系統(tǒng)開機(jī)啟動項(xiàng)的操作方法 Mar 26, 2024 pm 06:20 PM

1、在桌面上按組合鍵(win鍵+R)打開運(yùn)行窗口,接著輸入【regedit】,回車確認(rèn)。2、打開注冊表編輯器后,我們依次點(diǎn)擊展開【HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer】,然后看目錄里有沒有Serialize項(xiàng),如果沒有我們可以單擊右鍵Explorer,新建項(xiàng),并將其命名為Serialize。3、接著點(diǎn)擊Serialize,然后在右邊窗格空白處單擊鼠標(biāo)右鍵,新建一個DWORD(32)位值,并將其命名為Star

Vivox100s參數(shù)配置大揭秘:處理器性能如何優(yōu)化? Vivox100s參數(shù)配置大揭秘:處理器性能如何優(yōu)化? Mar 24, 2024 am 10:27 AM

Vivox100s參數(shù)配置大揭秘:處理器性能如何優(yōu)化?在當(dāng)今科技飛速發(fā)展的時代,智能手機(jī)已經(jīng)成為我們?nèi)粘I畈豢苫蛉钡囊徊糠帧W鳛橹悄苁謾C(jī)的一個重要組成部分,處理器的性能優(yōu)化直接關(guān)系到手機(jī)的使用體驗(yàn)。Vivox100s作為一款備受矚目的智能手機(jī),其參數(shù)配置備受關(guān)注,尤其是處理器性能的優(yōu)化問題更是備受用戶關(guān)注。處理器作為手機(jī)的“大腦”,直接影響到手機(jī)的運(yùn)行速度

See all articles