使用Microsoft Web Application Stress Tool對web進行壓力測試

你的Web服務器和應用到底能夠支持多少并發用戶訪問?在出現大量并發請求的情況下,軟件會出現問題嗎?這些問題靠通常的測試手段是無法解答的。本文介紹 了Microsoft為這個目的而提供的免費工具WAS及其用法。另外,本文介紹了一種Web應用的性能優化方法,并利用WAS測試了它的性能改善程度。
??????? 隨著服務器端處理任務的日益復雜以及網站訪問量的迅速增長,服務器性能的優化也成了非常迫切的任務。在優化之前,最好能夠測試一下不同條件下服務器的性能表現。找出性能瓶頸所在是設計性能改善方案之前的一個至關緊要的步驟。
   本文介紹微軟Web壓力測試工具(Microsoft Web Application Stress Tool 1.1)在Web服務器性能測試中的應用(注:Stress基本含義為“重壓;壓力”等,本文稱之為“負載”)。另 外,我們還將通過WAS評估一種相對簡單的網站性能改善方法,這種方法的基本思想是在服務器上生成靜態的HTML頁面、避免過多的數據庫調用。
  負載測試是任何Web應用的開發周期中一個重要的步驟。如果你在構造一個為大量用戶服務的應用,搞清楚你的產品配置能夠承受多大的負載非常重要。如果你在構造一個小型的Intranet網站,測試能夠暴露出最終會導致服務器崩潰的內存漏洞以及競爭情況。
?????? 無論是哪種情形,花些時間對應用進行負載測試可以獲得重要的基準性能數據,為未來的代碼優化、硬件配置以及系統軟件升級帶來方便。即使經費有限的開發組 織也可以對它們的網站進行負載測試,因為Microsoft的WAS是可以免費下載的。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。為了對網站進行負載測試,WAS可以通過一臺或者多臺客戶機模擬大量用戶的活動。WAS支持身份驗證、加密和Cookies,也能夠模擬各種瀏 覽器類型和Modem速度,它的功能和性能可以與數萬美元的產品相媲美。如果你對WAS和Microsoft的另外一個測試工具Web Capacity Analysis Tool (WCAT)之間的差別感興趣,可以訪問Microsoft Web工具的比較頁面。
要對網 站進行負載測試首先必須創建WAS腳本模擬用戶活動。我們可以用下面四種方法之一創建腳本:通過記錄瀏覽器的活動;通過導入IIS日志;通過把WAS指向 Web網站的內容;或者手工制作。圖1所顯示的是通過記錄瀏覽器事件生成的腳本的一部分,網站是Microsoft的Duwamish Book Store。Duwamish是Microsoft開發的電子商務Web應用示例,從Duwamish網站的“Phase 4”鏈接可以下載這個軟件包。下載包中包含了它自己的WAS測試腳本。?
?????? 1212010.jpg
【圖1】
?????? 制作WAS腳本是相當簡單的,不過要制作出模擬真實用戶活動的腳本有點兒復雜。如果你已經有一個運行的Web網站,可以使用Web服務器的日志來確定Web網站上的用戶點擊分布。如果你的應用還沒有開始運行,那么只好根據經驗作一些猜測了。
   圖1這個腳本中我們假定有30個會員在瀏覽書店,同時又有一個會員正在購買。要模擬兩者混合而成的行為,首先必須創建頁面組并在腳本的Page Group分枝確定點擊分布情況。在Page Group分枝中我們可以增加、修改或刪除頁面組,也可以為各個組修改流量的分布。
  圖2顯示了grp_browse和grp_buy這兩個頁面組以及30比1的流量分布
1212011.jpg
?????? 【圖2】
?????? 創建了頁面組之后,我們就可以在主腳本視圖中賦予各個請求不同的頁面組,如圖3所示。為每個請求指定頁面組相當于告訴WAS如何分布流量。記住在本例中對grp_buy組頁面的請求約占總數的3%,而對grp_browse組頁面的請求約占97%。
1212012.jpg
?【圖3】
?????? 如果需要在查詢字符串中傳遞“名字-值”對,可以用WAS的查詢字符串編輯器來定義各個變量的所有可能的值。在輸入變量值后,既可以要求WAS順序地使用 變量的各個值,也可以要求WAS在請求時隨機選擇變量值。這在一定程度上增加了腳本所模擬行為的真實性,也可以幫助避免緩沖對測試結果的影響準備好測試腳 本之后,我們可以調整測試配置以便觀察不同條件下的應用性能。圖4是WAS的設置界面
1212013.jpg
【圖4】
?????? Stress Level和Stress multiplier這二個項決定了訪問服務器的 并發連接的數量。Microsoft建議不要選擇超過100的Stress Level值。如果要模擬的并發連接數量超過100個,可以調整Stress multiplier或使用多個客戶機。在負載測試期間WAS將通過DCOM與其他客戶機協調。有關在測試中使用多個客戶機的更多信息,參見 http://webtool.rte.microsoft.com/kb/hkb13.htm。
   如果網站提供個性化服務,要進行身份驗證或使用Cookies,我們還要為WAS提供一個用戶目錄。WAS中的用戶存儲了發送給服務器的密碼以及服務器 發送給客戶端的Cookies。增加用戶數量并不增加Web服務器的 負載。必須提供足夠數量的用戶以滿足并發連接的要求(Stesss Level乘以Stress Multiplier)。有關線程、用戶、Cookies相互作用的更多信息請參見http://webtool.rte.microsoft.com /Threads/WASThreads.htm。 本文來自無涯教程網:http://www.wuyapc.com
   WAS允許設置warmup(熱身)時間,一般可以設置為1分鐘。在warmup期間WAS開始執行腳本,但不收集統計數據。warmup時間給 MTS、數據庫以及磁盤緩沖等一個機會來做準備工作。如果在warmup時間內收集統計數據,這些操作的開銷將影響性能測試結果。
   設置頁 面提供的另外一個有用的功能是限制帶寬(throttle bandwidth)。帶寬限制功能能夠為測試模擬出Modem(14.k K,28.8 K,56 K)、ISDN(64 K,128 K)以及T1(1.54 M)的速度。使用帶寬限制功能可以精確地預測出客戶通過撥號網絡或其他外部連接訪問Web服務器所感受的性能。
  要理解這些不同的設置對應用的影響,有必要了解如何使用WAS收集性能數據。
使用WAS,從遠程Windows NT和Windows 2000機器獲取和分析性能計數器(Performance Counter)是很方便的。加入計數器要用到圖5所示的Perf Counters分枝。
1212014.jpg
??? 【圖5】
?????? 在測試中選擇哪些計數器顯然跟測試目的有關。雖然下面這個清單不可能精確地隔離出性能瓶頸所在,但對一般的Web服務器性能測試來說卻是一個好的開始。
?????? ? 處理器:CPU使用百分比(% CPU Utilization)
?????? ? 線程:每秒的上下文切換次數(Context Switches Per Second (Total))
?????? ? ASP:每秒請求數量(Requests Per Second)
?????? ? ASP:請求執行時間(Request Execution Time)
?????? ? ASP:請求等待時間(Request Wait Time)
?????? ? ASP:置入隊列的請求數量(Requests Queued)
  CPU使用百分比反映了處理器開銷。CPU使用百分比持續地超過75%是性能瓶頸在于處理器的一個明顯的跡象。每秒上下文切換次數指示了處理器的工作效率。如果處理器陷于每秒數千次的上下文切換,說明它忙于切換線程而不是處理ASP腳本。
????? 每秒的ASP請求數量、執行時間以及等待時間在各種測試情形下都是非常重要的監測項目。每秒的請求數量告訴我們每秒內服務器成功處理的ASP請求數量。執行時間和等待時間之和顯示了反應時間,這是服務器用處理好的頁面作應答所需要的時間。
   我們可以繪出隨著測試中并發用戶數量的增加每秒請求數量和反應時間的變化圖。增加并發用戶數量時每秒請求數量也會增加。然而,我們最終會達到這樣一個 點,此時并發用戶數量開始“壓倒”服務器。如果繼續增加并發用戶數量,每秒請求數量開始下降,而反應時間則會增加。要搞清楚硬件和軟件的能力,找出這個并 發用戶數量開始“壓倒”服務器的臨界點非常重要。
  置入隊列的ASP請求數量也是一個重要的指標。如果在測試中這個數量有波動,某個COM對象所接收到的請求數量超過了它的處理能力。這可能是因為在應用的中間層使用了一個低效率的組件,或者在ASP會話對象中存儲了一個單線程的單元組件。
  運行WAS的客戶機CPU使用率也有必要監視。如果這些機器上的CPU使用率持續地超過75%,說明客戶機沒有足夠的資源來正確地運行測試,此時應該認為測試結果不可信。在這種情況下,測試客戶機的數量必須增加,或者減小測試的Stress Level。
本文來自無涯教程網:http://www.wuyapc.com
每次測試運行結束后WAS會生成詳細的報表,即使測試被提前停止也一樣。WAS報表可以從View菜單選擇Reports查看。下面介紹一下報表中幾個重要的部分。
  如果這是一個新創建的測試腳本,你應該檢查一下報表的Result Codes部分。這部分內容包含了請求結果代碼、說明以及服務器返回的結果代碼的數量。如果這里出現了404代碼(頁面沒有找到),說明在腳本中有錯誤的頁面請求。
   頁面摘要部分提供了頁面的名字,接收到第一個字節的平均時間(TTFB),接收到最后一個字節的平均時間(TTLB),以及測試腳本中各個頁面的命中次 數。TTFB和TTLB這兩個值對于計算客戶端所看到的服務器性能具有重要意義。TTFB反映了從發出頁面請求到接收到應答數據第一個字節的時間總和(以 毫秒計),TTLB包含了TTFB,它是客戶機接收到頁面最后一個字節所需要的累計時間。
  報表中還包含了所有性能計數器的信息。這些數據顯示了運行時各個項目的測量值,同時還提供了最大值、最小值、平均值等。報表實際提供的信息遠遠超過了我們這里能夠介紹的內容。為了給你一個有關表所提供信息種類的印象,圖6摘錄了一個報表實例。
1212015.jpg
?【圖6】
?????? 隨著Internet應用的日益廣泛,用戶的要求和期望也在不斷地發展。今天的客戶期待個性化的可定制的方案,期待這些方案不僅簡單,而且快速、可靠、成 本低廉。對于能夠適應用戶需求不斷變動的可定制頁面來說,靜態HTML已經退出了舞臺,比如內容根據客戶請求變化的頁面就是其中一例。這一切都要求系統保 存相關的數據,例如有關用戶本身以及用戶可能請求哪些信息的數據。
  緊跟這些趨勢的Web開發者已經開始提供可定制的Web網站。象搜索數據之類的任務現在可以由服務器執行而無需客戶干預。然而,這些變革也導致了一個結果,這就是許多網站都在使用大量的未經優化的數據庫調用,從而使得應用性能大打折扣。
  我們可以使用以下幾種方法來解決這些問題:
?????? 1. 優化ASP代碼。
?????? 2. 優化數據庫調用。
?????? 3. 使用存儲過程。
?????? 4. 調整服務器性能。
  優秀的網站設計都會關注這些問題。然而,與靜態頁面的速度相比,任何數據庫調用都會顯著地影響Web網站的響應速度,這主要是因為在發送頁面之前必須單獨地為每個訪問網站的用戶進行數據庫調用。
 ??? 這里提出的性能優化方案正是基于以下事實:訪問靜態HTML頁面要比訪問那些內容依賴于數據庫調用的頁面要快。它的基本思想是:在用戶訪問頁面之前,預 先從數據庫提取信息寫入存儲在服務器上的靜態HTML頁面。為了保證這些靜態頁面能夠及時地反映不斷變化的數據庫數據,必須有一個調度程序管理靜態頁面的 生成。
  當然,這種方案并不能夠適應所有的情形。例如,如果是從持續變化的大容量數據庫提取少量信息,這種方案是不合適的。不過可以適用該方案的場合還是很多。
為了保證能夠在合適的時間更新靜態HTML頁面,把下面的代碼加入到相應的ASP頁面前面:
隨 著Internet應用的日益廣泛,用戶的要求和期望也在不斷地發展。今天的客戶期待個性化的可定制的方案,期待這些方案不僅簡單,而且快速、可靠、成本 低廉。對于能夠適應用戶需求不斷變動的可定制頁面來說,靜態HTML已經退出了舞臺,比如內容根據客戶請求變化的頁面就是其中一例。這一切都要求系統保存 相關的數據,例如有關用戶本身以及用戶可能請求哪些信息的數據。
  緊跟這些趨勢的Web開發者已經開始提供可定制的Web網站。象搜索數據之類的任務現在可以由服務器執行而無需客戶干預。然而,這些變革也導致了一個結果,這就是許多網站都在使用大量的未經優化的數據庫調用,從而使得應用性能大打折扣。
本文來自無涯教程網:http://www.wuyapc.com
  我們可以使用以下幾種方法來解決這些問題:
?????? 1. 優化ASP代碼。
?????? 2. 優化數據庫調用。
?????? 3. 使用存儲過程。
?????? 4. 調整服務器性能。
  優秀的網站設計都會關注這些問題。然而,與靜態頁面的速度相比,任何數據庫調用都會顯著地影響Web網站的響應速度,這主要是因為在發送頁面之前必須單獨地為每個訪問網站的用戶進行數據庫調用。
   這里提出的性能優化方案正是基于以下事實:訪問靜態HTML頁面要比訪問那些內容依賴于數據庫調用的頁面要快。它的基本思想是:在用戶訪問頁面之前,預 先從數據庫提取信息寫入存儲在服務器上的靜態HTML頁面。為了保證這些靜態頁面能夠及時地反映不斷變化的數據庫數據,必須有一個調度程序管理靜態頁面的 生成。
  當然,這種方案并不能夠適應所有的情形。例如,如果是從持續變化的大容量數據庫提取少量信息,這種方案是不合適的。不過可以適用該方案的場合還是很多。
為了保證能夠在合適的時間更新靜態HTML頁面,把下面的代碼加入到相應的ASP頁面前面:
1212016.jpg
????? 每當該頁面被調用,腳本就會提取最后的更新時間并將它與當前時間比較。如果兩個時間之間的差值大于預定的數值,Update.asp腳本就會運行;否則,該ASP頁面把余下的HTML代碼發送給瀏覽器。
  最后更新時間從Application變量得到,它的第一次初始化由global.asa完成。具體的更新時間間隔應根據頁面內容的更新要求調整。
  如果每次訪問ASP頁面的時候都要提供最新的信息,或者輸出與用戶輸入密切相關,這種方法并不實用,但這種方法可以適應以固定的時間間隔更新信息的場合。
  如果數據庫內容由客戶通過適當的ASP頁面更新,要確保靜態頁面也能夠自動反映數據的變化,我們可以在ASP頁面中調用Update腳本。這樣,每當數據庫內容改變時服務器上也有了最新的靜態HTML頁面。
另一種處理頻繁變動數據的辦法是借助Microsft SQL Server 7.0的Web助手向導(Web Assistant Wizard),這個向導能夠利用Transact-SQL、存儲過程等從SQL Server數據生成標準的HTML文件。
  利用SQL Server任務,Web助手向導能夠用來定期地生成HTML頁面。正如前面概要介紹的方案, Web助手可以通過觸發子更新HTML頁面,比如在指定的時間執行更新或者在數據庫數據變化時執行更新。 本文來自無涯教程網:http://www.wuyapc.com
   SQL Server使用名為sp_makewebtask的存儲過程創建HTML頁面,它的參數是目標HTML文件的名字和待執行存儲過程的名字,查詢的輸出發 送到HTML頁面。另外,也可以選擇使用可供結果數據插入的模板文件。 從前面的代碼可以看出,當ASP頁面HtmlMain.asp需要更新時,控制以ASP文件的物理路徑為參數轉到了Update頁面。Update腳本的 任務是用新的HTML數據刷新發出調用的ASP文件,并把調度ASP代碼加入到文件的開頭。為此,Update腳本打開調度模板文件,拷貝調度ASP代 碼,然后控制轉到了另一部分腳本,這部分腳本主要任務是執行數據庫操作。Update用路徑參數以寫模式打開HtmlMain.asp文件,數據庫操作的 輸出以HTML格式寫入這個文件。
   萬一用戶訪問頁面的時候正好在執行更新,我們可以利用鎖或者其他類似的機制把頁面延遲幾秒鐘。 HtmlMain.asp(純HTML加調度ASP代碼)和main.asp(普通的ASP文件)在WAS下進行了性能測試。main.asp文件要查找 5個不同的表為頁面提取數據。為了和這兩個文件相比較,一個只訪問單個表的ASP頁面(SingleTableTest.asp)和一個純HTML文件 (PlainHtml.html)也進行了測試。    測試結果如下表所示:


文件名字

命中數

平均TTFB(ms)

平均TTLB(ms)

PlainHtml.html

8

47

474

SingleTableTest.asp

8

68.88

789.38

Main.asp

9

125.89

3759.56

HtmlMain.asp

9

149.89

1739.89


???? 其中TTFB是指Total Time to First Byte,TTLB是指Total Time to Last Byte。
   這些測試在一臺Windows NT Workstation 4.0 SP6 運行Personal Web Server的機器上實施。為了使性能指標更明顯,帶寬限制到了14.4 K。在實際環境中數值變化可能很大,但這個結果精確地反映了各個頁面在性能上的差異。
   測試結果顯示訪問單個表的ASP頁面的處理時間是 720.5ms,而純HTML文件則為427ms。Main.asp和HtmlMain.asp的輸出時間相同,但它們的處理時間分別為 3633.67ms和1590ms。也就是說,在這個測試環境下我們可以把處理速度提高43%。
如果我們要讓頁面每隔一定的訪問次數更新,比如100次,那么這第100個用戶就必須等待新的HTML頁面生成。不過,這個代價或許不算太高,其他99個用戶獲得了好處。
  靜態頁面方法并不能夠適合所有類型的頁面。例如,某些頁面在進行任何處理之前必須要有用戶輸入。但是,這種方法可以成功地應用到那些不依賴用戶輸入卻進行大量數據庫調用的頁面,而且這種情況下它將發揮出更大的效率。
  在大多數情況下,動態頁面的生成將在相當大的程度上提高網站的性能而且無需在功能上有所折衷。雖然有許多大的網站采用了這個策略來改善性能,也有許多網站完全由于進行大量沒有必要的數據庫調用而表現出很差的性能。
  Microsoft的WAS是一個功能非常豐富的服務器性能測試工具,可以幫助我們準確地判斷什么方案將適合于提升網站性能;是否某個方案(比如本文第二部分的靜態頁面方案)能夠顯著地改善性能。
  本文對WAS的介紹應當說是相當粗略和膚淺的。WAS還提供了一個對象模型,我們可以通過腳本擴展它的功能。訪問http://webtool.rte.microsoft.com/?ObjModel/default.htm可以看到一個腳本示例。這個腳本將登記Web服務器的每秒最大請求數量,自動地增加Stress Level值直到服務器處理器利用率達到90%為止。
  WAS能夠為你提供有關ASP應用和它所運行的硬件的豐富的信息。在WAS上花費一些時間,你就能夠更深入地了解你的應用的性能、穩定性、瓶頸和局限性。花費這種時間是值得的。

工具下載地址:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/960fe5c0-0667-45a4-986f-e810c528bc38/

轉載于:https://www.cnblogs.com/xiaopohou/archive/2011/09/08/2171347.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2021前端高頻面試題整理,附答案

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以加我微信 ruochuan12若川視野原意是若川的前端視野。但太長了就留下了四個字,不知道的以為關注的不是技術公眾號。今天分享一篇慕課網精英講師河畔一角的好文章~廢話不多說,…

OO第二單元作業小結

總結性博客作業 第一次作業 (1)從多線程的協同和同步控制方面,分析和總結自己三次作業的設計策略。 第一次作業為單電梯傻瓜調度,可以采用生產者——消費者模型,是一個有一個生產者(標準輸入電梯請求),一個…

dribbble加速vpn_關于Dribbble設計的幾點思考

dribbble加速vpn重點 (Top highlight)I’d like to start with the following quote from Paul Adam’s “The Dribbbilisation of Design,” a powerful read that examines the superficiality of modern product design portfolios, often containing Dribbble posts that l…

JS Compress and Decompress

<html><head><title>JavaScript字符串之壓縮與還原</title><meta http-equiv"Content-Type"content"text/html; charsetutf-8"/><script type"text/javascript"><!--/** * 壓縮 */functionCompress(strN…

尤雨溪推薦神器 ni ,能替代 npm/yarn/pnpm ?簡單好用!源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

如何了解自己的認知偏差_了解吸引力偏差

如何了解自己的認知偏差Let me introduce you the attractiveness bias theory known as cognitive bias.讓我向您介紹稱為認知偏差的吸引力偏差理論。 Think about a person with outstanding fashion. It will draw our attention, and maybe encourage us to interact with…

隱馬爾可夫模型(HMM)及Viterbi算法

HMM簡介 對于算法愛好者來說&#xff0c;隱馬爾可夫模型的大名那是如雷貫耳。那么&#xff0c;這個模型到底長什么樣&#xff1f;具體的原理又是什么呢&#xff1f;有什么具體的應用場景呢&#xff1f;本文將會解答這些疑惑。  本文將通過具體形象的例子來引入該模型&#xf…

尤大直播分享:vue3生態進展和展望

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12前言10月23日&#xff0c;參加了前端早早聊組織的【vue生態專場】&#xff0c;準備寫一波分享方便大家學習。早上有4個話題&#xff1a;volar開發&#xff0c;搭建平臺組件開發…

利用Python查看微信共同好友

思路 首先通過itchat這個微信個人號接口掃碼登錄個人微信網頁版&#xff0c;獲取可以識別好友身份的數據。這里是需要分別登錄兩人微信的&#xff0c;拿到兩人各自的好友信息存到列表中。 這樣一來&#xff0c;查共同好友就轉化成了查兩個列表中相同元素的問題。獲取到共同好友…

女生適合學ux嗎_UX設計色彩心理學,理論與可訪問性

女生適合學ux嗎Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初學者也能看懂的 Vue2 源碼中那些實用的基礎工具函數

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

清除浮動mini版

1&#xff09; 清除浮動mini版(簡約而不簡單).clr:after { content:"";display:table;clear:both;}.clr{zoom:1;} 轉載于:https://www.cnblogs.com/jinbiao/archive/2011/09/26/2191170.html

Fiddler 十分鐘最全使用介紹

Wireshark 、HTTPWatch、Fiddler的介紹 Firebug雖然可以抓包&#xff0c;但是對于分析http請求的詳細信息&#xff0c;不夠強大。模擬http請求的功能也不夠&#xff0c;且firebug常常是需要“無刷新修改”&#xff0c;如果刷新了頁面&#xff0c;所有的修改都不會保存。Wiresha…

視覺測試_視覺設計流行測驗

視覺測試重點 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何給開源項目提過 PR 呢?其實很簡單

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12源碼共讀群里有小伙伴聊到如何給開源項目提PR&#xff0c;所以今天分享這篇文章。你有給開源的庫或者框架提過 PR 嗎&#xff1f;如果沒有&#xff0c;那么今天的文章會教你怎么…

一次回母校教前端的經歷

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12已進行了三個月&#xff0c;很多小伙伴都表示收獲頗豐。分享一篇武大畢業的耀耀大佬的文章。有些時候會受限于環境影響&#xff0c;特別是在校大學生。所以要融入到積極上進的環…

設計插畫工具_5個強大的設計師插畫工具

設計插畫工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

如何才能更合理地分配項目獎金?

項目獎金通常情況下都是屬于基本工資之外的一種績效獎勵&#xff0c;也就是說&#xff0c;它在員工的薪酬中&#xff0c;是屬于浮動的那一部分收入&#xff0c;而不是一種固定收入。基于這樣一種認知&#xff0c;跟大家討論下如何才能更合理地進行項目獎金的分配&#xff1f; 首…

Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 思路&#xff1a; 樹上啟發式合并 從根節點出發到每個位置的每個字符的奇偶性記為每個位置的狀態&#xff0c;每次統計一下每個狀態的最大深度 為了保證鏈經過當前節點u&#xff0c;我們先計算每個子樹的答案…

figma下載_切換到Figma并在其中工作不必是火箭科學,這就是為什么

figma下載We have seen Elon Musk and SpaceX making Rocket Science look like a child’s play. In the same spirit, should design tools be rocket science that is too hard to master? Not at all.我們已經看到埃隆馬斯克(Elon Musk)和SpaceX使Rocket Science看起來像是…