導航:首頁 > 源碼編譯 > 前端工程化編譯速度慢

前端工程化編譯速度慢

發布時間:2022-08-15 21:14:23

『壹』 c++builder編譯速度太慢,能不能通過設置來加快

C++builder是最快的C++編譯器之一,從編譯速度來說也可以說是最快的win32C++編譯器了。除了速度之外,C++builder的性能也在其它C++編譯器的之上,但許多delphi程序員仍受不了c++builder工程的編譯速度。的確,delphi的速度要比任和c++的編譯器都要快好多。Delphi在編譯一個小工程的時候可能不到一秒,大的工程一般也在5秒鍾這內編譯完成了。

為什麼delphi會比c++builder快這么多?是否有方法來c++builder的編譯速度?本文就講解了為什麼C++的編譯器速度會慢,並且介紹了一個簡單的方法來減少c++builder的編譯時間。

為什麼c++編譯器的速度會慢?
c++builder 使用者怎麼通過預編譯頭文件來減少編譯時間?
講解基於VCL可視化工程的預編譯頭文件方法
優化c++builder對預編譯頭文件的使用
結論
注意事項

為什麼c++編譯器速度慢?

在C++中,你只能使用預定義或是預先聲明了的函數,這意味什麼?來看一個簡單的例子,函數A()調用函數B(),函數A()只能在函數B()的原型或是函數體在A()之前才能調用它

『貳』 如何加快linux android 的編譯速度

項目越來越大,每次需要重新編譯整個項目都是一件很浪費時間的事情。Research了一下,找到以下可以幫助提高速度的方法,總結一下。
1. 使用tmpfs來代替部分IO讀寫
2.ccache,可以將ccache的緩存文件設置在tmpfs上,但是這樣的話,每次開機後,ccache的緩存文件會丟失
3.distcc,多機器編譯
4.將屏幕輸出列印到內存文件或者/dev/null中,避免終端設備(慢速設備)拖慢速度。

tmpfs
有人說在Windows下用了RAMDisk把一個項目編譯時間從4.5小時減少到了5分鍾,也許這個數字是有點誇張了,不過粗想想,把文件放到內存上做編譯應該是比在磁碟上快多了吧,尤其如果編譯器需要生成很多臨時文件的話。
這個做法的實現成本最低,在Linux中,直接mount一個tmpfs就可以了。而且對所編譯的工程沒有任何要求,也不用改動編譯環境。
mount -t tmpfs tmpfs ~/build -o size=1G
用2.6.32.2的Linux Kernel來測試一下編譯速度:
用物理磁碟:40分16秒
用tmpfs:39分56秒
呃……沒什麼變化。看來編譯慢很大程度上瓶頸並不在IO上面。但對於一個實際項目來說,編譯過程中可能還會有打包等IO密集的操作,所以只要可能,用tmpfs是有益無害的。當然對於大項目來說,你需要有足夠的內存才能負擔得起這個tmpfs的開銷。
make -j
既然IO不是瓶頸,那CPU就應該是一個影響編譯速度的重要因素了。
用make -j帶一個參數,可以把項目在進行並行編譯,比如在一台雙核的機器上,完全可以用make -j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。
還是用Kernel來測試:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
由此看來,在多核CPU上,適當的進行並行編譯還是可以明顯提高編譯速度的。但並行的任務不宜太多,一般是以CPU的核心數目的兩倍為宜。
不過這個方案不是完全沒有cost的,如果項目的Makefile不規范,沒有正確的設置好依賴關系,並行編譯的結果就是編譯不能正常進行。如果依賴關系設置過於保守,則可能本身編譯的可並行度就下降了,也不能取得最佳的效果。
ccache
ccache工作原理:
ccache也是一個編譯器驅動器。第一趟編譯時ccache緩存了GCC的「-E」輸出、編譯選項以及.o文件到$HOME/.ccache。第二次編譯時盡量利用緩存,必要時更新緩存。所以即使"make clean; make"也能從中獲得好處。ccache是經過仔細編寫的,確保了與直接使用GCC獲得完全相同的輸出。

ccache用於把編譯的中間結果進行緩存,以便在再次編譯的時候可以節省時間。這對於玩Kernel來說實在是再好不過了,因為經常需要修改一些Kernel的代碼,然後再重新編譯,而這兩次編譯大部分東西可能都沒有發生變化。對於平時開發項目來說,也是一樣。為什麼不是直接用make所支持的增量編譯呢?還是因為現實中,因為Makefile的不規范,很可能這種「聰明」的方案根本不能正常工作,只有每次make clean再make才行。
安裝完ccache後,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,鏈到/usr/bin/ccache上。總之確認系統在調用gcc等命令時會調用到ccache就可以了(通常情況下/usr/local /bin會在PATH中排在/usr/bin前面)。
安裝的另外一種方法:
vi ~/.bash_profile
把/usr/lib/ccache/bin路徑加到PATH下
PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin
這樣每次啟動g++的時候都會啟動/usr/lib/ccache/bin/g++,而不會啟動/usr/bin/g++
效果跟使用命令行ccache g++效果一樣
這樣每次用戶登錄時,使用g++編譯器時會自動啟動ccache
繼續測試:
用ccache的第一次編譯(make -j4):23分38秒
用ccache的第二次編譯(make -j4):8分48秒
用ccache的第三次編譯(修改若干配置,make -j4):23分48秒

看來修改配置(我改了CPU類型...)對ccache的影響是很大的,因為基本頭文件發生變化後,就導致所有緩存數據都無效了,必須重頭來做。但如果只是修改一些.c文件的代碼,ccache的效果還是相當明顯的。而且使用ccache對項目沒有特別的依賴,布署成本很低,這在日常工作中很實用。
可以用ccache -s來查看cache的使用和命中情況:
cache directory /home/lifanxi/.ccachecache hit 7165cache miss 14283called for link 71not a C/C++ file 120no input file 3045files in cache 28566cache size 81.7 Mbytesmax cache size 976.6 Mbytes
可以看到,顯然只有第二編次譯時cache命中了,cache miss是第一次和第三次編譯帶來的。兩次cache佔用了81.7M的磁碟,還是完全可以接受的。
distcc
一台機器的能力有限,可以聯合多台電腦一起來編譯。這在公司的日常開發中也是可行的,因為可能每個開發人員都有自己的開發編譯環境,它們的編譯器版本一般是一致的,公司的網路也通常具有較好的性能。這時就是distcc大顯身手的時候了。
使用distcc,並不像想像中那樣要求每台電腦都具有完全一致的環境,它只要求源代碼可以用make -j並行編譯,並且參與分布式編譯的電腦系統中具有相同的編譯器。因為它的原理只是把預處理好的源文件分發到多台計算機上,預處理、編譯後的目標文件的鏈接和其它除編譯以外的工作仍然是在發起編譯的主控電腦上完成,所以只要求發起編譯的那台機器具備一套完整的編譯環境就可以了。
distcc安裝後,可以啟動一下它的服務:
/usr/bin/distccd --daemon --allow 10.64.0.0/16
默認的3632埠允許來自同一個網路的distcc連接。
然後設置一下DISTCC_HOSTS環境變數,設置可以參與編譯的機器列表。通常localhost也參與編譯,但如果可以參與編譯的機器很多,則可以把localhost從這個列表中去掉,這樣本機就完全只是進行預處理、分發和鏈接了,編譯都在別的機器上完成。因為機器很多時,localhost的處理負擔很重,所以它就不再「兼職」編譯了。
export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"
然後與ccache類似把g++,gcc等常用的命令鏈接到/usr/bin/distcc上就可以了。
在make的時候,也必須用-j參數,一般是參數可以用所有參用編譯的計算機CPU內核總數的兩倍做為並行的任務數。
同樣測試一下:
一台雙核計算機,make -j4:23分16秒
兩台雙核計算機,make -j4:16分40秒
兩台雙核計算機,make -j8:15分49秒
跟最開始用一台雙核時的23分鍾相比,還是快了不少的。如果有更多的計算機加入,也可以得到更好的效果。
在編譯過程中可以用distccmon-text來查看編譯任務的分配情況。distcc也可以與ccache同時使用,通過設置一個環境變數就可以做到,非常方便。
總結一下:
tmpfs: 解決IO瓶頸,充分利用本機內存資源
make -j: 充分利用本機計算資源
distcc: 利用多台計算機資源
ccache: 減少重復編譯相同代碼的時間
這些工具的好處都在於布署的成本相對較低,綜合利用這些工具,就可以輕輕鬆鬆的節省相當可觀的時間。上面介紹的都是這些工具最基本的用法,更多的用法可以參考它們各自的man page。
5.還有提速方法是把屏幕輸出重定向到內存文件或/dev/null,因對終端設備(慢速設備)的阻塞寫操作也會拖慢速度。推薦內存文件,這樣發生錯誤時,能夠查看。

『叄』 影響vs編譯速度的因素有哪些

影響因素比較多:
1 文件的大小,文件大小指的是全部include展開後的大小。
2 文件數量,編譯是一個一個文件進行的,所以你的工程的文件數量也有關系。
3 還有聲明的復雜程度,復雜聲明需要額外地計算。
4 最影響編譯速度的估計是C++的模板,模板在編譯的時候要進行推導,得到相應的結果,這個非常費時間。如果你是模板里還套了模板,那就比較慢了。
5 鏈接庫的數量,鏈接很多庫也會使得編譯速度變慢。
6 inline函數展開,會使得代碼膨脹,也會影響編譯速度
7 debug模式編譯要留符號表做調試,也會影響速度
8 release模式如果開了優化,編譯優化會改變代碼的某些結構,這也是拖慢編譯器的一個重要因素。

『肆』 Web前端工程師要掌握的Web前端性能優化方法

今天小編要跟大家分享的文章是關於Web前端工程師要掌握的Web前端性能優化方法。正在從事Web前端工作的小夥伴們來和小編一起看一看吧,希望本篇文章能夠對正在從事Web前端工作的小夥伴們有所幫助。

Web前端需要性能優化么?


性能優化一直以來都是前端工程領域中的一個重要部分。很多資料表明,網站應用的性能優化對於提高用戶留存、轉化率等都有積極影響。可以理解為,提升你的網站性能,就是提升你的業務數據(甚至是業務收入)。


性能優化廣義上包含前端優化和後端優化。後端優化的關注點更多的時候是在增加資源利用率、降低資源成本以及提高穩定性上。相較於後端,前端的性能優化會更直接與用戶的體驗掛鉤。從用戶體驗側來說,前端服務
5s的載入時間優化縮減80%(1s)與後端服務50ms的響應優化縮減80%(10ms)
相比,用戶的體驗提升會更大。因此很多時候,與體驗相關的性能的瓶頸會出現在前端。


我和一些同學接觸的過程中,發現作為前端工程師,大家其實都具備一定的性能優化意識,同時也有自己的優化「武器庫」,例如懶載入、資源合並、避免reflow
等等。雖然大家對性能優化都有自己的思路,不過大多是分散在某幾個點,較難形成一個完整的體系。


一、html文檔結構標簽語義化


1、首先什麼是語義化呢?


語義化是指用合理HTML標記以及其特有的屬性去格式化文檔內容。機器在需要更少的人類干預的情況下能夠研究和收集信息,讓網頁能夠被機器理解,最終讓人類受益。即用正確的標簽做正確的事。


2、語義化的好處或者說存在的意義


①有利於搜索引擎抓取


②結構清晰的HTML在團隊合作中的作用:代碼可讀、便於維護、提高開發效率、快速達成共識、利於二次開發。


③有利於盲人屏幕閱讀器


二、css、js文件數量及大小


優化一般對於css、js是建議使用外聯式來進行導入。我們可以對css、js做相應的規劃也可以減少css、js的個數以減少http請求。同時也要注重減少重復代碼,注重代碼重復利用,以達到用最少的代碼干最多的事。同時當項目要投入上線使用的時候,可以對css、js文件進行壓縮,文件的減小可以加速文件的鏈接導入,以便加速網頁的載入渲染。


可通過使用Webpack,gulp等工具對Js文件進行合並。


三、圖片的數量和大小


多個伺服器請求會對站點的性能產生顯著的影響。對一張圖片進行導入又是一個http請求,因此我們應該減少圖片的導入數量以便減少http請求。此處,我們必須提到一個名詞「css精靈spirit」。css精靈是指包含多個不同的圖標、按鈕或圖形的單個圖像。因此我們可以把多張背景圖片合並為一張然後對背景圖片進行相應的定位。同時使用PNG8格式的圖片相對於GIF來說比較少。而對於內容圖片,可以對其進行適當的壓縮,可以加快文檔內容載入,或者如果是需要用戶下載的圖片,小的圖片可以加快用戶下載的速度。


使用較為廣泛的Web圖片格式有:JPEG/JPG、PNG、WEBP、Base64、SVG。


1.JPEG/JPG


特點是有損壓縮,體積小,載入快,不支持透明。


使用場景:JPG適合用於呈現熱菜豐富的圖片,在日常的開發中,JPG圖片經常作為大的背景圖、輪播圖或是Banner圖。比如兩大電商網站對大圖片的處理,就是對JPG圖片應用場景的最佳寫照。用JPG來呈現大圖片,既可以保留圖片的質量,又不會擔心圖片的體積,是一種比較廣泛使用的方案。


缺點:在處理一些矢量圖形和logo等這些線條感很強、顏色對比強烈的圖片時,認為壓縮就導致圖片模糊非常明顯。另外,JPG圖像不支持透明度處理,透明圖片只能用PNG來呈現了。


2.PNG-8和PNG-24


特點是無損壓縮、質量高、體積大、支持透明


優點:無損壓縮的高保真圖片格式。8和24都是二進制數的位數,8位的PNG支持256中顏色,24位的PNG可以支持1600萬種顏色。在不考慮文件大小隻在乎最佳的顯示效果時,推薦使用PNG-24。但是在適合使用PNG時會優先選擇PNG-8


應用場景:主要用PNG來呈現小的LOGO、顏色簡單對比強烈的圖片或是背景。


3.SVG


特點是文本文件,體積小,不失真,兼容性好


優點:SVG是一種基於XML語法的圖像格式。SVG對圖像的處理不是基於像素,而是基於對圖像的形狀描述。


和JPG、PNG相比較,SVG文件體積更小,可壓縮性更強。SVG作為矢量圖最大的優點在於圖片可以無限放大還不失真,一張SVG圖片可以適配多種解析度。另外SVG是文本文件,可以像寫代碼一樣定義SVG,放在HTML中稱為DOM的一部分。也可以把對圖像的描述寫入以.svg為後綴的文件中,在img標簽中引入即可。


4.WebP


優點:WebP是一款比JPG、PNG等在壓縮方面更加優越的圖片格式,同時也不會影響其圖片質量,使用該格式時最好將同名文件格式化,當檢測瀏覽器不兼容時自動切換jpg格式


缺點:是一個相對較新的技術,所以對於目前市面上的瀏覽器能否完美的兼容,其可用和實用性就變得很現實了,再好的東西如果沒有好的兼容性,也是非常難以普及和被廣泛使用的


5.Base64


優點:減少請求,加快首屏數據顯示。對於jpg格式的圖片,每一個圖片相當於一次http請求,圖片多了的話,伺服器耗性能比較嚴重。而將jpg轉化成base64格式的圖片,則極大地減少了請求數,因為Base是文本格式。


缺點:base64格式圖片比原圖大,佔用更多存儲空間,同時,瀏覽器不會對該資源緩存。


使用方法:background:url(data:image/png;base64,{img_data})


應用場景:一般對於小於10KB大小的圖片進行base64轉碼。


至於動態圖有GIF與APNG:後者APNG這東西是mozilla搞出來的,
它是24位的,而且也是動圖,可以容納1680萬種顏色,也是為了取代GIF,但是....也就火狐支持,IE10和chrome,safari全部不行,
如果說gif圖片是卡片機的話,APNG就是單反


四、有效性驗證


除了根據語義加標記之外,HTML文檔還需要用有效的代碼來編寫,如果代碼是無效的,瀏覽器會嘗試解釋標記本身,有時候會產生錯誤的結果。更糟的是,如果發送具有正確的MIME類型的XHTML文檔,理解XML的瀏覽器將不顯示無效的頁面。因為瀏覽器需要知道要使用什麼DTD(文檔類型定義)才能正確地處理頁面,所以對頁面進行有效性驗證要求有DOCTYPE聲明。


有效性驗證工具徑:



W3C驗證器(bookmarklet),這是一小段可以存儲在瀏覽器的書簽或收藏夾中的javascript。單擊這個書簽就會觸發Javascript動作。


②可以訪問http://validator.w3.org/,通過輸入自己的URL來對自己的站點來進行在線驗證。


③使用firefox瀏覽器的可以下載插件FirefoxWebDeveloperExtension


五、雅虎的Web優化最佳實踐


1、內容優化


①盡量減少HTTP請求:常見方法包括合並多個CSS文件和JavaScript文件,利用CSSSprites整合圖像,Image
map(圖像中不同的區域設置不同的鏈接),內聯圖象(使用data:URLscheme在實際的頁面嵌入圖像數據)等。


②減少DNS查找,一般dns查找需要花費20-120ms,Windows的DNS緩存,可以通過ipconfig/displaydns
這個命令來查看。


③避免重定向


④使Ajax可緩存


⑤延遲載入組件:考慮哪些內容是頁面呈現時所必需首先載入的、哪些內容和結構可以稍後再載入,根據這個優先順序進行設定。



預載入組件:預載入是在瀏覽器空閑時請求將來可能會用到的頁面內容(如圖像、樣式表和腳本)。當用戶要訪問下一個頁面時,頁面中的內容大部分已經載入到緩存中了,因此可以大大改善訪問速度。


⑦減少DOM元素數量:頁面中存在大量DOM元素,會導致JavaScript遍歷DOM的效率變慢。


⑧根據域名劃分頁面內容:把頁面內容劃分成若幹部分可以使你最大限度地實現平行下載。但要確保你使用的域名數量在2個到4個之間(否則與第2條沖突)。


⑨最小化iframe的數量:iframes
提供了一個簡單的方式把一個網站的內容嵌入到另一個網站中。但其創建速度比其他包括JavaScript和CSS的DOM元素的創建慢了1-2個數量級。



避免404:HTTP請求時間消耗是很大的,因此使用HTTP請求來獲得一個沒有用處的響應(例如404沒有找到頁面)是完全沒有必要的,它只會降低用戶體驗而不會有一點好處。


2、伺服器優化


①使用內容分發網路(CDN):把你的網站內容分散到多個、處於不同地域位置的伺服器上可以加快下載速度。


添加Expires或Cache-Control信息頭:對於靜態內容,可設置文件頭過期時間Expires的值為「Never
expire(永不過期)」;對於動態內容,可使用恰當的Cache-Control文件頭來幫助瀏覽器進行有條件的請求。


②Gzip壓縮


③設置ETag:ETags(Entity
tags,實體標簽)是Web伺服器和瀏覽器用於判斷瀏覽器緩存中的內容和伺服器中的原始內容是否匹配的一種機制。



提前刷新緩沖區:當用戶請求一個頁面時,伺服器會花費200到500毫秒用於後台組織HTML文件。在這期間,瀏覽器會一直空閑等待數據返回。在PHP中,可以使用flush()方法,它允許你把已經編譯的好的部分HTML響應文件先發送給瀏覽器,這時瀏覽器就會可以下載文件中的內容(腳本等)而後台同⑤時處理剩餘的HTML頁面。



對Ajax請求使用GET方法:當使用XMLHttpRequest時,瀏覽器中的POST方法會首先發送文件頭,然後才發送數據。因此使用GET最為恰當。


⑦避免空的圖像src


3、Cookie優化


①減小cookie大小:去除不必要的coockie,並使coockie體積盡量小以減少對用戶響應的影響



針對Web組件使用域名無關的Cookie:對靜態組件的Cookie讀取是一種浪費,使用另一個無Cookie的域名來存放靜態組件是一個好方法,或者也可以在Cookie中只存放帶www的域名。


4、CSS優化


①將CSS代碼放在HTML頁面的頂部


②避免使用CSS表達式:CSS表達式在執行時候的運算量非常大,會對頁面性能產生大的影響


③使用來代替@import


④避免使用Filters:IE獨有屬性AlphaImageLoader用於修正IE
7以下版本中PNG圖片的半透明效果,但它的問題在於瀏覽器載入圖片時它會終止內容的呈現並且凍結瀏覽器。


5、JavaScript優化


①將JavaScript腳本放在頁面的底部



將JavaScript和CSS作為外部文件來引用:在實際應用中使用外部文件可以提高頁面速度,因為JavaScript和CSS文件都能在瀏覽器中產生緩存。


③縮小JavaScript和CSS


④刪除重復的腳本


⑤最小化DOM的訪問:使用JavaScript訪問DOM元素比較慢


⑥開發智能的事件處理程序


6、圖像優化


①優化圖片大小


②通過CSSSprites優化圖片


③不要在HTML中使用縮放圖片


④favicon.ico要小而且可緩存


7、針對移動優化


①保持組件大小在25KB以下:主要是因為iPhone不能緩存大於25K的文件(注意這里指的是解壓縮後的大小)。


②將組件打包成為一個復合文檔:把頁面內容打包成復合文本就如同帶有多附件的Email,它能夠使你在一個HTTP請求中獲取多個組件。


以上就是小編今天為大家分享的關於Web前端工程師要掌握的Web前端性能優化方法的文章,希望本篇文章能夠對正在從事Web前端工作的小夥伴們有所幫,想要了解更多Web前端工作的小夥伴們記得關注北大青鳥Web培訓官網最後祝願小夥伴們工作順利!


『伍』 Web前端入門知識之Web前端性能優化

今天小編要跟大家分享的文章是關於Web前端入門知識之Web前端性能優化。性能優化一直以來都是前端工程領域中的一個重要部分。很多資料表明,網站應用的性能優化對於提高用戶留存、轉化率等都有積極影響。可以理解為,提升你的網站性能,就是提升你的業務數據(甚至是業務收入)。

性能優化廣義上包含前端優化和後端優化。後端優化的關注點更多的時候是在增加資源利用率、降低資源成本以及提高穩定性上。相較於後端,前端的性能優化會更直接與用戶的體驗掛鉤。從用戶體驗側來說,前端服務
5s的載入時間優化縮減80%(1s)與後端服務50ms的響應優化縮減80%(10ms)
相比,用戶的體驗提升會更大。因此很多時候,與體驗相關的性能的瓶頸會出現在前端。


作為前端工程師,大家其實都具備一定的性能優化意識,同時也有自己的優化「武器庫」,例如懶載入、資源合並、避免reflow
等等。雖然大家對性能優化都有自己的思路,不過大多是分散在某幾個點,較難形成一個完整的體系。下面來和小編一起看一看web前端性能優化該怎麼做。


一、html文檔結構標簽語義化


1、首先什麼是語義化呢?


語義化是指用合理HTML標記以及其特有的屬性去格式化文檔內容。機器在需要更少的人類干預的情況下能夠研究和收集信息,讓網頁能夠被機器理解,最終讓人類受益。即用正確的標簽做正確的事。


2、語義化的好處或者說存在的意義


①有利於搜索引擎抓取


②結構清晰的HTML在團隊合作中的作用:代碼可讀、便於維護、提高開發效率、快速達成共識、利於二次開發。


③有利於盲人屏幕閱讀器


二、css、js文件數量及大小


優化一般對於css、js是建議使用外聯式來進行導入。我們可以對css、js做相應的規劃也可以減少css、js的個數以減少http請求。同時也要注重減少重復代碼,注重代碼重復利用,以達到用最少的代碼干最多的事。同時當項目要投入上線使用的時候,可以對css、js文件進行壓縮,文件的減小可以加速文件的鏈接導入,以便加速網頁的載入渲染。


可通過使用webpack,gulp等工具對Js文件進行合並。


三、圖片的數量和大小


多個伺服器請求會對站點的性能產生顯著的影響。對一張圖片進行導入又是一個http請求,因此我們應該減少圖片的導入數量以便減少http請求。此處,我們必須提到一個名詞「css精靈spirit」。css精靈是指包含多個不同的圖標、按鈕或圖形的單個圖像。因此我們可以把多張背景圖片合並為一張然後對背景圖片進行相應的定位。同時使用PNG8格式的圖片相對於GIF來說比較少。而對於內容圖片,可以對其進行適當的壓縮,可以加快文檔內容載入,或者如果是需要用戶下載的圖片,小的圖片可以加快用戶下載的速度。


使用較為廣泛的web圖片格式有:JPEG/JPG、PNG、WEBP、Base64、SVG。


1.JPEG/JPG


特點是有損壓縮,體積小,載入快,不支持透明。


使用場景:JPG適合用於呈現熱菜豐富的圖片,在日常的開發中,JPG圖片經常作為大的背景圖、輪播圖或是Banner圖。比如兩大電商網站對大圖片的處理,就是對JPG圖片應用場景的最佳寫照。用JPG來呈現大圖片,既可以保留圖片的質量,又不會擔心圖片的體積,是一種比較廣泛使用的方案。


缺點:在處理一些矢量圖形和logo等這些線條感很強、顏色對比強烈的圖片時,認為壓縮就導致圖片模糊非常明顯。另外,JPG圖像不支持透明度處理,透明圖片只能用PNG來呈現了。


2.PNG-8和PNG-24


特點是無損壓縮、質量高、體積大、支持透明


優點:無損壓縮的高保真圖片格式。8和24都是二進制數的位數,8位的PNG支持256中顏色,24位的PNG可以支持1600萬種顏色。在不考慮文件大小隻在乎最佳的顯示效果時,推薦使用PNG-24。但是在適合使用PNG時會優先選擇PNG-8


應用場景:主要用PNG來呈現小的LOGO、顏色簡單對比強烈的圖片或是背景。


3.SVG


特點是文本文件,體積小,不失真,兼容性好


優點:SVG是一種基於XML語法的圖像格式。SVG對圖像的處理不是基於像素,而是基於對圖像的形狀描述。


和JPG、PNG相比較,SVG文件體積更小,可壓縮性更強。SVG作為矢量圖最大的優點在於圖片可以無限放大還不失真,一張SVG圖片可以適配多種解析度。另外SVG是文本文件,可以像寫代碼一樣定義SVG,放在HTML中稱為DOM的一部分。也可以把對圖像的描述寫入以.svg為後綴的文件中,在img標簽中引入即可。


4.WebP


優點:WebP是一款比JPG、PNG等在壓縮方面更加優越的圖片格式,同時也不會影響其圖片質量,使用該格式時最好將同名文件格式化,當檢測瀏覽器不兼容時自動切換jpg格式


缺點:是一個相對較新的技術,所以對於目前市面上的瀏覽器能否完美的兼容,其可用和實用性就變得很現實了,再好的東西如果沒有好的兼容性,也是非常難以普及和被廣泛使用的


5.Base64


優點:減少請求,加快首屏數據顯示。對於jpg格式的圖片,每一個圖片相當於一次http請求,圖片多了的話,伺服器耗性能比較嚴重。而將jpg轉化成base64格式的圖片,則極大地減少了請求數,因為Base是文本格式。


缺點:base64格式圖片比原圖大,佔用更多存儲空間,同時,瀏覽器不會對該資源緩存。


使用方法:background:url(data:image/png;base64,{img_data})


應用場景:一般對於小於10KB大小的圖片進行base64轉碼。


至於動態圖有GIF與APNG:後者APNG這東西是mozilla搞出來的,
它是24位的,而且也是動圖,可以容納1680萬種顏色,也是為了取代GIF,但是....也就火狐支持,IE10和chrome,safari全部不行,
如果說gif圖片是卡片機的話,APNG就是單反


四、有效性驗證


除了根據語義加標記之外,HTML文檔還需要用有效的代碼來編寫,如果代碼是無效的,瀏覽器會嘗試解釋標記本身,有時候會產生錯誤的結果。更糟的是,如果發送具有正確的MIME類型的XHTML文檔,理解XML的瀏覽器將不顯示無效的頁面。因為瀏覽器需要知道要使用什麼DTD(文檔類型定義)才能正確地處理頁面,所以對頁面進行有效性驗證要求有DOCTYPE聲明。


有效性驗證工具徑:



W3C驗證器(bookmarklet),這是一小段可以存儲在瀏覽器的書簽或收藏夾中的Javascript。單擊這個書簽就會觸發Javascript動作。


②可以訪問http://validator.w3.org/,通過輸入自己的URL來對自己的站點來進行在線驗證。


③使用firefox瀏覽器的可以下載插件FirefoxWebDeveloperExtension


五、雅虎的Web優化最佳實踐


1、內容優化


①盡量減少HTTP請求:常見方法包括合並多個CSS文件和JavaScript文件,利用CSSSprites整合圖像,Image
map(圖像中不同的區域設置不同的鏈接),內聯圖象(使用data:URLscheme在實際的頁面嵌入圖像數據)等。


②減少DNS查找,一般dns查找需要花費20-120ms,Windows的DNS緩存,可以通過ipconfig/displaydns
這個命令來查看。


③避免重定向


④使Ajax可緩存


⑤延遲載入組件:考慮哪些內容是頁面呈現時所必需首先載入的、哪些內容和結構可以稍後再載入,根據這個優先順序進行設定。



預載入組件:預載入是在瀏覽器空閑時請求將來可能會用到的頁面內容(如圖像、樣式表和腳本)。當用戶要訪問下一個頁面時,頁面中的內容大部分已經載入到緩存中了,因此可以大大改善訪問速度。


⑦減少DOM元素數量:頁面中存在大量DOM元素,會導致JavaScript遍歷DOM的效率變慢。


⑧根據域名劃分頁面內容:把頁面內容劃分成若幹部分可以使你最大限度地實現平行下載。但要確保你使用的域名數量在2個到4個之間(否則與第2條沖突)。


⑨最小化iframe的數量:iframes
提供了一個簡單的方式把一個網站的內容嵌入到另一個網站中。但其創建速度比其他包括JavaScript和CSS的DOM元素的創建慢了1-2個數量級。



避免404:HTTP請求時間消耗是很大的,因此使用HTTP請求來獲得一個沒有用處的響應(例如404沒有找到頁面)是完全沒有必要的,它只會降低用戶體驗而不會有一點好處。


2、伺服器優化


①使用內容分發網路(CDN):把你的網站內容分散到多個、處於不同地域位置的伺服器上可以加快下載速度。


添加Expires或Cache-Control信息頭:對於靜態內容,可設置文件頭過期時間Expires的值為「Never
expire(永不過期)」;對於動態內容,可使用恰當的Cache-Control文件頭來幫助瀏覽器進行有條件的請求。


②Gzip壓縮


③設置ETag:ETags(Entity
tags,實體標簽)是web伺服器和瀏覽器用於判斷瀏覽器緩存中的內容和伺服器中的原始內容是否匹配的一種機制。



提前刷新緩沖區:當用戶請求一個頁面時,伺服器會花費200到500毫秒用於後台組織HTML文件。在這期間,瀏覽器會一直空閑等待數據返回。在PHP中,可以使用flush()方法,它允許你把已經編譯的好的部分HTML響應文件先發送給瀏覽器,這時瀏覽器就會可以下載文件中的內容(腳本等)而後台同⑤時處理剩餘的HTML頁面。



對Ajax請求使用GET方法:當使用XMLHttpRequest時,瀏覽器中的POST方法會首先發送文件頭,然後才發送數據。因此使用GET最為恰當。


⑦避免空的圖像src


3、Cookie優化


①減小cookie大小:去除不必要的coockie,並使coockie體積盡量小以減少對用戶響應的影響



針對Web組件使用域名無關的Cookie:對靜態組件的Cookie讀取是一種浪費,使用另一個無Cookie的域名來存放靜態組件是一個好方法,或者也可以在Cookie中只存放帶www的域名。


4、CSS優化


①將CSS代碼放在HTML頁面的頂部


②避免使用CSS表達式:CSS表達式在執行時候的運算量非常大,會對頁面性能產生大的影響


③使用來代替@import


④避免使用Filters:IE獨有屬性AlphaImageLoader用於修正IE
7以下版本中PNG圖片的半透明效果,但它的問題在於瀏覽器載入圖片時它會終止內容的呈現並且凍結瀏覽器。


5、JavaScript優化


①將JavaScript腳本放在頁面的底部



將JavaScript和CSS作為外部文件來引用:在實際應用中使用外部文件可以提高頁面速度,因為JavaScript和CSS文件都能在瀏覽器中產生緩存。


③縮小JavaScript和CSS


④刪除重復的腳本


⑤最小化DOM的訪問:使用JavaScript訪問DOM元素比較慢


⑥開發智能的事件處理程序


6、圖像優化


①優化圖片大小


②通過CSSSprites優化圖片


③不要在HTML中使用縮放圖片


④favicon.ico要小而且可緩存


7、針對移動優化


①保持組件大小在25KB以下:主要是因為iPhone不能緩存大於25K的文件(注意這里指的是解壓縮後的大小)。


②將組件打包成為一個復合文檔:把頁面內容打包成復合文本就如同帶有多附件的Email,它能夠使你在一個HTTP請求中獲取多個組件。


以上就是小編今天為大家分享的關於Web前端入門知識之Web前端性能優化的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助,想要了解更多web前端知識記得關注北大青鳥web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的web前端工作順利。


『陸』 怎樣提高前端工程師開發效率,都在這里

前端工程師其實是一個工作很雜的職位,除了要負責切圖、寫html/css/js外,還要解決一系列的瀏覽器兼容性、網頁性能優化等問題,所以提高前端工程師的開發效率是勢在必行的,也是前端工程化的體現。

對於開發效率,我個人理解是

開發效率 = 新增代碼的效率 + 修改代碼的效率 + 維護代碼的效率

那麼如何提高前端開發效率便可以按照前端工程化的理念來進行劃分。下面我就介紹下7個提高前端開發效率的方法。

1.切圖

切圖是一個前端最基礎的技能,一般我們使用Photoshop或者FireWorks基本都能搞定設計師交付給我們的設計圖,但是要提高切圖效率的話就得使用一些訣竅了,比如利用PS里的動作來實現「一鍵切圖」功能,這里除了切圖外還介紹了其他的實用方法和工具。

2.編碼

對於編寫代碼部分我們首先要找到一款合適自己的IDE工具,建議不要使用Notepad++或者Dreamweaver,這些工具已經不符合前端潮流了,無法讓自己優雅地敲代碼。這里我主要推薦Sublime Text、Atom或者Webstrom,因為它們除了人性化的界面和支持大多數語法的高亮外,還可以安裝各種各樣的插件來拓展你的IDE工具,下面我主要介紹幾款Sublime Text提高開發效率的插件:

其中Element是用於快速編寫html/CSS的,比如輸入 ul>li 後按下tab鍵便可以生成一個ul標簽裡麵包含一個li標簽

JSFormat用於格式化JS;CSScomb用於對樣式屬性進行一鍵排序;HTML-CSS-JS Prettify可以一鍵規范我們的HTML/CSS/JS,甚至JSON格式;SublimeTmpl可以快速新建HTML/CSS/JS文件; ColorPicker用於調用本地調色板功能。這些工具都非常實用,一定程度上可以提高我們的編碼效率。

3.自動化

說到提高開發效率,這里不得不提一些前端的自動化工具,畢竟前端自動化是目前及未來的趨勢,能夠很大程度上縮減前端不必要的工作量,使我們能夠專注前端本身。

這里我們可以使用NPM來管理我們的項目包文件;利用webpack來打包壓縮我們的代碼;利用Node.js來實現構建本地伺服器;利用Karma、Jasmine來測試我們的前端代碼。

用好前端自動化工具可以幫助我們處理很多瑣碎的事情,比如一鍵壓縮代碼、圖片,一鍵合並JS,檢測文件更新等。

4.模塊化

隨著web2.0時代的到來,Ajax技術得到廣泛應用,前端代碼日益膨脹,而前端模塊化能夠方便我們對項目代碼的維護,進行按需載入,從長遠角度來看對我們提高項目的開發效率同樣大有益處。

在ES6出來之前應該說前端代碼本身不具備實現模塊的功能,我們必須要使用一些模塊化載入器來實現,比如RequireJS、SeaJs等。而隨著ES6的普及,目前像RequireJS、SeaJs這樣的工具已經沒有存在的必要了。所以在基於ES6的開發環境下我建議使用ES6的模塊化功能來實現我們的前端模塊化。

5.組件化

前端組件化的概念也是由來已久,我們可以通過將我們的代碼劃分成不同組件來實現功能公用,一個同樣的功能我們可能不用再次編寫相同的代碼,同時也可以提高前端代碼的可維護性和清晰度。以下是目前流行的前端框架Vue的單文件組件的概念圖:

我們可以將公用的組件抽離,將大組件拆分成小組件的形式實現前端組件化,組件與組件之間可以存在父子關系,也可以存在兄弟關系。在Vue的單文件組件中,一個組件包含了其HTML、CSS、JS的代碼片段。

6.前後端分離

前後端分離的項目對提升前端開發效率非常有幫助,因為前端不再需要後台配置路由、搭建伺服器環境、編寫模板等,這樣一來前端的生產力就會得到很大程度的解放,但是前後端分離的項目有利也有弊,如下圖所示:


最終我們需要根據項目需求衡量利弊來決定是否使用前後端分離的模式。

7.規范與模式

團隊協作離不開編碼規范和開發模式的幫助。遵循編碼規範文檔可以幫助我們在團隊開發時提高合作開發的效率。一個團隊遵循一套編碼規范可以使每個人的代碼寫出一個人的風格,這樣團隊間相互審查、測試、完善功能時會非常高效。下方是一些開源的前端編碼規範文檔:

『柒』 為什麼eclipse編譯的時候那麼慢

ecplipse編譯慢,並不是說編譯的工具慢,是由於工程代碼很多,導致內存短時間產生不夠的現象,表現出來的就是很慢。
很多程序在進行大數據的計算或者資料庫的操作,都需要很多的內存來計算或者保存數據,編譯環境這時候就會很卡。

『捌』 java編譯為什麼那麼慢

ecplipse編譯慢,並不是說編譯的工具慢,是由於工程代碼很多,導致內存短時間產生不夠的現象,表現出來的就是很慢。
很多程序在進行大數據的計算或者資料庫的操作,都需要很多的內存來計算或者保存數據,編譯環境這時候就會很卡。

『玖』 前端工程師怎樣提高開發效率

前端工程師其實是一個工作很雜的職位,除了要負責切圖、寫html/css/js外,還要處理一系列的瀏覽器兼容性問題、優化網頁性能等,所以提高前端工程師的開發效率是勢在必行的,也是前端共工程化的體現。那麼如何提高便可以按照前端工程師涉及的工作點來進行劃分。下面我就介紹下平時我在工作中使用的一些提高開發效率的方法。



當然除了以上5點,對於前端來說需要提高開發效率的地方還有很多,可謂任重而道遠。希望以上幾點能夠給初識前端的同學帶來啟發並能夠親自實踐。

閱讀全文

與前端工程化編譯速度慢相關的資料

熱點內容
壓縮圖片壓縮 瀏覽:74
美國發明解壓魔方 瀏覽:300
電腦怎麼備案網上伺服器 瀏覽:513
旅行商問題Python寫法 瀏覽:951
解壓破壞王裡面的所有兌換碼 瀏覽:860
文件夾如何拖拽還保留原來的 瀏覽:22
職業生涯pdf 瀏覽:954
ubuntu安裝軟體php 瀏覽:159
黑馬程序員退學流程 瀏覽:362
網頁伺服器崩潰怎麼回事 瀏覽:651
cnc編程前景怎麼樣 瀏覽:320
lniux命令詳解 瀏覽:494
linuxmysql查詢日誌 瀏覽:369
老捷達夥伴壓縮比 瀏覽:94
改後綴加密 瀏覽:433
郵局選址問題演算法 瀏覽:15
河北伺服器內存雲主機 瀏覽:13
在電腦上怎麼找到加密狗圖標 瀏覽:438
電腦的瀏覽器怎麼打開pdf文件怎麼打開 瀏覽:145
pdf卡片庫下載 瀏覽:14