代碼級優化
所謂代碼優化是指對程序代碼進行等價(指不改變程序的運行結果)變換。程序代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。優化的含義是最終生成的目標代碼短(運行時間更短、佔用空間更小),時空效率優化。原則上,優化可以再編譯的各個階段進行,但最主要的一類是對中間代碼進行優化,這類優化不依賴於具體的計算機。目標代碼(objectcode)指計算機科學中編譯器或匯編器處理源代碼後所生成的代碼,它一般由機器代碼或接近於機器語言的代碼組成。[1]目標文件(objectfile)即存放目標代碼的計算機 目標代碼文件,它常被稱作二進制文件(binaries)。目標文件包含著機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號(變數和函數的名字),此外還包括其他調試信息。[2]目標文件是從源代碼文件產生程序文件這一過程的中間產物,鏈接器正是通過把目標文件鏈接在一起來生成可執行文件或庫文件。目標文件中唯一的要素是機器代碼,例如,用於嵌入式系統的目標文件可能僅僅含有機器代碼。
② 此段代碼該如何優化呢謝謝!
優化見解
php作為腳本語言被廣泛應用於網頁網站程序設計中。
由於是腳本語言,在運行時才對高級語言代碼解釋執行,所以跟編譯語言(如C)比起來php的效率比較低,稍復雜的程序執行起來就需要消耗較多的時間。作為網頁伺服器時,低效率意味著消耗更多的伺服器資源。所以,有必要通過優化php 程序代碼來提高效率,減小伺服器資源消耗。(當然如果你的程序本來就消耗很少執行時間或者你的伺服器足夠強,那就不一定要進行優化了)
網上很多文章介紹優化php程序,是通過安裝Zend Optimizer之類的加速軟體實現的,但這種加速是有限的。本文主要從程序代碼著手介紹一些優化思路和手段。
程序的抽象層越多,各抽象層分離得越嚴格,程序效率越低。
最原始的應用於網頁的php程序模式莫過於腳本嵌入模式,即僅僅在一個網頁中需要動態處理或顯示數據的地方通過加入<?php和?>標識符嵌入php腳本。一般來說這是php程序員最早學習的模式,它只有一個抽象層,就是網頁,故本文稱其為單層模式。
隨著網站規模逐漸增大,程序員可能會發現單層模式的程序很難維護,當想對程序修改或擴充功能時,會發現代碼非常混亂,感覺無從下手。於是模板類誕生了,它使得一個網頁由兩個文件組成:一個php程序文件,一個html模板文件。常用的模板類有PHPLib庫帶的Template模板類,Smarty模板類等。由於加入了額外的處理程序(模板類),程序效率下降了。你若不信可自己測試一下。其實一般情況下,不用函數(最原始的編程方法)比用函數(面向過程)的效率高,而用函數的效率又比對象封裝(面向對象)高。所以就算在編譯語言中,需要高效率的地方會用C寫而不用C++,例如FreeBSD操作系統的內核;而需要極端高效的地方還要用匯編寫。
為了使程序可以適應多種資料庫系統,或者方便隨時轉換資料庫系統,常常還會用一個類把跟資料庫打交道的函數封裝起來,這樣當轉換資料庫系統時只要把封裝類換掉就行了,主程序不需要修改。這里又用了一個類,效率又打折扣了。
上述模板類的使用,使程序分成兩個抽象層:程序層和表現層。而資料庫類的使用又把程序層分為數據介面層和數據處理層。
項目越龐大,需要分離的抽象層就越多,這樣使得分工清晰,方便管理,但是以犧牲程序執行效率為代價。
對於抽象層造成的效率下降,優化的方法有二:減小抽象層、優化抽象層之間的介面。一般地,不應該為了提高效率而盲目減小抽象層,這樣會使得代碼混亂、難於管理。但是不應該為小項目建立過多的抽象層,除非你有將來把它做得很大的計劃。關於如何恰當分割抽象層,本文不作更深入討論。
對於上文說的兩個分層例子,優化抽象層之間的介面分別是模板類和資料庫操作類。抽象層介面在程序中需要被頻繁調用,以在不同層之間交換信息,所以層介面是很值得優化的。對於資料庫介面類,可能僅僅是封裝一些資料庫函數,優化餘地恐怕不大。對於模板類,很多時候是有較大優化餘地的。一般地,模板模型越通用,模板類功能越強大,效率就越低,例如PHPLib庫帶的Template類就有極大的優化餘地。而Smarty模板類比PHPLib的Template更復雜,我沒有用過,據稱有緩存機制,不知是否可以彌補其性能損耗。下面就來看看PHPLib的Template類有多少東西可以優化掉。
1.
讀入模板文件時,file函數效率低,改用get_file_content函數。
2.
匹配子模板時,正則表達式替換函數preg_replace效率低,改用str_pos函數進行定位和用str_replace函數進行替換操作。此優化手段後文會詳細分析。
3.
模板模型通用性很強,能適應各種情況,但在具體細節的處理上,通用的方法效率可能很低。可以對模板模型作適當修改。我的做法是建一個相對通用的模板類,然後再派生出一個只適用於特定程序的模板類。在通用模板類的模板模型上可以作些優化(相對於PHPLib的Template),例如在處理二維數據表的時候用 PHPLib的Template處理就比較復雜(具體實現方法可參考《優化php嵌套模版》),需要多次調用類方法(本質上是函數調用),所以重寫的時候可以把處理二維數據表的功能封裝到一個高效率的方法中,直接避免方法的多次調用。
4.
調試功能在小項目上不需要用,跟調試相關的代碼全部去掉。
我在按上面4點重寫了模板類之後,一個復雜頁面的執行時間縮小了一個數量級(除模板外沒有作其它優化)。
現在就優化你的程序的抽象層之間的介面,特別是當這些介面是使用現成的函數或類的時候。因為這些函數或類在設計時會為了適應普遍情況而犧牲一些效率,而且它們的作者也可能沒有考慮效率問題。像如此著名的PHPLib的模板類的效率也不見得就高。
細節代碼優化
優化代碼不應總是祈求大刀闊斧式的優化,當大方面已經無從入手時,不妨把視線轉移到細節上。
1.
上文模板類優化已提到的,正則表達式匹配比一般字元串匹配慢得多,盡可能用字元串匹配而不用正則表達式匹配。有時候雖然用正則表達式匹配使程序代碼更簡潔,而一般字元串匹配使代碼更冗繁,但很多時候字元串匹配仍比正則表達式高效。
2.
字元串替換函數str_replace和preg_replace都是可以接受數組參數的。有時候需要對字元串進行批量替換,則用數組參數比循環調用替換函數來得高效。例如下面的代碼:
1. for ($i = 0; $i < $n; $i++) {
2. $str = str_replace($search[$i], $replace[$i], $str);
3. }
應該換成:
1. $str = str_replace($search, $replace, $str);
注意:這里$search和$replace都是數組
str_replace和preg_replace的數組用法可參考PHP手冊。
3.
對用於賦值的條件語句,可改用?:算符
這里僅舉三個細節代碼優化的方法。實際上PHP程序還有很多細節代碼優化方法,要掌握這些方法,需要多看PHP手冊,多了解些函數。在解決一些細節問題時,用不同的函數作不同的搭配,就產生不同的方法,對不同的方法應進行實際效率測試,得出優化方法。
面向對象、面向過程、類、函數、宏
盡管面向對象方法在程序設計中有很多優點(這里就不羅列了),但一般地說,面向對象程序的執行效率往往不如面向過程好,一個顯然的理由是面向對象的程序往往要頻繁調用對象的方法從而使代碼簡潔明了,卻降低了程序執行效率。
對於中小型項目,為程序效率著想,最好在思想上,面向對象與面向過程兼有,在代碼上,類、函數、宏搭配使用。這里提到一個可能對讀者陌生的概念——宏(macro)。在C語言中有宏,宏匯編中也有宏,但PHP中官方沒有定義「宏」的概念。然而我們可以通過require函數和include函數實現宏的功能。require和include通常用來在程序代碼中包含函數庫或類庫等文件,一般很少用來直接包含程序代碼文件,因為包含程序代碼有時會降低代碼易讀性。當有一段代碼需要在很多頁面中都執行時,通常被想到的是把它打包為函數或封裝為類。但此法有缺點如下:
1.
降低程序效率。因為增加了函數/類方法調用。
2.
有時此段嵌入代碼較復雜,實現功能並不單純,封進函數並不符合函數功能單純的原則。
3.
有時嵌入代碼需要與外部大量交換數據,如果封進函數會使參數表龐大,且處理函數的返回值也變得復雜。
4.
由於有2、3兩點缺點,導致當嵌入代碼與外部代碼交換的數據有所變化時,函數或類的介面的更改會變得麻煩。
當遇上以上情況時,我建議使用宏,即把嵌入代碼直接寫入被包含文件中,供各頁麵包含。但此時務必要清晰注釋宏的調用方法,輸入輸出數據等,以彌補代碼易讀性的降低。
總之,面向對象、面向過程、類、函數、宏,這些都應根據具體實際情況而搭配使用,不應盲目死守某些原則。
SQL資料庫
本來SQL資料庫的優化不應歸入PHP優化,但實際應用中PHP常與SQL資料庫配合構建網站,常用的資料庫有MySQL、PostgreSQL等。於是SQL查詢的效率也直接影響PHP程序的效率,故本文也略為談一談。
1.
MySQL 中,使用InnoDB或BDB表(支持事務)的效率比MyISAM表(不支持事務)的效率低,尤其InnoDB表效率比MyISAM低很多,而BDB表的主要劣勢在於佔用磁碟空間比MyISAM表多很多,且不能查知每個表佔用磁碟空間的大小。而對中小型應用,數據不一致性出現的概率是很微的,所以盡可使用 MyISAM表提高效率。(關於MySQL數據表的更多討論可參考《MySQL 中三種數據表的對比》)
2.
恰當建立索引和存儲冗餘數據。此話題太大故本文不打算作詳述。
3.
有些SQL查詢僅需知道資料庫中是否存在符合條件的行,故只要查得一行,搜索即可結束。所以對此類查詢,可在SQL句末加上LIMIT 1使資料庫一旦搜到滿足條件的行即不再搜索。
4.
盡量少用JOIN,有些低效率的JOIN查詢可通過存儲冗餘數據來避免。
5.
有時候需要比較現在的時間與資料庫某列的時間的差距,返回時間差距滿足一定條件的行。在MySQL 4.1之前,是沒有DATEDIFF函數的,但可以用DATE_ADD或DATE_SUB函數簡潔實現,例如要返回xtime列距今超過10天的行,有兩種寫法:
法一:
1. SELECT somecolumn FROM sometable WHERE DATE_ADD(xtime, INTERVAL 10 DAY) < NOW()
法二:
1. SELECT somecolumn FROM sometable WHERE DATE_SUB(NOW(), INTERVAL 10 DAY) > xtime
兩種寫法執行結果等效但效率不同。如果xtime列建有索引,則法一的寫法無法使用索引,而法二的寫法可以用索引,故應採用第二種寫法提高效率。
除此之外,SQL資料庫優化還大有學問。
延遲輸出與緩沖
有時候有些頁面無論如何也無法優化到需要的速度,此時可以考慮使用延遲輸出與緩沖的技術。
關於延遲輸出,可參考《動態網頁中慢數據的延遲輸出》,本文不再詳述。
而緩沖也是一個大話題,故本文也不打算作詳述,但作一簡介。
常用的技術,按網站軟體層次分,有網頁服務軟體的緩沖技術,例如Apache的緩沖技術;又有動態腳本的緩沖技術,例如用PHP編程實現的緩沖技術。
此外又可分為靜態緩沖技術和動態緩沖技術。靜態緩沖技術即把動態內容生成靜態的html頁面存於磁碟,客戶端幾乎完全跟靜態頁面打交道,整個網站猶如一個靜態網站。而伺服器後台在適當時候調用動態程序更新靜態內容(重新生成靜態內容)。動態緩沖技術則是客戶端仍與動態頁面打交道,而動態網頁在接到客戶請求時先檢查是否有相應的緩沖網頁,如有,直接把該靜態頁輸出到客戶端,如無或緩沖頁已過時,則重新生成緩沖頁面並輸出到客戶端。
雖然本文篇幅已經有相當長度,但對PHP優化這個大話題來說只是一個概述,很多優化技術也只是點到為止。讀者可擇感興趣的技術看更多的資料作深入學習。
③ 什麼叫代碼優化為什麼要優化
C語言屬於編譯語言,也就是你編寫的程序,要經過編譯形成目標代碼,具版體的處理器才能執行這個程權序。
C語言的編譯器有多種演算法,如代碼長度最小、代碼執行時間最短等等。你在開發環境中不對代碼優化進行設置,那就是默認等級,或者叫無優化。
優化的目的是給用戶一個選擇,比如你的程序存儲器只有8K,可是編譯出來的代碼是9K,那你是沒法燒錄運行的,裝不下。這時你按代碼長度最小優化一下,也許就可以了。
不優化沒什麼問題,大不了程序大一點,優化級別越高,出問題的可能性越大。因為編譯軟體只有一個,程序員千千萬,優化難免有BUG。
原則:能不優化就不優化,需要優化先自己想辦法,實在不行才藉助編譯軟體優化,但要詳細測試。
④ 代碼優化的途徑
改進、提高程序途徑:
1) 改進演算法;
2) 在源程序級上等價變換;
3) 充分利用系統提供的程序庫;
4) 編譯時優化等。
⑤ 網站代碼如何優化
永遠記住一句話:代碼盡量簡潔,能少則少。另外注意一下代碼規范。
⑥ 請教什麼是代碼優化
應該是抄頁面整體代碼的編排吧,襲搜索會訪問你的源代碼,也是一種優化巴,你看那些大網站靠前的,右鍵查看源代碼,是否代碼編排的很專業?呵呵比如更多網站pw用戶就喜歡把標題和網站介紹還有關鍵字在代碼里給重新優化下,原始的看起來非常的亂
⑦ 如何在網頁代碼中做優化
在SEO優化中,我們不僅要對關鍵字進行優化,代碼優化也是必不可少的。
下面一些見解
網頁代碼優化的原因:
(1) 可以減少網頁的體積,加快網頁的下載速度;
(2) 提高蜘蛛對信息的抓取的速度和准確性
(3) 有利於減少錯誤的代碼,提高頁面的對蜘蛛的友好性
(4) 便於管理人員維護,提高工作效率
(5) 減少網頁的噪音,突出頁面的主題
那我們怎樣對網頁代碼進行優化?
(1)對網頁中存在多餘的代碼,我們要學會清除垃圾代碼。網頁中一般存在的垃圾代碼會有空格符、空標簽塊、多餘的嵌套標簽、不必要的注釋等。
如:在每行的開始或結尾都存在著大量的空格符,我們需要把這些冗餘代碼刪除,還有空白行。清除空白行有一種簡單快捷的方法:可以將代碼轉至html代碼編
輯的模式按ctrl+A全選代碼使用組合鍵shift+Tab刪除。
(2)採用div+css排版。Div+css樣式可以精簡很多樣式,將設計網頁模版的部分脫離出來,放在一個獨立的文件夾中,對於網站的維護
和更改都相當的方便。且可以提高頁面的瀏覽速度,增加客戶訪問的友好性。在css進行布局時,要有良好的命名習慣,適當的代碼注釋。
(3)引用js文件,並不是頁面的特效越多越好(先css後js)。
(4)對於圖片的優化,網站的圖片不是越多越好,但要有圖片,要完善圖片的ALT屬性,最好使用帶有目標關鍵詞的描述。
(5)對於錯誤的代碼,我們可以利用3w工具進行檢查。
對於頁面標簽的優化,H1定義為正文標題,即一級標題,它具有唯一性。H2為二級標題,主要出現在正文的文章標題上。H3為三級標題,一般出現在頁面的側邊欄,H4-H6一般出現較少。值得注意的是在頁面中和的區別,對關鍵字起到強調作用,而僅僅是加粗的作用。
⑧ 代碼優化是如何實現的
代碼優化就是對網頁中的html源代碼進行必要的調整,以提高頁面的有好行,頁面經過優化後,一方面可以有效的精簡頁面中的冗餘代碼,加快頁面的顯示速度,同時降低頁面佔用搜索引擎伺服器的存儲空間,從而提高頁面的用戶體驗及搜素引擎友好型;另一方面可以突出頁面主題,提高頁面的相關性。
主要步驟:精簡代碼;頭部優化,權重標簽使用及圖片優化。在這四個環節中,精簡代碼是最基礎、最根本。
1.精簡代碼是指清除或者簡化頁面中的代碼,從而達到降低頁面體積、提高頁面的用戶體驗及搜索引擎優化性的目的。
精簡代碼又分五個小步驟:1.清理垃圾代碼;2.html標簽轉換;3.CSS優化;4js優化以及表格優化。
1.1 垃圾代碼是指那些在刪除的情況下也不會影響頁面正常顯示的非必要代碼。不要小看這些代碼,他占據了很大的空間,不僅影響性能還影響搜索引擎的計算時間,所以代碼最好是手寫,如果用frontpage,Word,Dreamweaver,等工具寫的話,產生的垃圾代碼會非常多,所以手動清理掉。
1.2 html標簽轉換,主要是指使用短標簽替換在網頁中實現同樣效果的長標簽。例如與,兩周都是對字體加粗,但是比多出五個字元,如果頁面很多的話,就會產生很多冗餘代碼。
1.3 css優化。css優化主要是改變css的調用方式,以及避免使用css為重要內容定義樣式。
使用div+css方式製作頁面,一方面防止垃圾代碼,另一方面可以減少重復代碼。這種方式對搜索引擎非常友好。
1.4 js優化。js對搜素引擎極不友好。目前搜索引擎不能解析javascript生成的頁面或者內容。所以重要的內容不能用js腳本生成;
1.5表格優化,傳統的頁面基本都是用table。但是這種方式對搜索引擎非常不友好,所以不建議用table
實戰:我的網站gsm alarm system所有的頁面都是手寫,幾乎沒有任何的冗餘代碼,就是標簽的轉換,盡量避免了長便簽。
還有就是css優化,所有的樣式我放在外部頁面,只需在頭部添加引用即可,這樣大大減少了頁面的體積。
還有就是我採用了div+css的方式寫了每個頁面。
還有js優化,所有的重要內容都沒有使用js,用js只是顯示一些特效,但是js的代碼也是寫在外部頁面,而要在頁面的底部添加引用,千萬不要再頭部,如果在頭部也會影響頁面的性能的
而我的網站gsm alarm system所有的頁面都遵守了上面所述規則。以上小弟如果有錯的地方,各位大哥,可以給予指點,小弟不勝感激。好了今天就到此了,下節繼續。
⑨ 網站代碼優化
所謂代碼優化是指對程序代碼進行等價(指不改變程序的運行結果)變換。程序代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。優化的含義是最終生成的目標代碼短(運行時間更短、佔用空間更小),時空效率優化。原則上,優化可以再編譯的各個階段進行,但最主要的一類是對中間代碼進行優化,這類優化不依賴於具體的計算機。
編譯過程中可進行的優化可按階段劃分:優化可在編譯的不同階段進行,分為中間代碼一級和目標代碼一級的優化。可按優化涉及的程序范圍劃分:對同一階段,分為局部優化,循環優化和全局優化. 進行優化所需要的基礎是對代碼進行數據流分析和控制流分析。如劃分DAG,查找循環,分析變數的定值點和引用點等等。最常用的代碼優化技術有刪除多餘運算,循環不變代碼外提,強度削弱,變換循環控制條件,合並已知量與復寫傳播,以及刪除無用賦值等等。
⑩ 代碼優化
創建3個數組 myCompOverlay[6],BMapPoint[6],myBuldings[6]