複製鏈接
請複製以下鏈接發送給好友

代碼優化

鎖定
所謂代碼優化是指對程序代碼進行等價(指不改變程序的運行結果)變換。程序代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。優化的含義是最終生成的目標代碼短(運行時間更短、佔用空間更小),時空效率優化。原則上,優化可以在編譯的各個階段進行,但最主要的一類是對中間代碼進行優化,這類優化不依賴於具體的計算機
在不改變程序運行效果的前提下,對被編譯的程序進行等價變換,使之能生成更加高效的目標代碼。 [1] 
中文名
代碼優化
領    域
編譯原理
本    質
對程序等價變換

代碼優化概述

在不改變程序運行效果的前提下,對被編譯的程序進行等價變換,使之能生成更加高效目標代碼。 [1] 

代碼優化代碼優化過程

等價:不改變程序執行效果; [1] 
變換:引起程序形式上的變動. [1] 

代碼優化途徑

改進、提高程序途徑: [1] 
1) 改進算法; [1] 
2) 在源程序級上等價變換; [1] 
3) 充分利用系統提供的程序庫; [1] 
4) 編譯時優化等。 [1] 

代碼優化優化目的

產生高效的目標代碼。 [1] 

代碼優化為什麼要實施優化

優化程度是編譯器的一個重要技術、質量目標; [1] 
無法苛求用户對源語言的掌握,編程技巧.編寫源程序的優化; [1] 
編譯程序固有的缺陷:不是面對一個或一類具體問題的程序,而是統一處理該語言的各種源程序,無法盡善盡美。 [1] 

代碼優化優化所涉及的源程序的範圍

局部優化 — 基本塊內優化; [1] 
循環優化 — 隱式、顯式循環體內優化; [1] 
全局優化 — 一個源程序範圍內優化; [1] 
優化相對於編譯邏輯功能實現的階段,中間代碼級 — 目標代碼生成前的優化;目標代碼級 — 目標代碼生成後的優化。 [1] 

代碼優化具優化功能編譯器的組織

代碼優化分類

編譯過程中可進行的優化可按階段劃分:優化可在編譯的不同階段進行,分為中間代碼一級和目標代碼一級的優化。可按優化涉及的程序範圍劃分:對同一階段,分為局部優化,循環優化和全局優化. 進行優化所需要的基礎是對代碼進行數據流分析和控制流分析。如劃分DAG,查找循環,分析變量的定值點和引用點等等。最常用的代碼優化技術有刪除多餘運算,循環不變代碼外提,強度削弱,變換循環控制條件,合併已知量與複寫傳播,以及刪除無用賦值等等。
靜態網頁動態網頁主要根據網頁製作的語言來區分:
·靜態網頁使用語言:HTML(超文本標記語言)
·動態網頁使用語言:HTML+ASP或HTML+PHP或HTML+JSP等。
網站源碼可以分為動態源碼和靜態源碼:
·動態源碼:ASP、PHP、JSP、.net、CGI等等,動態源碼最大的特點就是能夠和用户之間互動。
·靜態源碼:htmlFlashJavaScriptVBScript等等。 [2] 

代碼優化局部優化

在編譯原理中,局部優化指在程序的一個基本塊內進行的優化。 [1] 

代碼優化基本塊

一順序執行的最大語句序列,只有惟一入口和惟一出口,且分別對應該序列的第一個語句和最後一個語句 。 [1] 

代碼優化基本塊特點

基本塊內的語句是順序執行的,沒有轉進轉出,分叉匯合 。 [1] 

代碼優化基本塊劃分

第1步:確定每個基本塊的入口語句。 [1] 
根據基本塊的結構特點,它的入口語句是下述三種類型的語句之一:⑴ 程序的第一個語句;⑵ 由條件轉移語句或無條件轉移語句轉移 到的語句;⑶ 緊跟在條件轉移或無條件轉移後面的語句。 [1] 
第2步:根據確定的基本塊的入口語句,構造其所屬的基本塊。 [1] 
⑴ 由該入口語句直到下一個入口語句(不包含下一個入口語句)之間的所有語句構成一個基本塊;⑵ 由該入口語句到程序中的停止或暫停語句或最後一個語句(包含該停止或暫停或最後語句)之間的語句序列組成的。 [1] 
第3步:凡是未包含在基本塊中的語句,都是程序的控制流不可到達的語句,直接從程序中刪除。 [1] 

代碼優化要點

一. 儘量採用div+css佈局您的頁面,div+css佈局的好處是讓搜索引擎爬蟲能夠更順利的、更快的、更友好的爬完您的頁面;div+css佈局還可以大量縮減網頁大小,提高瀏覽的速度,使得代碼更簡潔、流暢、更容易放置更多內容。
二. 儘量縮減您的頁面大小,因為搜索引擎爬蟲每次爬行您的站點時,存儲數據的容量有限,一般建議100KB以下,越小越好,但不能小於5KB。網頁大小減少還有一個好處,能夠促使您的站點形成巨大的內部鏈接網。
三. 儘量少用無用的圖片和flash。內容索引所派出的搜索引擎爬蟲,不認識圖片,只能根據圖片ALT,TITLE”等屬性的內容判斷圖片的內容。對於flash搜索引擎爬蟲更是視而不見。
四. 儘量滿足w3c標準,網頁代碼的編寫滿足W3C標準,能夠提升網站和搜索引擎的友好度,因為搜索引擎收錄標準,排名算法,都是在W3C標準的基礎上開發的。
五. 儘量更深層次套用標籤h1、h2、h3、h4、h5…..,讓搜索引擎能夠分辨清晰網頁那一塊很重要,那一塊次之。
六. 儘量少用JS,JS代碼全部用外部調用文件封裝。搜索引擎不喜歡JS,影響網站的友好度指數。
七. 儘量不使用表格佈局,因為搜索引擎對錶格佈局嵌套3層以內的內容懶的去抓取。搜索引擎爬蟲有時候也是比較懶的,望各位一定要保持代碼和內容在3層以內。
八. 儘量不讓CSS分散在HTML標記裏,儘量封裝到外部調用文件。如果CSS出現在HTML標記裏,搜索引擎爬蟲就要分散注意力去關注這些對優化沒有任何意義的東西,所以建議封裝到專用CSS文件中。
九.清理垃圾代碼,要把代碼編輯環境下敲擊鍵盤上的空格鍵所產生的符號;把一些默認屬性代碼,不會影響顯示的代碼;註釋語句如果對代碼可讀性沒有太大影響,清理這些垃圾代碼,會減少不少的空間。

代碼優化html優化

html代碼是最為基礎的網站製作語言,對於網站優化來説,html代碼也有一定的影響,是特別需要注意的優化細節之一。

代碼優化title標籤

title標籤就是網頁的標題,是一個對於網站優化有很大影響的html標籤,每個頁面都必須有且內容不同!基本格式為<title>網頁標題。</title>

代碼優化META元素

meta元素在瀏覽器界面是無法看到的html標籤,對於優化有影響的主要有兩個,一個是關鍵字(keywords)、一個是描述(description)。其實,這兩個標籤隨着seoer的胡亂使用,對於網站優化已經沒有多少用處了,你完全可以不用設定,但我們還是習慣性的設置一下較為妥當。關鍵字,設定與本頁內容相關的主關鍵詞一到三個,之間用英文狀態下的逗號分割。需要注意的是,不要再濫用關鍵字,除了給搜索引擎不好的印象外別無他用。描述還是很有用的一個東東了,雖然對於網站的優化排名麼有多大的影響,但會作為搜索引擎展示網站索引的一個依據,可以把你的主關鍵字鏈接起來組合成一段通順的話,一般60到80字即可。格式為:
<meta name="keywords"content="">
<metaname="description"content="">

代碼優化h標籤

h標籤在html代碼中是“標題”的意思,就如一篇文章,標題是文章最為重要的一個對象,也是搜索引擎在排名時重點考慮的一個對象。html中的h標籤一共有六個,分別是h1/h2/h3/h4/h5/h6,分別代表不同的級別,我們稱之為一級標題、二級標題……當然,一級標題具備更多的權重。需要注意的是h標籤是塊級元素,默認是粗體顯示,獨佔一行,前後會有空行。當然,你可以利用css來改變這些效果。
關於h標籤的使用,需要根據實際情況來使用,不可任意濫用。如一篇文章,不可能出現多個一級標題,所以h1,在同一個頁面中只能出現一次,而h2等則可以出現多次,根據你需要表現的內容的重要程度,分別使用不同的h標籤即可。特別注意,h標籤中最好出現關鍵字!還有就是,隨其自然,萬不可刻意地用h標籤來處理某些關鍵字!
基本格式為:<h1>這裏是標題文字</h1>

代碼優化加強和強調

strong被認為是“加強”,em被認為是“強調”,也就是這兩個標籤是有特殊含義的,這對於網站優化至關重要。多數時候,我們在優化網站時會對關鍵字進行突出,這時使用strong或em就比使用B或者I好很多,特別謹記!

代碼優化alt和title

alt是圖像中的註釋,title是圖像或鏈接的標題,這兩者對於優化,尤其是圖像的優化至關重要,但也不要濫用!一般在插入圖像時,我們在alt中設置圖像的描述內容,其中可以包含關鍵字但不要故意堆砌,title則當作圖像標題來處理。特別需要注意的是,這些內容是不可以重複的!也就是説,當你的頁面中有多張圖像,你不能每張圖像的描述和標題都設置成一樣的,這樣很容易被搜索引擎懲罰!
<img src="test.jpg"alt="一個美女站在黃昏的街頭默默等待愛人的迴歸,眼神中充滿了憂傷"title="靜待">
除此之外,title屬性在a標籤中也有所使用,只是有些氾濫了,視覺效果也不好,影響用户體驗,所以筆者並不推薦,除非你的a標籤中的內容是一張圖片。
<a href="product.html"title="產品展示">產品展示</a>

代碼優化縮寫abbr

這個標籤是自定義的一種縮寫方式,可以利用它合理的添加一些關鍵字,同樣不要濫用。如下所示:
公司的產品涉及<abbr title="以石材為原料的雕刻作品">石雕</abbr>、<abbr title="以銅料為胚,運用雕刻、鑄塑等手法制作的一種造型藝術">銅雕</abbr>、<abbr title="附屬在某一平面上的雕刻藝術">浮雕</abbr>、鏤雕等各種雕刻形式。

代碼優化canonical標籤

Canonical [3]  (權威鏈接標記)是09年,Google,Yahoo及Microsoft三大搜索引擎聯合推出了一個旨在減少重複內容的一個建議,並不是命令,也就是説這個標籤搜索引擎可能不遵守。國內最大的中文搜索引擎百度也已經支持Canonical標籤。
部分搜索引擎引入了Link的一個新屬性Canonical。A頁面聲明B為權威鏈接,B聲明C為權威網頁,則搜索引擎會認為C是A和B共同的首選權威版本。此時Canonical標籤起到了301重定向的作用。
只能作用於同一個域名所在的網址,不能作用於不同域名上的重複內容。也就是説如果文章被其它網站抄襲,也不會因為這個標籤而給你的原文章帶來權重。如果是跨站,可以使用301重定向。該鏈接標籤可用於定義相對地址,也可用於定義絕對地址。但為了保險起見,建議使用絕對地址
使用方法:為網頁指定權威鏈接(authoritative|canonical URL),以解決副本內容(duplicate content)問題。
使用樣式:<link rel=”canonical” href=”網頁權威鏈接”/>

代碼優化css優化

於網站排名優化來説,css的幾乎沒有任何影響,但往大的方向如網站優化來説,樣式表css的優化就至關重要了,其主要作用即是提高網頁的響應速度。

代碼優化外鏈css

css的使用有多種方式,一是嵌入式,即在html標籤中直接定義樣式表,如下所示:<p style="font-family:arial;font-size:16px;font-weight:bold;">Outside now its raining,and tears are falling from my eyes…</p>
還有一種是直接定義在頁面頭部的如下:<styletype="text/css">p{ background:#f1f1f1; color:#333; line-height:20px;} </style>
這兩種方式都是把css寫在當前html中,這樣會造成hml文檔變大,降低網頁的響應速度,所以我們需要外鏈css,將所有與本頁面相關的樣式寫入到該樣式表中:<link href="style/common.css"rel="stylesheet"type="text/css"/>

代碼優化精簡css

對於這一點需要一定的css能力才可以做到了。所謂精簡,指的是用盡可能少的樣式代碼實現整個網頁的樣式效果,需要充分利用css的繼承和綜合使用,舉一個簡單的例子來説明。如頁面中的鏈接,全部不需要下劃線、大部分為12像素,但鏈接的顏色並不相同,個別的字體效果也不相同,我們就可以這樣來寫:
a{ text-decoration:none; font-size:12px;}/*定義通用a樣式*/
a.a_red{ color:#e00;}
a.a_blue{ color:#009;}
a.a_menu{ color:#fff; font-size:14px; font-weight:bold;}/*針對特殊a標籤只指定特殊樣式*/
因為css的繼承作用,a_red和a_blue都具備沒有下劃線、12像素這一樣式,而a_menu同樣具備沒有下劃線,但因指定了大小,就不再繼承12像素的指定而使用14像素……

代碼優化整合css

一般情況下,前端製作人員喜歡把通用樣式寫成一個文件,把專用樣式寫成另一個文件以便各個頁面調用。如筆者,就喜歡把頁面通用樣式(包括通用的佈局樣式、文字樣式等)寫在common.css中,而把專用的寫在另一個樣式表中。如首頁,我們就需要調用common.css和index.css兩個樣式表文件。這樣做,對於前端來説是正確的。但對於優化,卻不太好。多一個文件調用就需要多一次請求,當然也會多耗費一點時間。所以,在網站製作完成後,我們需要把頁面的所有樣式合併大一起以提高網頁的響應速度!但需注意,合併css不利於網站後期整改,權衡利弊各取所需吧,具體是否合併還需根據你的實際情況而定。

代碼優化壓縮css

壓縮css其實很簡單,就是去掉多餘的空格和換行。實現起來也非常的簡單,網上有很多工具,請自行搜索“css壓縮”即可找到很多在線壓縮工具。同上面一點,壓縮後的css不便於後期整改,需要自己權衡取捨。

代碼優化script優化

javascript代碼對於網站排名優化同樣沒有多大影響,但從網站優化的角度來看卻是至關重要的一步優化操作,優良的javascript代碼可以大幅度提升網頁的響應速度!

代碼優化外鏈js代碼

js代碼跟css的使用差不多,都有三種方式:
內部定義:<A onclick="if(confirm('確認?'){...}else{...})"href="#">confirm</A>
頭部插入:<script>...</script>
外鏈調用:<SCRIPT language=javascript type=text/javascript src="jquery-1.7.2.min.js"></SCRIPT>

代碼優化精簡js代碼

這一點需要更為專業的js技術才能做到,儘可能根據需要實現的效果編寫js,而不用從網上找一段代碼直接拿來用,網上的代碼很多功能很全,從而質量很大,而其中的很多功能對於我們要實現的效果是沒有任何用處的,所以廣拓企業網站建議你針對需要實現的效果定製js以便得到更為精簡的代碼,從而提高網頁的響應速度。

代碼優化壓縮js代碼

對於這點,網上也有很多的工具,請百度查詢“js壓縮工具”即可。

代碼優化置底js

一般情況下,我們都是把js放到head之間的,這種方式在頁面加載時即會加載,當然也就導致響應速度的降低,百度站長平台建議把js放到頁面最底部,也就是</html>之外。等html加載完畢之後才加載js代碼,當然,有部分特殊功能的js代碼是沒有辦法放到頁面底部的,具體請根據實際情況操作。
補充説明:針對js圖像特效等,可能會影響網站關鍵字排名的!有的特效圖像的路徑、説明等都是寫入到js中的,這種特效儘量不要使用。

代碼優化優化禁忌

·究竟要優化什麼?
在優化工作開始的時候,你還尚未明確優化內容和目的,那麼你很容易陷入誤區。在一開始,你就應該清楚地瞭解你要達到的效果,以及其他優化相關的各種問題。這些目標需要明確指出(至少精通技術的項目經理可以理解和表達它),接下來,在整個優化過程中,你需要堅持這些目標。
在實際的項目開發中,經常會存在各種各樣的變數。可能一開始時要優化這一方面,隨後你可能會發現需要優化另一方面。這種情況下,你需要清晰地瞭解這些變化,並確保團隊中的每個人都明白目標已經發生了變化。
·選擇一個正確的優化指標
選擇正確的指標,是優化的一個重要組成部分,你需要按照這些指標來測量優化工作的進展情況。如果指標選擇不恰當,或者完全錯誤,你所做的努力有可能白費了。
即使指標正確,也必須有一些辨別。在某些情況下,將最多的努力投入到運行消耗時間最多的那部分代碼中,這是實用的策略。但也要記住,Unix/Linux內核的大部分時間花費在了空循環上。
需要注意的是,如果你輕易選擇了一個很容易達到的指標,這作用不大,因為沒有真正解決問題。你有必要選擇一個更復雜的、更接近你的目標的指標。
·優化在刀刃上
這是有效優化的關鍵。找到項目中與你的目標(性能、資源或其他)相背的地方,並將你的努力和時間用在那裏。
舉一個典型的例子,一個Web項目速度比較慢,開發者在優化時將大部分精力放在了數據庫優化上,最終發現真正的問題是網絡連接慢。
另外,不要分心於容易實現的問題。這些問題儘管很容易解決,但可能不是必要的,或與你的目標不相符。容易優化並不意味着值得你花費工夫。
·優化層次越高越好
在一般情況下,優化的層次越高,就會越有效。根據這個標準,最好的優化是找到一個更有效的算法。舉個例子,在一個軟件開發項目中,有一個重要的應用程序性能較差,於是開發團隊開始着手優化,但性能並沒有提升太多,之後,項目人員交替,新的開發人員在檢查代碼時發現,性能問題的核心是由於在表中使用了冒泡排序算法,導致成千上萬項的增加。
儘管如此,高層次的優化也不是“銀彈”。一些基本技術,如將所有東西移到循環語句外,也可以產生一些優化的效果。通常情況下,大量低層次的優化可以產生等同於一個高層次優化的效果。
還需要注意的是,高層次優化,會減少一些代碼塊,那麼你之前對這些代碼塊所做的優化就沒有任何意義了,因此,剛開始就應該考慮高層次的優化。
·不要過早優化
在項目早期就進行優化,會導致你的代碼難以閲讀,或者會影響運行。另一方面,在項目後期,你可能會發現之前所做的優化沒有起到任何作用,白白浪費了時間和精力。正確的方式是,你應該將項目開發和優化當作兩個獨立的步驟來做。
·依賴性能分析,而不是直覺
你往往會認為你已經知道哪裏需要優化,這是不可取的,尤其是在複雜的軟件系統中,性能分析數據應該是第一位的,最後才是直覺。
優化的一個有效的策略是,你要根據所做工作對優化效果的影響來進行排序。在開始工作之前找到影響最大的“路障”,然後再處理小的“路障”。
·優化不是萬金油
優化最重要的規則之一是,你無法優化一切,甚至無法同時優化兩個問題。比如,優化了速度,可能會增加資源利用;優化了存儲的利用率,可能會使其他地方放慢。你需要權衡一下,哪個更符合你的優化目標。 [4] 
參考資料