于前端性能優化方法有很多,包括:圖片合并、使用緩存、使用CDN、減少重定向、減少請求、壓縮等等。今天就針對減少請求、資源壓縮,給大家推薦一個基于.Net開發的資源合并與壓縮的開源項目。
在介紹這個項目之前,先問大家一個問題,大家知道一個瀏覽器同域名請求的最大并發數限制是多少嗎?
在早期的瀏覽器有的是2個、有的是4個,現在市面主流的瀏覽器一般限制數量是6個,手機一般是4個。雖然每個瀏覽器限制數量不一樣,但我們知道的是,當一個頁面同時發起過多的請求,肯定會導致部分請求在等待的。
所以,我們壓縮和合并靜態資源請求數量,對于我們優化性能肯定有好處的。
這是一個基于.Net Core開發的,實現壓縮Css、Javascript、Html資源的壓縮、合并功能的組件。通過這個組件我們就可以實現靜態資源的捆綁,實現對js、css、less、scss等靜態資源的自動打包捆綁處理。
通過將多個文件合并成了一個文件,減少瀏覽器的請求從而實現提升網站的訪問性能的需求。
特點:
1、Js壓縮:進行去掉空格,換行,注釋等,格式緊湊,內部方法匿名化,節約存儲空間。
2、Css壓縮:去掉空格,換行,注釋等,格式緊湊,節約存儲空間。
3、Html壓縮:壓縮效果可以實現5-10%的壓縮,刪除助手、折疊空白、刪除可選標記(p、li…)、刪除引用的屬性、刪除特定屬性、解碼HTML實體、壓縮內聯樣式和腳本;支持Html5。
1、平臺:基于.Net Core 4.5、Netstandard2.0開發
2、開發工具:Visual Studio 2017
Js文件壓縮
var result=Uglify.Js("var x=5; var y=6;");
Console.WriteLine(result.Code);
// prints: var x=5,y=6
Css文件壓縮
var result=Uglify.Css("div { color: #FFF; }");
Console.WriteLine(result.Code);
// prints: div{color:#fff}
Html文件壓縮
var result=Uglify.Html("<div> <p>This is <em> a text </em></p> </div>");
Console.WriteLine(result.Code);
//prints: <div><p>This is <em>a text</em></div>
文本解析Html
var result=Uglify.HtmlToText("<div> <p>This is <em> a text </em></p> </div>");
Console.WriteLine(result.Code);
// prints: This is a text
Js、Css文件合并請求示例
app.UseBundling(bundles=>
{
bundles.LoadFromConfigFile("/bundleconfig.json", _env.ContentRootFileProvider); // 如果你需要對Bundle Minifier的配置也進行處理
bundles.AddCss("/main.css") // 告訴中間件需要將以下的文件最終打包成一個虛擬文件名
.Include("/Content/bootstrap.min.css")
.Include("/fonts/icomoon.min.css")
.Include("/Content/jquery.paging.css")
.Include("/Content/common/reset.css")
.Include("/Content/common/loading.css")
.Include("/Content/common/style.css")
.Include("/Content/common/articlestyle.css")
.Include("/Content/common/leaderboard.css")
.Include("/Content/microtip.min.css")
.Include("/Assets/breadcrumb/style.css")
.Include("/Assets/nav/css/style.css")
.Include("/Assets/tippy/tippy.css");
bundles.AddJs("/main.js") // 告訴中間件需要將以下的文件最終打包成一個虛擬文件名
.Include("/Scripts/bootstrap.min.js")
.Include("/Scripts/bootstrap-suggest.min.js")
.Include("/Scripts/jquery.query.js")
.Include("/Scripts/jquery.paging.js")
.Include("/Scripts/ripplet.js")
.Include("/Scripts/global/scripts.js")
.Include("/Assets/tippy/tippy.js")
.Include("/Assets/newsbox/jquery.bootstrap.newsbox.js")
.Include("/Assets/tagcloud/js/tagcloud.js")
.Include("/Assets/scrolltop/js/scrolltop.js")
.Include("/Assets/nav/js/main.js");
});
最后,對于提升網站性能雖然非常重要,但合并文件如果太大,也是會影響性能的。另外采用合并中間件,對于開發的時候需要編寫額外的代碼、相對于原生的寫法比較不直觀,所以在優化性能的同時,我們也要找到一個平衡點,而不是一味的追求性能優化。
私信回復:1070
- End -
推薦閱讀
于測試階段的Python 3.9版本中有一個新特性:我們在使用Python字典時,將能夠編寫出更可讀、更緊湊的代碼啦!
你現在使用哪種版本的Python?3.7分?3.5分?還是2.7?
Python 3.9現在正處于開發的alpha階段,官方文檔中已經提出了許多新特性!該版本已經在5月進入beta測試階段,穩定版應該在10月發布。其中的一個新功能涉及了字典,讓我們看看新的字典將會給我們帶來哪些新體驗。
字典是Python中非常獨特的數據結構。它包含多個元素,每個元素都是一個鍵值對。例如,讓我們用兩個元素初始化字典d1。鍵“name”的值為“Tom”,而鍵“age”的值為20。
d1={'name': 'Tom', 'age': 20}
在這里,我們用字典d1儲存了年齡20歲,姓名叫Tom的資料。
假設出于某些原因,你收集了有關Tom的更多信息,例如他的平均成績(GPA)和他的婚姻狀況。 這里,我們可以把以上資料命名為d2的字典。
d2={'gpa': 4.0, 'is_single': True}
你想把這兩本詞典合并在一起,因為它們都包含關于同一個人Tom的不同信息。
問題是:如何在Python中合并兩個字典?
在過去的版本中,我們一般會通過以下三種方法來合并字典。
1.最笨拙的方法
你可以使用語法 dict_name [key]=value 的賦值運算符=在現有字典中插入新元素。
d1={'name': 'Tom', 'age': 20}
d1['sex']='Male'
# d1=={'name': 'Tom', 'age': 20, 'sex': 'Male'}
因此,在不使用任何特定于字典的方法的情況下,首先想到的方法是編寫一個for循環,該循環使用iterable.items()遍歷每個鍵值對,然后將該對插入到新的dictionary dnew中。
d1={'name': 'Tom', 'age': 20}
d2={'gpa': 4.0, 'is_single': True}
dnew=dict()
for key, value in d1.items():
dnew[key]=value
for key, value in d2.items():
dnew[key]=value
# dnew=={'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}
盡管如此,合并字典應該是非常簡單和直接的事情,應該在一行代碼中完成。
我們應該能做得更好。
2.默認的做法
實際上,有一個內置方法可以將字典d1與另一個字典d2“更新”。
dnew=d1.copy()
dnew.update(d2)
上述代碼存在一個缺點,那就是.update()會就地修改字典。你需要先復制d1來創建一個新的字典dnew。這種“內置”方法破壞了使用方便的內置方法合并詞典的目的。
我們能在一行代碼中合并嗎?可以!
3.看起來很“整潔”的方法
Python支持版本3.5+起的字典解壓**。 你可以通過解壓縮兩個字典中的元素來創建新的“合并”字典。
dnew={**d1, **d2}
這種解包方法成為合并python3.5+中字典的實際方法。然而,這種語法在你們中的一些人看來可能很難看,而且對我們大多數人來說肯定不是直觀的。在第一次看到這行代碼時,你能猜出它是什么意思嗎?
此外,還有另一種看起來也不直觀的簡單方法可以在一行中實現字典合并。
dnew=dict(d1, **d2)
Python3.9引入了一個新的clean(!)方法,使用聯合運算符 | 合并詞典,代碼相當整潔。
dnew=d1 | d2
# dnew=={'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}
這種聯合運算符實際上在Python中不是新的, 它可以用于“合并”兩個集合, 集合是無序且沒有索引的集合,要用花括號括起來。
a={1, 2, 3}
b={3, 4, 5}
print( a | b )
# {1, 2, 3, 4, 5}
對于兩個列表或兩個值 a 和 b,a +=b 是 a=a + b 的縮寫。
這種增強的賦值行為也適用于字典聯合運算符。 這意味著 d1 |=d2 等于 d1=d1 | d2。
集合是無序的,字典是按順序插入的(來自Python 3.6)。換句話說,字典會記住插入項目的順序。
這意味著字典并集不是可交換的,d1 | d2 和 d2 | d1 將導致合并的詞典具有不同的項目順序。
參考鏈接:https://docs.python.org/3.9/whatsnew/3.9.html
--END--
喜歡本文的同學,記得轉發+點贊哈~
也可以關注我們的公眾號:為AI吶喊(weainahan)
你在整理PDF格式的資料時,常常會將多個PDF文檔合并成一個,方便閱讀,但如果資料中包含PPT、Word、Excel或圖片等格式時,你會如何處理呢?
或者當你希望在PDF文檔中添加Excel圖表或圖片文件時,你又會怎么辦呢?
其實很簡單,借助福昕,你可以直接一鍵將多個不同格式的文檔合并成一個PDF文檔!快看看該如何操作吧!
導入不同格式文件,一鍵完成合并
首先打開福昕高級PDF編輯器,點擊工具欄“轉換”中的“合并文件”;
點擊“添加文件”按鈕,將需要合并為一個PDF文檔的文件添加進來,支持PDF、Word、Excel、PPT、圖片、HTML等格式文件;
最后點擊“合并”按鈕,即可一鍵將多個文檔合并為一個PDF文檔。
支持添加、刪除、移動文件,合并更精準
在將需要合并為一個PDF文檔的文件添加進來后,福昕支持繼續添加文件或對已有的文件進行刪除、移動或篩選。
首先,如果你希望繼續添加文件,你可以點擊工具欄的“添加文件”、“添加文件夾”、“添加網頁”、“從掃描儀中添加PDF文件”或“從剪切板添加”,選擇文件添加進來;
其次,你可以點擊單個文件中的“選擇頁面”或“選擇工作表”,對需要合并的頁面范圍及內容進行選擇;
同時,你也可以點擊左側的小三角形按鈕,展開每個文檔包含的內容;
最后,如果你想刪除或移動文檔或文檔中的某些頁面,也可以直接鼠標選中點擊鍵盤上的“Delete”鍵或鼠標拖動;
或者選中某個文檔或頁面,點擊工具欄的“刪除”或“上移”、“下移”按鈕即可。
好的,以上就是本次分享的內容啦!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。