2013-02-05 37 views
5

我有一個基於Web開發的應用程序在Java中。它爲每個頁面加載了10多個js文件和15個以上的圖像和10多個css文件。CSS,JS和圖像Minnifying技術,以避免多個請求到服務器

上的瀏覽器將每個文件加載作爲一個單一的請求,所以我在尋找一個更好的解決方案,以避免多個請求的Web服務器,以提高我的網頁的性能。

+3

將所有CSS/javascript文件合併爲一個。如果您正在談論的圖像用於圖標,請查找「css圖像精靈」。 – KBN

+0

對於JS文件 - http://www.crockford.com/javascript/jsmin.html – nbrooks

+2

只是說它不明確,我認爲@xFortyFourx可能意味着一個CSS文件*和*一個JS文件 – phenomnomnominal

回答

0

附近所有的瀏覽器都有緩存機制,直到你沒有外部定義不存儲在客戶端瀏覽器的文件。一旦被下載的文件將在瀏覽器,以便下一次命中的爲同一文件將從瀏覽器緩存中返回被緩存。

所以在你的情況下,所有的文件將被下載一次,下次就不會被下載。對於第一次打擊它會很慢,但之後會變快。

0

也許看看grunt.js 你將不得不設置一個構建過程中,你可以再壓縮/醜化你的代碼,同時也使你最終只有一個.js文件拼接您的文件...

0

看看jawrgranule。這些將縮小和優化你的CSS/JavaScript。 Jawr還可以使用base64編碼將css圖像嵌入到css中,但該項目現在還沒有更新,但我一直在多個項目中成功使用它。

顆粒似乎使用Google Closure Compiler這似乎高級JavaScript優化技術。

0

我不認爲有任何現有的解決方案捆綁所有的CSS/JS /圖片到一個單一的請求,除非你願意合併CSS/JS文件分割成一個文件了。對於圖片,它仍然是多個請求。以下是您可以改善性能的方法

  1. 對於Javascript和CSS,您可以使用縮小功能縮小下載大小。我在我的一個項目中選擇了YUI,它縮小了40-50%的尺寸。我關閉了混淆功能,以便開發人員更輕鬆地調試JavaScript。縮小可以在運行時或構建時完成。我選擇了編譯時間,以減少侵入性。

  2. 利用瀏覽器的緩存,以減少對服務器的請求。但是,由於瀏覽器設置可能因客戶端而異,因此最好使用服務器端緩存相關頭來控制行爲。對於靜態文件,大多數應用程序服務器都有自己的默認設置例如,WebLogic使用FileServlet爲靜態內容(如css和javascript)提供請求,FileServlet將所有標題設置爲靜態內容。爲了更改默認頭並精確控制緩存行爲,一種方法是使用servlet過濾器來修改響應對象中的頭。

希望這些幫助。

0

這些是一定的優化技巧,你應該使用

  1. 縮減大小的JS - 您可以使用雅虎的YUI壓縮。
  2. 可以將CSS文件合併爲一個。
  3. 圖像文件 - 使用CSS精靈 - 訪問谷歌對如何運用CSS精靈的網站,以儘量減少往返於服務器

首先進行徹底的代碼審查是最重要的因素,採取repreated在JS文件中出現/未使用的代碼。

爲了進一步優化,請嘗試使用Firefox上的Firebug和Chrome上的Page Speed來測量您的JS性能。如果你喜歡IE10,那麼使用所有三種工具來判斷頁面性能

2

如果你正在用Java開發,你很可能會使用Maven。 Maven有幾個非常棒的CSS和JS縮小插件,還有用於創建css精靈的插件。我們的pom xml中的以下代碼會在我們現有的css之外創建精靈圖像,然後縮小css和js。

<plugin> 
       <groupId>net.jangaroo</groupId> 
       <artifactId>smartsprites-maven-plugin</artifactId> 
       <version>1.5</version> 
       <configuration> 
        <rootDirPath>${webappDirectory}/resources/css/sprites/</rootDirPath> 
        <outputDirPath>${webappDirectory}/resources/css/generated_sprites/</outputDirPath> 
        <cssFileSuffix>-generated-sprite</cssFileSuffix> 
        <logLevel>WARN</logLevel> 
        <spritePngDepth>AUTO</spritePngDepth> 
        <spritePngIeSix>false</spritePngIeSix> 
        <cssFileEncoding>UTF-8</cssFileEncoding> 
        <documentRootDirPath>${webappDirectory}</documentRootDirPath> 
       </configuration> 
       <executions> 
        <execution> 
         <id>createSprites</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>createSprites</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>com.samaxes.maven</groupId> 
       <artifactId>minify-maven-plugin</artifactId> 
       <version>1.6</version> 
       <executions> 
        <execution> 
         <id>minify-initial-load-css</id> 
         <phase>generate-sources</phase> 
         <configuration> 
          <charset>utf-8</charset> 
          <verbose>false</verbose> 
          <debug>true</debug> 
          <timeout>180</timeout> 
          <webappTargetDir>${targetDirectory}/resources/</webappTargetDir> 
          <cssSourceDir>/resources/css/</cssSourceDir> 
          <cssSourceIncludes> 
           <cssSourceInclude>initial_load/*.css</cssSourceInclude> 
           <cssSourceInclude>generated_sprites/*.css</cssSourceInclude> 
          </cssSourceIncludes> 
          <cssFinalFile>initial_load.css</cssFinalFile> 
         </configuration> 
         <goals> 
          <goal>minify</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>minify-internal-pages-css</id> 
         <phase>generate-sources</phase> 
         <configuration> 
          <charset>utf-8</charset> 
          <verbose>false</verbose> 
          <debug>true</debug> 
          <timeout>180</timeout> 
          <webappTargetDir>${targetDirectory}/resources/</webappTargetDir> 
          <cssSourceDir>/resources/css/</cssSourceDir> 
          <cssSourceIncludes> 
           <cssSourceInclude>internal_pages/*.css</cssSourceInclude> 
           <cssSourceInclude>generated_sprites/*.css</cssSourceInclude> 
          </cssSourceIncludes> 
          <cssFinalFile>internal_pages.css</cssFinalFile> 
         </configuration> 
         <goals> 
          <goal>minify</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>minify-initial-load-js</id> 
         <phase>generate-sources</phase> 
         <configuration> 
          <charset>utf-8</charset> 
          <verbose>false</verbose> 
          <debug>true</debug> 
          <timeout>180</timeout> 
          <jsEngine>closure</jsEngine> 
          <webappTargetDir>${targetDirectory}/resources/</webappTargetDir> 
          <jsSourceDir>/resources/js/initial_load</jsSourceDir> 
          <jsSourceIncludes> 
           <jsSourceInclude>jquery-1.7.1.min.js</jsSourceInclude> 
           <jsSourceInclude>*.js</jsSourceInclude> 
          </jsSourceIncludes> 
          <jsSourceExcludes> 
           <jsSourceExclude>*gui.nocache.js</jsSourceExclude>        
          </jsSourceExcludes> 
          <jsFinalFile>initial_load.js</jsFinalFile> 
         </configuration> 
         <goals> 
          <goal>minify</goal> 
         </goals> 
        </execution> 

祝你好運!

相關問題