Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产在线视频网址,99视频免费在线,99精品在线观看视频

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端性能優(yōu)化 - 靜態(tài)資源合并與壓縮減少HTTP請(qǐng)求

          前端性能優(yōu)化 - 靜態(tài)資源合并與壓縮減少HTTP請(qǐng)求

          于前端性能優(yōu)化方法有很多,包括:圖片合并、使用緩存、使用CDN、減少重定向、減少請(qǐng)求、壓縮等等。今天就針對(duì)減少請(qǐng)求、資源壓縮,給大家推薦一個(gè)基于.Net開發(fā)的資源合并與壓縮的開源項(xiàng)目。

          在介紹這個(gè)項(xiàng)目之前,先問(wèn)大家一個(gè)問(wèn)題,大家知道一個(gè)瀏覽器同域名請(qǐng)求的最大并發(fā)數(shù)限制是多少嗎?

          在早期的瀏覽器有的是2個(gè)、有的是4個(gè),現(xiàn)在市面主流的瀏覽器一般限制數(shù)量是6個(gè),手機(jī)一般是4個(gè)。雖然每個(gè)瀏覽器限制數(shù)量不一樣,但我們知道的是,當(dāng)一個(gè)頁(yè)面同時(shí)發(fā)起過(guò)多的請(qǐng)求,肯定會(huì)導(dǎo)致部分請(qǐng)求在等待的

          所以,我們壓縮和合并靜態(tài)資源請(qǐng)求數(shù)量,對(duì)于我們優(yōu)化性能肯定有好處的。


          項(xiàng)目簡(jiǎn)介

          這是一個(gè)基于.Net Core開發(fā)的,實(shí)現(xiàn)壓縮Css、Javascript、Html資源的壓縮、合并功能的組件。通過(guò)這個(gè)組件我們就可以實(shí)現(xiàn)靜態(tài)資源的捆綁,實(shí)現(xiàn)對(duì)js、css、less、scss等靜態(tài)資源的自動(dòng)打包捆綁處理。

          通過(guò)將多個(gè)文件合并成了一個(gè)文件,減少瀏覽器的請(qǐng)求從而實(shí)現(xiàn)提升網(wǎng)站的訪問(wèn)性能的需求。

          特點(diǎn):

          1、Js壓縮:進(jìn)行去掉空格,換行,注釋等,格式緊湊,內(nèi)部方法匿名化,節(jié)約存儲(chǔ)空間。

          2、Css壓縮:去掉空格,換行,注釋等,格式緊湊,節(jié)約存儲(chǔ)空間。

          3、Html壓縮:壓縮效果可以實(shí)現(xiàn)5-10%的壓縮,刪除助手、折疊空白、刪除可選標(biāo)記(p、li…)、刪除引用的屬性、刪除特定屬性、解碼HTML實(shí)體、壓縮內(nèi)聯(lián)樣式和腳本;支持Html5。


          技術(shù)架構(gòu)

          1、平臺(tái):基于.Net Core 4.5、Netstandard2.0開發(fā)

          2、開發(fā)工具:Visual Studio 2017


          項(xiàng)目結(jié)構(gòu)


          使用方法

          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文件合并請(qǐng)求示例

          app.UseBundling(bundles=>
          {
              bundles.LoadFromConfigFile("/bundleconfig.json", _env.ContentRootFileProvider); // 如果你需要對(duì)Bundle Minifier的配置也進(jìn)行處理
              bundles.AddCss("/main.css") // 告訴中間件需要將以下的文件最終打包成一個(gè)虛擬文件名
                  .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") // 告訴中間件需要將以下的文件最終打包成一個(gè)虛擬文件名
                    .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");
          });
          
          


          最后,對(duì)于提升網(wǎng)站性能雖然非常重要,但合并文件如果太大,也是會(huì)影響性能的。另外采用合并中間件,對(duì)于開發(fā)的時(shí)候需要編寫額外的代碼、相對(duì)于原生的寫法比較不直觀,所以在優(yōu)化性能的同時(shí),我們也要找到一個(gè)平衡點(diǎn),而不是一味的追求性能優(yōu)化。


          源碼獲取

          私信回復(fù):1070

          - End -

          推薦閱讀

          • 推薦一個(gè)簡(jiǎn)單、靈活、好看、強(qiáng)大的 .Net 圖表庫(kù)

          于測(cè)試階段的Python 3.9版本中有一個(gè)新特性:我們?cè)谑褂肞ython字典時(shí),將能夠編寫出更可讀、更緊湊的代碼啦!

          Python版本

          你現(xiàn)在使用哪種版本的Python?3.7分?3.5分?還是2.7?

          Python 3.9現(xiàn)在正處于開發(fā)的alpha階段,官方文檔中已經(jīng)提出了許多新特性!該版本已經(jīng)在5月進(jìn)入beta測(cè)試階段,穩(wěn)定版應(yīng)該在10月發(fā)布。其中的一個(gè)新功能涉及了字典,讓我們看看新的字典將會(huì)給我們帶來(lái)哪些新體驗(yàn)。

          Python字典

          字典是Python中非常獨(dú)特的數(shù)據(jù)結(jié)構(gòu)。它包含多個(gè)元素,每個(gè)元素都是一個(gè)鍵值對(duì)。例如,讓我們用兩個(gè)元素初始化字典d1。鍵“name”的值為“Tom”,而鍵“age”的值為20。

          d1={'name': 'Tom', 'age': 20}

          在這里,我們用字典d1儲(chǔ)存了年齡20歲,姓名叫Tom的資料。

          假設(shè)出于某些原因,你收集了有關(guān)Tom的更多信息,例如他的平均成績(jī)(GPA)和他的婚姻狀況。 這里,我們可以把以上資料命名為d2的字典。

          d2={'gpa': 4.0, 'is_single': True}

          你想把這兩本詞典合并在一起,因?yàn)樗鼈兌及P(guān)于同一個(gè)人Tom的不同信息。

          問(wèn)題是:如何在Python中合并兩個(gè)字典?

          在過(guò)去的版本中,我們一般會(huì)通過(guò)以下三種方法來(lái)合并字典。

          1.最笨拙的方法

          你可以使用語(yǔ)法 dict_name [key]=value 的賦值運(yùn)算符=在現(xiàn)有字典中插入新元素。

          d1={'name': 'Tom', 'age': 20}
          d1['sex']='Male'
          # d1=={'name': 'Tom', 'age': 20, 'sex': 'Male'}

          因此,在不使用任何特定于字典的方法的情況下,首先想到的方法是編寫一個(gè)for循環(huán),該循環(huán)使用iterable.items()遍歷每個(gè)鍵值對(duì),然后將該對(duì)插入到新的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}

          盡管如此,合并字典應(yīng)該是非常簡(jiǎn)單和直接的事情,應(yīng)該在一行代碼中完成。

          我們應(yīng)該能做得更好。

          2.默認(rèn)的做法

          實(shí)際上,有一個(gè)內(nèi)置方法可以將字典d1與另一個(gè)字典d2“更新”。

          dnew=d1.copy()
          dnew.update(d2)

          上述代碼存在一個(gè)缺點(diǎn),那就是.update()會(huì)就地修改字典。你需要先復(fù)制d1來(lái)創(chuàng)建一個(gè)新的字典dnew。這種“內(nèi)置”方法破壞了使用方便的內(nèi)置方法合并詞典的目的。

          我們能在一行代碼中合并嗎?可以!

          3.看起來(lái)很“整潔”的方法

          Python支持版本3.5+起的字典解壓**。 你可以通過(guò)解壓縮兩個(gè)字典中的元素來(lái)創(chuàng)建新的“合并”字典。

          dnew={**d1, **d2}

          這種解包方法成為合并python3.5+中字典的實(shí)際方法。然而,這種語(yǔ)法在你們中的一些人看來(lái)可能很難看,而且對(duì)我們大多數(shù)人來(lái)說(shuō)肯定不是直觀的。在第一次看到這行代碼時(shí),你能猜出它是什么意思嗎?

          此外,還有另一種看起來(lái)也不直觀的簡(jiǎn)單方法可以在一行中實(shí)現(xiàn)字典合并。

          dnew=dict(d1, **d2)

          Python3.9版本中干凈利落的合并方式

          Python3.9引入了一個(gè)新的clean(!)方法,使用聯(lián)合運(yùn)算符 | 合并詞典,代碼相當(dāng)整潔。

          dnew=d1 | d2
          # dnew=={'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}

          這種聯(lián)合運(yùn)算符實(shí)際上在Python中不是新的, 它可以用于“合并”兩個(gè)集合, 集合是無(wú)序且沒有索引的集合,要用花括號(hào)括起來(lái)。

          a={1, 2, 3}
          b={3, 4, 5}
          print( a | b )
          # {1, 2, 3, 4, 5}

          擴(kuò)展

          對(duì)于兩個(gè)列表或兩個(gè)值 a 和 b,a +=b 是 a=a + b 的縮寫。

          這種增強(qiáng)的賦值行為也適用于字典聯(lián)合運(yùn)算符。 這意味著 d1 |=d2 等于 d1=d1 | d2。

          注意事項(xiàng)

          集合是無(wú)序的,字典是按順序插入的(來(lái)自Python 3.6)。換句話說(shuō),字典會(huì)記住插入項(xiàng)目的順序。

          這意味著字典并集不是可交換的,d1 | d2 和 d2 | d1 將導(dǎo)致合并的詞典具有不同的項(xiàng)目順序。


          參考鏈接:https://docs.python.org/3.9/whatsnew/3.9.html


          --END--

          喜歡本文的同學(xué),記得轉(zhuǎn)發(fā)+點(diǎn)贊哈~

          也可以關(guān)注我們的公眾號(hào):為AI吶喊(weainahan)

          你在整理PDF格式的資料時(shí),常常會(huì)將多個(gè)PDF文檔合并成一個(gè),方便閱讀,但如果資料中包含PPT、Word、Excel或圖片等格式時(shí),你會(huì)如何處理呢?

          或者當(dāng)你希望在PDF文檔中添加Excel圖表或圖片文件時(shí),你又會(huì)怎么辦呢?

          其實(shí)很簡(jiǎn)單,借助福昕,你可以直接一鍵將多個(gè)不同格式的文檔合并成一個(gè)PDF文檔!快看看該如何操作吧!

          導(dǎo)入不同格式文件,一鍵完成合并

          首先打開福昕高級(jí)PDF編輯器,點(diǎn)擊工具欄“轉(zhuǎn)換”中的“合并文件”;

          點(diǎn)擊“添加文件”按鈕,將需要合并為一個(gè)PDF文檔的文件添加進(jìn)來(lái),支持PDF、Word、Excel、PPT、圖片、HTML等格式文件;

          最后點(diǎn)擊“合并”按鈕,即可一鍵將多個(gè)文檔合并為一個(gè)PDF文檔。

          支持添加、刪除、移動(dòng)文件,合并更精準(zhǔn)

          在將需要合并為一個(gè)PDF文檔的文件添加進(jìn)來(lái)后,福昕支持繼續(xù)添加文件或?qū)σ延械奈募M(jìn)行刪除、移動(dòng)或篩選。

          首先,如果你希望繼續(xù)添加文件,你可以點(diǎn)擊工具欄的“添加文件”、“添加文件夾”、“添加網(wǎng)頁(yè)”、“從掃描儀中添加PDF文件”或“從剪切板添加”,選擇文件添加進(jìn)來(lái);

          其次,你可以點(diǎn)擊單個(gè)文件中的“選擇頁(yè)面”或“選擇工作表”,對(duì)需要合并的頁(yè)面范圍及內(nèi)容進(jìn)行選擇;

          同時(shí),你也可以點(diǎn)擊左側(cè)的小三角形按鈕,展開每個(gè)文檔包含的內(nèi)容;

          最后,如果你想刪除或移動(dòng)文檔或文檔中的某些頁(yè)面,也可以直接鼠標(biāo)選中點(diǎn)擊鍵盤上的“Delete”鍵或鼠標(biāo)拖動(dòng);

          或者選中某個(gè)文檔或頁(yè)面,點(diǎn)擊工具欄的“刪除”或“上移”、“下移”按鈕即可。

          好的,以上就是本次分享的內(nèi)容啦!


          主站蜘蛛池模板: 久久精品国产免费一区| 亚洲国产精品自在线一区二区| 日本一区二区免费看| 国产亚洲福利一区二区免费看| 国产精品特级毛片一区二区三区| 精品无码一区二区三区水蜜桃| 国产福利91精品一区二区三区 | 人妻体内射精一区二区三区| 久久精品国产一区二区电影| 四虎精品亚洲一区二区三区| 国产经典一区二区三区蜜芽 | 好爽毛片一区二区三区四| 日韩免费一区二区三区| 秋霞日韩一区二区三区在线观看 | 日本一区二区三区不卡在线视频| 精品福利一区二区三区免费视频 | asmr国产一区在线| 无码欧精品亚洲日韩一区夜夜嗨| 国产精品一区二区四区| 亚洲AV香蕉一区区二区三区| 久久精品一区二区东京热| 亚洲国产精品无码第一区二区三区| 3d动漫精品啪啪一区二区中| 亚洲国产一区在线观看| 精品福利视频一区二区三区| 激情内射亚洲一区二区三区爱妻| 欧洲无码一区二区三区在线观看| 精品人妻中文av一区二区三区| 国产一区在线mmai| 日韩精品一区二区三区中文3d| 国产精品成人一区无码| 亚洲一区精品伊人久久伊人 | 一区二区三区日本电影| 国产一区二区视频免费| 无码日韩精品一区二区人妻| 国产视频一区在线观看| 亚洲一区二区无码偷拍| 秋霞鲁丝片一区二区三区| 国产一区二区精品久久岳| 亚洲国产精品自在线一区二区| 国产一区二区成人|