1. 程式人生 > >編寫高效能Web 應用程式的 10 個技巧

編寫高效能Web 應用程式的 10 個技巧

 

本文討論

常見 ASP.NET 效能難點

面向 ASP.NET 的有用效能提示和技巧

在 ASP.NET 中使用資料庫的建議

使用 ASP.NET 進行快取和後臺處理

本文使用了以下技術:
ASP.NET、.NET Framework 和 IIS

本頁內容
資料層效能 資料層效能
技巧 1 — 返回多個結果集 技巧 1 — 返回多個結果集
技巧 2 — 分頁的資料訪問 技巧 2 — 分頁的資料訪問
技巧 3 — 連線池 技巧 3 — 連線池
技巧 4 — ASP.NET 快取 API 技巧 4 — ASP.NET 快取 API
技巧 5 — 每請求快取 技巧 5 — 每請求快取
技巧 6 — 後臺處理 技巧 6 — 後臺處理
技巧 7 — 頁輸出快取和代理伺服器 技巧 7 — 頁輸出快取和代理伺服器
技巧 8 — 執行 IIS 6.0(只要用於核心快取) 技巧 8 — 執行 IIS 6.0(只要用於核心快取)
技巧 9 — 使用 Gzip 壓縮 技巧 9 — 使用 Gzip 壓縮
技巧 10 — 伺服器控制元件檢視狀態 技巧 10 — 伺服器控制元件檢視狀態
小結 小結

使用 ASP.NET 編寫 Web 應用程式的簡單程度令人不敢相信。正因為如此簡單,所以很多開發人員就不會花時間來設計其應用程式的結構,以獲得更好的效能了。在本文中,我將講述 10 個用於編寫高效能 Web 應用程式的技巧。但是我並不會將這些建議僅侷限於 ASP.NET 應用程式,因為這些應用程式只是 Web 應用程式的一部分。本文不作為對 Web 應用程式進行效能調整的權威性指南 — 一整本書恐怕都無法輕鬆講清楚這個問題。請將本文視作一個很好的起點。

成為工作狂之前,我原來喜歡攀巖。在進行任何大型攀巖活動之前,我都會首先仔細檢視指南中的路線,閱讀以前遊客提出的建議。但是,無論指南怎麼好,您都需要真正的攀巖體驗,然後才能嘗試一個特別具有挑戰性的攀登。與之相似,當您面臨修復效能問題或者執行一個高吞吐量站點的問題時,您只能學習如何編寫高效能 Web 應用程式。

我的個人體驗來自在 Microsoft 的 ASP.NET 部門作為基礎架構程式經理的經驗,在此期間我執行和管理 www.ASP.NET,幫助設計社群伺服器的結構,社群伺服器是幾個著名 ASP.NET 應用程式(組合到一個平臺的 ASP.NET Forums、.Text 和 nGallery)。我確信有些曾經幫助過我的技巧對您肯定也會有所幫助。

您應該考慮將應用程式分為幾個邏輯層。您可能聽說過 3 層(或者 n 層)物理體系結構一詞。這些通常都是規定好的體系結構方式,將功能在程序和/或硬體之間進行了物理分離。當系統需要擴大時,可以很輕鬆地新增更多的硬體。但是會出現一個與程序和機器跳躍相關的效能下降,因此應該避免。所以,如果可能的話,請儘量在同一個應用程式中一起執行 ASP.NET 頁及其相關元件。

因為程式碼分離以及層之間的邊界,所以使用 Web 服務或遠端處理將會使得效能下降 20% 甚至更多。

資料層有點與眾不同,因為通常情況下,最好具有專用於資料庫的硬體。然而程序跳躍到資料庫的成本依然很高,因此資料層的效能是您在優化程式碼時首先要考慮的問題。

在深入應用程式的效能修復問題之前,請首先確保對應用程式進行剖析,以便找出具體的問題所在。主要效能計數器(如表示執行垃圾回收所需時間百分比的計數器)對於找出應用程式在哪些位置花費了其主要時間也非常有用。然而花費時間的位置通常非常不直觀。

本文講述了兩種型別的效能改善:大型優化(如使用 ASP.NET 快取),和進行自身重複的小型優化。這些小型優化有時特別有意思。您對程式碼進行一點小小的更改,就會獲得很多很多時間。使用大型優化,您可能會看到整體效能的較大飛躍。而使用小型優化時,對於某個特定請求可能只會節省幾毫秒的時間,但是每天所有請求加起來,則可能會產生巨大的改善。

資料層效能

談到應用程式的效能調整,有一個試紙性的測試可用來對工作進行優先順序劃分:程式碼是否訪問資料庫?如果是,頻率是怎樣的?請注意,這一相同測試也可應用於使用 Web 服務或遠端處理的程式碼,但是本文對這些內容未做講述。

如果某個特定的程式碼路徑中必需進行資料庫請求,並且您認為要首先優化其他領域(如字串操作),則請停止,然後執行這個試紙性測試。如果您的效能問題不是非常嚴重的話,最好花一些時間來優化一下與資料庫、返回的資料量、進出資料庫的往返頻率相關的花費時間。

瞭解這些常規資訊之後,我們來看一下可能會有助於提高應用程式效能的十個技巧。首先,我要講述可能會引起最大改觀的更改。

技巧 1 — 返回多個結果集

仔細檢視您的資料庫程式碼,看是否存在多次進入資料庫的請求路徑。每個這樣的往返都會降低應用程式可以提供的每秒請求數量。通過在一個數據庫請求中返回多個結果集,可以節省與資料庫進行通訊所需的總時間長度。同時因為減少了資料庫伺服器管理請求的工作,還會使得系統伸縮性更強。

雖然可以使用動態 SQL 返回多個結果集,但是我首選使用儲存過程。關於業務邏輯是否應該駐留於儲存過程的問題還存在一些爭議,但是我認為,如果儲存過程中的邏輯可以約束返回資料的話(縮小資料集的大小、縮短網路上所花費時間,不必篩選邏輯層的資料),則應贊成這樣做。

使用 SqlCommand 例項及其 ExecuteReader 方法填充強型別的業務類時,可以通過呼叫 NextResult 將結果集指標向前移動。圖 1 顯示了使用型別類填充幾個 ArrayList 的示例會話。只從資料庫返回您需要的資料將進一步減少伺服器上的記憶體分配。

技巧 2 — 分頁的資料訪問

ASP.NET DataGrid 具有一個很好的功能:資料分頁支援。在 DataGrid 中啟用分頁時,一次會顯示固定數量的記錄。另外,在 DataGrid 的底部還會顯示分頁 UI,以便在記錄之間進行導航。該分頁 UI 使您能夠在所顯示的資料之間向前和向後導航,並且一次顯示固定數量的記錄。

還有一個小小的波折。使用 DataGrid 的分頁需要所有資料均與網格進行繫結。例如,您的資料層需要返回所有資料,那麼 DataGrid 就會基於當前頁篩選顯示的所有記錄。如果通過 DataGrid 進行分頁時返回了 100,000 個記錄,那麼針對每個請求會放棄 99,975 個記錄(假設每頁大小為 25 個記錄)。當記錄的數量不斷增加時,應用程式的效能就會受到影響,因為針對每個請求必須傳送越來越多的資料。

要編寫效能更好的分頁程式碼,一個極佳的方式是使用儲存過程。圖 2 顯示了針對 Northwind 資料庫中的 orders 表進行分頁的一個示例儲存過程。簡而言之,您此時要做的只是傳遞頁索引和頁大小。然後就會計算合適的結果集,並將其返回。

在社群伺服器中,我們編寫了一個分頁伺服器控制元件,以完成所有的資料分頁。您將會看到,我使用的就是技巧 1 中討論的理念,從一個儲存過程返回兩個結果集:記錄的總數和請求的資料。

返回記錄的總數可能會根據所執行查詢的不同而有所變化。例如,Where 子句可用來約束返回的資料。為了計算在分頁 UI 中顯示的總頁數,必須瞭解要返回記錄的總數。例如,如果總共有 1,000,000 條記錄,並且要使用一個 Where 子句將其篩選為 1000 條記錄,那麼分頁邏輯就需要了解記錄的總數才能正確呈現分頁 UI。

技巧 3 — 連線池

在 Web 應用程式和 SQL Server 之間設定 TCP 連線可能是一個非常消耗資源的操作。Microsoft 的開發人員到目前為止能夠使用連線池已經有一段時間了,這使得他們能夠重用資料庫連線。他們不是針對每個請求都設定一個新的 TCP 連線,而是隻在連線池中沒有任何連線時才設定新連線。當連線關閉時,它會返回連線池,在其中它會保持與資料庫的連線,而不是完全破壞該 TCP 連線。

當然,您需要小心是否會出現洩漏連線。當您完成使用連線時,請一定要關閉這些連線。再重複一遍:無論任何人對 Microsoft?.NET Framework 中的垃圾回收有什麼評論,請一定要在完成使用連線時針對該連線顯式呼叫 Close 或 Dispose。不要相信公共語言執行庫 (CLR) 會在預先確定的時間為您清除和關閉連線。儘管 CLR 最終會破壞該類,並強制連線關閉,但是當針對物件的垃圾回收真正發生時,並不能保證。

要以最優化的方式使用連線池,需要遵守一些規則。首先開啟連線,執行操作,然後關閉該連線。如果您必須如此的話,可以針對每個請求多次開啟和關閉連線(最好應用技巧 1),但是不要一直將連線保持開啟狀態並使用各種不同的方法對其進行進出傳遞。第二,使用相同的連線字串(如果使用整合身份驗證的話,還要使用相同的執行緒標識)。如果不使用相同的連線字串,例如根據登入的使用者自定義連線字串,那麼您將無法得到連線池提供的同一個優化值。如果您使用整合身份驗證,同時還要模擬大量使用者,連線池的效率也會大大下降。嘗試跟蹤與連線池相關的任何效能問題時,.NET CLR 資料效能計數器可能非常有用。

每當應用程式連線資源時,如在另一個程序中執行的資料庫,您都應該重點考慮連線該資源所花時間、傳送或檢索資料所花時間,以及往返的數量,從而進行優化。優化應用程式中任何種類的程序跳躍都是獲得更佳效能的首要一點。

應用層包含了連線資料層、將資料轉換為有意義類例項和業務流程的邏輯。例如社群伺服器,您要在其中填充Forums 或 Threads集合,應用業務規則(如許可權);最重要的是要在其中執行快取邏輯。

技巧 4 — ASP.NET 快取 API

編寫應用程式程式碼行之前,一個首要完成的操作是設計應用層的結構,以便最大化利用 ASP.NET 快取功能。

如果您的元件要在 ASP.NET 應用程式中執行,則只需在該應用程式專案中包括一個 System.Web.dll 引用。當您需要訪問該快取時,請使用 HttpRuntime.Cache 屬性(通過 Page.Cache 和 HttpContext.Cache 也可訪問這個物件)。

對於快取資料,有幾個規則。首先,如果資料可能會多次使用時,則這是使用快取的一個很好的備選情況。第二,如果資料是通用的,而不特定於某個具體的請求或使用者時,則也是使用快取的一個很好的備選情況。如果資料是特定於使用者或請求的,但是壽命較長的話,仍然可以對其進行快取,但是這種情況可能並不經常使用。第三,一個經常被忽略的規則是,有時可能您快取得太多。通常在一個 x86 計算機上,為了減少記憶體不足錯誤出現的機會,您會想使用不高於 800MB 的專用位元組執行程序。因此快取應該有個限度。換句話說,您可能能夠重用某個計算結果,但是如果該計算採用 10 個引數的話,您可能要嘗試快取 10 個排列,這樣有可能給您帶來麻煩。一個要求 ASP.NET 的最常見支援是由於過度快取引起的記憶體不足錯誤,尤其是對於大型資料集。


圖 3 ASP.NET快取

快取有幾個極佳的功能,您需要對它們有所瞭解。首先,快取會實現最近最少使用的演算法,使得 ASP.NET 能夠在記憶體執行效率較低的情況下強制快取清除 - 從快取自動刪除未使用過的專案。第二,快取支援可以強制失效的過期依賴項。這些依賴項包括時間、金鑰和檔案。時間經常會用到,但是對於 ASP.NET 2.0,引入了一個功能更強的新失效型別:資料庫快取失效。它指的是當資料庫中的資料發生變化時自動刪除快取中的項。有關資料庫快取失效的詳細資訊,請參閱 MSDN?Magazine 2004 年 7 月的 Dino Esposito Cutting Edge 專欄。要了解快取的體系結構,請參閱圖 3。

技巧 5 — 每請求快取

在本文前面部分,我提到了經常遍歷程式碼路徑的一些小改善可能會導致較大的整體效能收益。對於這些小改善,其中有一個絕對是我的最愛,我將其稱之為“每請求快取”。

快取 API 的設計目的是為了將資料快取較長的一段時間,或者快取至滿足某些條件時,但每請求快取則意味著只將資料快取為該請求的持續時間。對於每個請求,要經常訪問某個特定的程式碼路徑,但是資料卻只需提取、應用、修改或更新一次。這聽起來有些理論化,那麼我們來舉一個具體的示例。

在社群伺服器的論壇應用程式中,頁面上使用的每個伺服器控制元件都需要個性化的資料來確定使用什麼外觀、使用什麼樣式表,以及其他個性化資料。這些資料中有些可以長期快取,但是有些資料卻只針對每個請求提取一次,然後在執行該請求期間對其重用多次,如要用於控制元件的外觀。

為了達到每請求快取,請使用 ASP.NET HttpContext。對於每個請求,都會建立一個 HttpContext 例項,在該請求期間從 HttpContext.Current 屬性的任何位置都可訪問該例項。該 HttpContext 類具有一個特殊的 Items 集合屬性;新增到此 Items 集合的物件和資料只在該請求持續期間內進行快取。正如您可以使用快取來儲存經常訪問的資料一樣,您也可以使用 HttpContext.Items 來儲存只基於每個請求使用的資料。它背後的邏輯非常簡單:資料在它不存在的時候新增到 HttpContext.Items 集合,在後來的查詢中,只是返回 HttpContext.Items 中的資料。

技巧 6 — 後臺處理

通往程式碼的路徑應該儘可能快速,是嗎?可能有時您會覺得針對每個請求執行的或者每 n 個請求執行一次的任務所需資源非常多。傳送電子郵件或者分析和驗證傳入資料就是這樣的一些例子。

剖析 ASP.NET Forums 1.0 並重新構建組成社群伺服器的內容時,我們發現新增新張貼的程式碼路徑非常慢。每次新增新張貼時,應用程式首先需要確保沒有重複的張貼,然後必須使用“壞詞”篩選器分析該張貼,分析張貼的字元圖釋,對張貼新增標記並進行索引,請求時將張貼新增到合適的佇列,驗證附件,最終張貼之後,立即向所有訂閱者發出電子郵件通知。很清楚,這涉及很多操作。

經研究發現,大多數時間都花在了索引邏輯和傳送電子郵件上。對張貼進行索引是一個非常耗時的操作,人們發現內建的 System.Web.Mail 功能要連線 SMYP 伺服器,然後連續傳送電子郵件。當某個特定張貼或主題領域的訂閱者數量增加時,執行 AddPost 功能所需的時間也越來越長。

並不需要針對每個請求都進行電子郵件索引。理想情況下,我們想要將此操作進行批處理,一次索引 25 個張貼或者每五分鐘傳送一次所有電子郵件。我們決定使用以前用於對資料快取失效進行原型設計的程式碼,這個失效是用於最終進入 Visual Studio® 2005 的內容的。

System.Threading 名稱空間中的 Timer 類非常有用,但是在 .NET Framework 中不是很有名,至少對於 Web 開發人員來說是這樣。建立之後,這個 Timer 類將以一個可配置的間隔針對 ThreadPool 中的某個執行緒呼叫指定的回撥。這就表示,您可以對程式碼進行設定,使其能夠在沒有對 ASP.NET 應用程式進行傳入請求的情況下得以執行,這是後臺處理的理想情況。您還可以在此後臺程序中執行如索引或傳送電子郵件之類的操作。

但是,這一技術有幾個問題。如果應用程式域解除安裝,該計時器例項將停止觸發其事件。另外,因為 CLR 對於每個程序的執行緒數量具有一個硬性標準,所以可能會出現這樣的情形:伺服器負載很重,其中計時器可能沒有可在其基礎上得以完成的執行緒,在某種程度上可能會造成延遲。ASP.NET 通過在程序中保留一定數量的可用執行緒,並且僅使用匯流排程的一部分用於請求處理,試圖將上述情況發生的機會降到最低。但是,如果您具有很多非同步操作時,這可能就是一個問題了。

這裡沒有足夠的空間來放置該程式碼,但是您可以下載一個可以看懂的示例,網址是 www.rob-howard.net。請了解一下 Blackbelt TechEd 2004 演示中的幻燈片和演示。

技巧 7 — 頁輸出快取和代理伺服器

ASP.NET 是您的表示層(或者說應該是您的表示層);它由頁、使用者控制元件、伺服器控制元件(HttpHandlers 和 HttpModules)以及它們生成的內容組成。如果您具有一個 ASP.NET 頁,它會生成輸出(HTML、XML、影象或任何其他資料),並且您針對每個請求執行此程式碼時,它都會生成相同的輸出,那麼您就擁有一個可用於頁輸出快取的絕佳備選內容。

將此行內容新增頁的最上端

<%@ Page OutputCache VaryByParams="none" Duration="60" %>

就可以高效地為此頁生成一次輸出,然後對它進行多次重用,時間最長為 60 秒,此時該頁將重新執行,輸出也將再一次新增到 ASP.NET 快取。通過使用一些低階程式化 API 也可以完成此行為。對於輸出快取有幾個可配置的設定,如剛剛講到的 VaryByParams 屬性。VaryByParams 剛好被請求到,但還允許您指定 HTTP GET 或 HTTP POST 引數來更改快取項。例如,只需設定 VaryByParam="Report" 即可對 default.aspx?Report=1 或 default.aspx?Report=2 進行輸出快取。通過指定一個以分號分隔的列表,還可以指定其他引數。

很多人都不知道何時使用輸出快取,ASP.NET 頁還會生成一些位於快取伺服器下游的 HTTP 標頭,如 Microsoft Internet Security and Acceleration Server 或 Akamai 使用的標頭。設定了 HTTP 快取標頭之後,可以在這些網路資源上對文件進行快取,客戶端請求也可在不必返回原始伺服器的情況下得以滿足。

因此,使用頁輸出快取不會使得您的應用程式效率更高,但是它可能會減少伺服器上的負載,因為下游快取技術會快取文件。當然,這可能只是匿名內容;一旦它成為下游之後,您就再也不會看到這些請求,並且再也無法執行身份驗證以阻止對它的訪問了。

技巧 8 — 執行 IIS 6.0(只要用於核心快取)

如果您未執行 IIS 6.0 (Windows Server? 2003),那麼您就錯過了 Microsoft Web 伺服器中的一些很好的效能增強。在技巧 7 中,我討論了輸出快取。在 IIS 5.0 中,請求是通過 IIS 然後進入 ASP.NET 的。涉及到快取時,ASP.NET 中的 HttpModule 會接收該請求,並返回快取中的內容。

如果您正在使用 IIS 6.0,就會發現一個很好的小功能,稱為核心快取,它不需要對 ASP.NET 進行任何程式碼更改。當請求由 ASP.NET 進行輸出快取時,IIS 核心快取會接收快取資料的一個副本。當請求來自網路驅動程式時,核心級別的驅動程式(無上下文切換到使用者模式)就會接收該請求,如果經過了快取,則會將快取的資料重新整理到響應,然後完成執行。這就表示,當您將核心模式快取與 IIS 和 ASP.NET 輸出快取一起使用時,就會看到令人不敢相信的效能結果。在 ASP.NET 的 Visual Studio 2005 開發過程中,我一度是負責 ASP.NET 效能的程式經理。開發人員完成具體工作,但是我要看到每天進行的所有報告。核心模式快取結果總是最有意思的。最常見的特徵是網路充滿了請求/響應,而 IIS 執行時的 CPU 使用率只有大約 5%。這太令人震驚了!當然使用 IIS 6.0 還有一些其他原因,但是核心模式快取是其中最明顯的一個。

技巧 9 — 使用 Gzip 壓縮

雖然使用 gzip 並不一定是伺服器效能技巧(因為您可能會看到 CPU 使用率的提高),但是使用 gzip 壓縮可以減少伺服器傳送的位元組數量。這就使人們覺得頁速度加快了,並且還減少了頻寬的用量。根據所傳送資料、可以壓縮的程度以及客戶端瀏覽器是否支援(IIS 只會向支援 gzip 壓縮的客戶端傳送經過 gzip 壓縮的內容,如 Internet Explorer 6.0 和 Firefox),您的伺服器每秒可以服務於更多的請求。實際上,幾乎每當您減少所返回資料的數量時,都會增加每秒請求數。

Gzip 壓縮已經內建到 IIS 6.0 中,並且其效能比 IIS 5.0 中使用的 gzip 壓縮要好的多,這是好訊息。但不幸的是,當嘗試在 IIS 6.0 中開啟 gzip 壓縮時,您可能無法在 IIS 的屬性對話中找到該設定。IIS 小組在該伺服器中置入了卓越的 gzip 功能,但是忘了包括一個用於啟用該功能的管理 UI。要啟用 gzip 壓縮,您必須深入到 IIS 6.0 的 XML 配置設定內部(這樣不會引起心臟虛弱)。順便提一句,這歸功於 OrcsWeb 的 Scott Forsyth,他幫助我提出了在 orcsWeb 上宿主的 www.asp.net 伺服器的這個問題。

本文就不講述步驟了,請閱讀 Brad Wilson 的文章,網址是 IIS6 Compression。還有一篇有關為 ASPX 啟用壓縮的知識庫文章,網址是 Enable ASPX Compression in IIS。但是您應該注意,由於一些實施細節,IIS 6.0 中不能同時存在動態壓縮和核心快取。

技巧 10 — 伺服器控制元件檢視狀態

檢視狀態是一個有趣的名稱,用於表示在所生成頁的隱藏輸出欄位中儲存一些狀態資料的 ASP.NET。當該頁張貼回伺服器時,伺服器可以分析、驗證、並將此檢視狀態資料應用回該頁的控制元件樹。檢視狀態是一個非常強大的功能,因為它允許狀態與客戶端一起保持,並且它不需要 cookie 或伺服器記憶體即可儲存此狀態。很多 ASP.NET 伺服器控制元件都使用檢視狀態來保持在與頁元素進行互動期間建立的設定,例如儲存對資料進行分頁時顯示的當前頁。

然而使用檢視狀態也有一些缺點。首先,服務或請求頁時,它都會增加頁的總負載。對張貼回伺服器的檢視狀態資料進行序列化或取消序列化時,也會發生額外的開銷。最後,檢視狀態會增加伺服器上的記憶體分配。

幾個伺服器控制元件有著過度使用檢視狀態的趨勢,即使在並不需要的情況下也要使用它,其中最著名的是 DataGrid。ViewState 屬性的預設行為是啟用,但是如果您不需要,則可以在控制元件或頁級別關閉。在控制元件內,只需將 EnableViewState 屬性設定為 false,或者在頁中使用下列設定即可對其進行全域性設定:

<%@ Page EnableViewState="false" %>

如果您不回發頁,或者總是針對每個請求重新生成頁上的控制元件,則應該在頁級別禁用檢視狀態。

小結

我為您講述了一些我認為在編寫高效能 ASP.NET 應用程式時有所幫助的技巧。正如我在本文前面部分提到的那樣,這是一個初步指南,並不是 ASP.NET 效能的最後結果。(有關改善 ASP.NET 應用程式效能的資訊,請參閱 Improving ASP.NET Performance。)只有通過自己的親身體驗才能找出解決具體效能問題的最好方法。但是,在您的旅程中,這些技巧應該會為您提供一些好的指南。在軟體開發中,幾乎沒有絕對的東西;每個應用程式都是唯一的。

Rob Howard 是 Telligent Systems 的創始人,專門從事高效能 Web 應用程式、知識庫管理和協作系統方面的工作。Rob 以前受僱於 Microsoft,他在那裡幫助設計了 ASP.NET 1.0、1.1 和 2.0 的基礎結構。要聯絡 Rob,請訪問 [email protected]

相關推薦

編寫高效能Web 應用程式10 技巧

  本文討論 • 常見 ASP.NET 效能難點 •

Linux中編寫Bash腳本的10技巧

oot .cn 註意 src 使用 art 模塊化 工作 set Shell 腳本編程 是你在 Linux 下學習或練習編程的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程序或工具等(這裏只是僅舉幾例)更是必備技能。 本文中,我們將分享 10

提升 Web開發性能的 10 技巧

例如 internet nginx 數據庫 出了 sta local 延遲 jpg 隨著網絡的高速發展,網絡性能的持續提高成為能否在蕓蕓App中脫穎而出的關鍵。高度聯結的世界意味著用戶對網絡體驗提出了更嚴苛的要求。假如你的網站不能做到快速響應,又或你的App存在延遲,用戶很

編寫優秀jQuery插件的10技巧

max run () hide container line 選項 als 不同的 1. 把你的代碼全部放在閉包裏面 這是我用的最多的一條。但是有時候在閉包外面的方法會不能調用。不過你的插件的代碼只為你自己的插件服務,所以不存在這個問題,你可以把所有的代碼都放在閉包裏面。而

編寫一個Java應用程式,當用戶在輸入對話方塊中輸入兩日期後(日期格式為YYYYMMDD,如1999年1月12日應輸入為19990112),程式將判斷兩日期的先後順序,以及兩日期之間的間隔天數(例

編寫一個Java應用程式,當用戶在輸入對話方塊中輸入兩個日期後(日期格式為YYYYMMDD, 如1999年1月12日應輸入為19990112), 程式將判斷兩個日期的先後順序, 以及兩個日期之間的間隔天數(例如1999年1月1日和1999年1月2日之間的間隔是1天。  

編寫一個Java 應用程式,計算兩大整數的和、差、積和商,並計算一個大整數的因 子個數(因子中不包括1 和大整數本身)。

1 package ex6_2; 2 import java.math.BigInteger; 3 4 public class BigintegerExample { 5 public static void main(String[] args) { 6

編寫一個Java 應用程式,使用者從輸入對話方塊輸入了兩日期,程式將判斷兩日期的 大小關係,以及兩日期之間的間隔天數。

1 package ex6_1; 2 3 import java.sql.Date; 4 import java.util.Calendar; 5 6 import javax.swing.JOptionPane; 7 8 public class DateExample { 9

Linux 中高效編寫 Shell 指令碼的 10 技巧

Shell 指令碼程式設計 是你在 Linux 下學習或練習程式設計的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程式或工具等(這裡只是僅舉幾例)更是必備技能。 本文中,我們將分享 10 個寫出高效可靠的 bash 指令碼的實用技巧,它們包括: 1、 指令碼中多寫註釋

Linux中編寫Bash指令碼的10技巧

Shell 指令碼程式設計 是你在 Linux 下學習或練習程式設計的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程式或工具等(這裡只是僅舉幾例)更是必備技能。 本文中,我們將分享 10 個寫出高效可靠的 bash 指令碼的實用技巧,它們包括: 1、 指令碼中多寫註釋 這是

OWASP Top 10 2017 10項最嚴重的 Web 應用程式安全風險

A1:2017-注入 將不受信任的資料作為命令或查詢的一部分發送到解析器時,會產生諸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻擊者的惡意資料可以誘使解析器在沒有適當授權的情況下執行非預期命令或訪問資料。 A2:2017-失效的身份

編寫優秀程式碼的10技巧

作為程式設計師,寫程式碼是需要一種崇高無上的精神來支撐的,寫出優秀的程式碼,更需要你有深厚的底蘊和良好的編碼習慣。在介紹寫優秀程式碼的10個技巧之前,我們先來探討一下什麼樣的程式碼才是優秀的程式碼。 穩定可靠(Robustness) 可維護且簡潔(Maintainable

小白必看 學習PHP的6步驟10技巧

php 教程 在這個終身學習的時代,資訊泛濫的時代,我們需要的能力並不是去背誦相應的知識點,而是掌握學習方式。學習PHP也是如此,有時候技巧和步驟比埋頭苦幹要有效得多。下面小編就和大家分享一下學習PHP的6個步驟(僅僅是簡單概括)和10個技巧。 1、首先需要熟悉HTML/CSS/JS等網頁基本元素,完

高效Web開發的10jQuery代碼片段

() 檢測 滑動 agen animate toolbar 自動添加 屬性 span 在過去的幾年中,jQuery一直是使用最為廣泛的JavaScript腳本庫。今天我們將為各位Web開發者提供10個最實用的jQuery代碼片段,有需要的開發者可以保存起來。 1、檢測In

推進你的計算機網絡事業:10技巧

我們 不可 一點 協議 團隊 新技術 基礎設施 創新 需要 希望將自己的職業生涯提升到新水平的網絡專業人士有很多選擇,有時可能會讓人不知所措。關鍵是找出你想去的地方,然後評估你如何到達那裏的選擇。對於一些人來說,職業發展可能就像在一項流行的新技術上學習一周的課程一樣簡單。對

Linux 系統中 sudo 命令的 10 技巧

etc visudo linux. 安全 pwd 自己的 技術 ups linu 概覽 sudo 表示 “superuser do”。 它允許已驗證的用戶以其他用戶的身份來運行命令。其他用戶可以是普通用戶或者超級用戶。然而,大部分時候我們用它來以提升的權限來運行命令。 su

XWAF——Web應用程式框架

XWAF框架簡介 版本:V1.0.0.0 XWAF是一個基於java反射和Servlet 技術的Web應用程式框架。其英文全稱為“eXtensible Web Applica

理解Web應用程式的程式碼結構和執行原理(3)

1、理解Web應用程式的執行原理和機制        Web應用程式是基於瀏覽器/伺服器模式(也稱B/S架構)的應用程式,它開發完成後,需要部署到Web伺服器上才能正常執行,與使用者互動的客戶端是網頁瀏覽器。 瀏覽器負責顯示來自伺服器的資料和接受使用者的輸入資料,也

PWA 漸進式Web應用程式 - 解釋

想象一下,如果一個網站上所有的功能都能夠作為一個移動應用程式為使用者所用——任何裝置上都可以使用、可接收所有的通知、離線模式可用,為了實現這個願景,2015年,谷歌創造了漸進式Web應用程式(PWA)。什麼是PWA?使用PWA對企業有哪些好處?   什麼是PWA?   PWA是指可以在任何瀏覽器

獨立部署asp.net core 2.1 Web應用程式

1.建立asp.net core 2.0  Web應用程式 新增引用: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Design 2.配置Sqlite資料庫 修改Startup.cs檔案

Java嵌入式資料庫H2學習總結(二)——在Web應用程式中使用H2資料庫

一、搭建測試環境和專案 1.1、搭建JavaWeb測試專案   建立一個【H2DBTest】JavaWeb專案,找到H2資料庫的jar檔案,如下圖所示:      H2資料庫就一個jar檔案,這個Jar檔案裡面包含了使用JDBC方式連線H2資料庫時使用的驅動類,將"h2-1.4.183.jar"加入到