js或css文件合併的三種方式推薦

来源:http://www.cnblogs.com/lxhbky/archive/2016/08/16/5777059.html
-Advertisement-
Play Games

在Web項目的開發中,js,css文件會隨著項目的開發變得越來越多,越來越大,這就給給性能方面帶來一些問題,如,頁面引入的的js,css越多的話,那麼對就增加了http請求數,解決該問題的一個好的方法就是合併js,css文件. ...


源文檔 <http://www.jb51.net/article/32834.htm>

在Web項目的開發中,js,css文件會隨著項目的開發變得越來越多,越來越大,這就給給性能方面帶來一些問題;解決該問題的一個好的方法就是合併js,css文件需要瞭解的朋友可以參考下

在Web項目的開發中,js,css文件會隨著項目的開發變得越來越多,越來越大,這就給給性能方面帶來一些問題,如,頁面引入的的js,css越多的話,那麼對就增加了http請求數,解決該問題的一個好的方法就是合併js,css文件. 

下麵就簡單介紹一個方法,十分簡單.下麵介紹以合併js文件為例 

保留疑問: JS合併與JS壓縮的區別?  分別對頁面有什麼影響? 

 

(1) G.js文件 

複製代碼代碼如下:

~function(){ 

window.G={}; 

G.Method={ 

add:function(){ alert(111);} 

,sub:function(){ alert("減法");} 

}; 

}(); 

 

(2) T.js文件 

複製代碼代碼如下:

var T=(function(){ 

return { 

t1:function(){alert("t1 method!")} 

,t2:function(){alert("t2方法!")} 

,sum:function(obj){return obj.x+obj.y;} 

}; 

}()); 

 

上面列出了連個簡單的js文件,下麵就要寫一個批處理文件來合併以上文件了 

(3) 合併js,css文件的批處理方法,文件名假設命名為 debug.bat 

複製代碼代碼如下:

copy G.js+T.js GT_bin.js /b 

 

說明

(1) 輸入要合併的js文件,保存debug.bat文件,運行debug.bat即可. 

(2) 就這麼一行代碼就搞定了,十分簡單,GT_bin.js 為合併之後的文件名稱 , /b是固定參數,文件合併之後,頁面就只引用GT_bin.js就可以了,從而減少了js文件的引用,到達了減少http請求的次數,提高了網站的性能. 

(3) 合併css文件方法也是如此. 

 

下麵是合併的集中方式:

 源文檔 <http://www.jb51.net/article/84601.htm>

最近在思考前端js文件該如何合併,當然不包括不能合併文件,而是我們能合併的文件,想了想應該也只有三種方式。

三個方式如下:

1. 一個大文件,所有js合併成一個大文件,所有頁面都引用它。

2. 各個頁面大文件,各自頁面合併生成自己所需js的大文件。

3. 合併多個共用大文件,根據實踐情況合併出多個共用js文件,每個頁面引用多個共用大文件。

另外在我看來,合併有兩個目的:

1. 為了減少請求數。

2. 代碼安全考慮(文件分得越多,越容易被人看清)。

PS:註意我說的不是壓縮混淆,只是合併

1. 一個大文件

這種方式就是不管三七二十一,所有js合併成一個大文件,所有頁面都引用它,即使某些代碼可能不會用到。

優點:

(1). 合併簡單,使用也簡單。

(2). 其他頁面可利用緩存優化載入。

缺點:

(1). 頁面可能會載入到本頁面不使用的代碼。

不適用場景:

(1). 這種方式肯定不適用於大型的Web應用,且不論單文件代碼量,業務的複雜性也不允許我們這樣乾(我沒見過那個網站這樣做的)。

適用場景:

(1). Hybrid應用,無論是Mobile的Hybrid應用,還是PC的Hybrid應用(桌面應用,類似有道團隊開發框架hex+chromium +nodejs),都非常適合,本身就不會有請求速度問題,這種位於客戶端代碼的應用的代碼安全更為重要。

PS:當然最重要的還是後端的安全,無論前端是否被破解,後端是否完善輸入校驗,是否防止越權,後端才是關鍵,也就是常說一句話“不要相信用戶的任何輸入”。

2. 各個頁面大文件

各個頁面合併生成自己所需js的大文件,生成多份js合併。

優點:

(1). 每個頁面都用到最精確的js,不會有不相關代碼。

缺點:

(1). 有多少個頁面,就會生成多個js,導致存在大量共同js代碼的冗餘。

(2). 共用部分無法使用緩存優化載入。

(3). 合併和使用會相對比較複雜。

這種方式我始終覺得不對勁,小應用直接單個大文件搞定,而大應用更不會這樣去做,更不能用在Hybrid應用上,在這樣講究安裝包大小的情形下,不能容忍冗餘代碼。我在思考各種場景時候,都發現能用上面或下麵方式解決,而且是更優,所以我覺得這種方式是個雞肋。

3. 合併多個共用大文件

根據實踐情況合併多個共用大文件(例如依賴庫分類),再合併本頁面所需js文件(例如以業務分類),每個頁面引用一個或多個共用大文件和本頁面的js文件。

優點:

(1). 共用部分得到載入優化,每個頁面引用的也儘可能的做到了不冗餘。

缺點:

(1). 多多少少還是會存在某些頁面會引用到不需要的代碼,共用不並不是完完全全的共用。

適用場景:

(1). 大小型應用都比較適用,每個頁面可能存在許多共用部分,合理的分文件合併將非常關鍵。

總結

這一篇文件只是思考,也只算泛泛之談。文件合併方法挺多,由後端動態生成或工具直接生成(grunt+requirejs),合併的方式也就以上三種,也取決於我們實踐需要。

合併很重要,但不是提倡所有文件都合併起來,有不能合併的,有些單獨文件更優的,還是要看具體場景。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • Maven+springboot+阿裡大於簡訊驗證服務 糾結點:Maven庫沒有sdk,需要解決 Maven打包找不到相關類,需要解決 ps:最近好久沒有寫點東西了,項目太緊,今天來一篇 一、本文簡介 在工作當中的項目中,我遇到過這種情況,公司架構選型SpringBoot ,這是個基於Maven構建 ...
  • 一.延遲載入的概念 當Hibernate從資料庫中載入某個對象時,不載入關聯的對象,而只是生成了代理對象,獲取使用session中的load的方法(在沒有改變lazy屬性為false的情況下)獲取到的也是代理對象,所以在上面這幾種場景下就是延遲載入。 二.理解立即載入的概念 當Hibernate從數 ...
  • 問:有了springMVC,為什麼還要用servlet?有了servlet3的註解,為什麼還要使用ServletRegistrationBean註入的方式? 使用場景:在有些場景下,比如我們要使用hystrix-dashboard,這時候就需要註入HystrixMetricsStreamServle ...
  • 本節剖析Java API中的日期和時間相關類,電腦內部是如何表示時間的?Date類的含義是什麼?Calendar完成了什麼功能,能進行哪些操作?內部是如何實現的?體現了怎樣的設計模式?Date與字元串如何相互轉換?這些類有什麼不足?... ...
  • 一、MVVM模式介紹: 在網上看過很多的MVVM中各塊的介紹,感覺很混亂。找到如下的描述感覺很合理,也很好理解(https://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx)。 二、模式分析 在項目中使用這個模型,感覺有2點需要 ...
  • 作為初學者在這裡實不宜談博客,只想把自己學到的想到的總結一下,以便自己回顧知識,如能被大神無意撇到我的文章,能夠對於不足進行指導更是幸運,若給現在針對本個問題還處於迷茫的朋友帶來一絲借鑒也是開心! 盲人點燈,多多指點 ...
  • toggleClass 用來給匹配元素切換類 語法 "參考 http://www.w3schools.com/jquery/html_toggleclass.asp " 但是個人感覺應該是這樣的: 同時指定了classname和function 只有classname生效 參數說明 Paramete ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...