我有一個基於Web開發的應用程序在Java中。它爲每個頁面加載了10多個js文件和15個以上的圖像和10多個css文件。CSS,JS和圖像Minnifying技術,以避免多個請求到服務器
上的瀏覽器將每個文件加載作爲一個單一的請求,所以我在尋找一個更好的解決方案,以避免多個請求的Web服務器,以提高我的網頁的性能。
我有一個基於Web開發的應用程序在Java中。它爲每個頁面加載了10多個js文件和15個以上的圖像和10多個css文件。CSS,JS和圖像Minnifying技術,以避免多個請求到服務器
上的瀏覽器將每個文件加載作爲一個單一的請求,所以我在尋找一個更好的解決方案,以避免多個請求的Web服務器,以提高我的網頁的性能。
附近所有的瀏覽器都有緩存機制,直到你沒有外部定義不存儲在客戶端瀏覽器的文件。一旦被下載的文件將在瀏覽器,以便下一次命中的爲同一文件將從瀏覽器緩存中返回被緩存。
所以在你的情況下,所有的文件將被下載一次,下次就不會被下載。對於第一次打擊它會很慢,但之後會變快。
也許看看grunt.js 你將不得不設置一個構建過程中,你可以再壓縮/醜化你的代碼,同時也使你最終只有一個.js文件拼接您的文件...
看看jawr或granule。這些將縮小和優化你的CSS/JavaScript。 Jawr還可以使用base64編碼將css圖像嵌入到css中,但該項目現在還沒有更新,但我一直在多個項目中成功使用它。
顆粒似乎使用Google Closure Compiler這似乎高級JavaScript優化技術。
我不認爲有任何現有的解決方案捆綁所有的CSS/JS /圖片到一個單一的請求,除非你願意合併CSS/JS文件分割成一個文件了。對於圖片,它仍然是多個請求。以下是您可以改善性能的方法
對於Javascript和CSS,您可以使用縮小功能縮小下載大小。我在我的一個項目中選擇了YUI,它縮小了40-50%的尺寸。我關閉了混淆功能,以便開發人員更輕鬆地調試JavaScript。縮小可以在運行時或構建時完成。我選擇了編譯時間,以減少侵入性。
利用瀏覽器的緩存,以減少對服務器的請求。但是,由於瀏覽器設置可能因客戶端而異,因此最好使用服務器端緩存相關頭來控制行爲。對於靜態文件,大多數應用程序服務器都有自己的默認設置例如,WebLogic使用FileServlet爲靜態內容(如css和javascript)提供請求,FileServlet將所有標題設置爲靜態內容。爲了更改默認頭並精確控制緩存行爲,一種方法是使用servlet過濾器來修改響應對象中的頭。
希望這些幫助。
這些是一定的優化技巧,你應該使用
首先進行徹底的代碼審查是最重要的因素,採取repreated在JS文件中出現/未使用的代碼。
爲了進一步優化,請嘗試使用Firefox上的Firebug和Chrome上的Page Speed來測量您的JS性能。如果你喜歡IE10,那麼使用所有三種工具來判斷頁面性能
如果你正在用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>
祝你好運!
將所有CSS/javascript文件合併爲一個。如果您正在談論的圖像用於圖標,請查找「css圖像精靈」。 – KBN
對於JS文件 - http://www.crockford.com/javascript/jsmin.html – nbrooks
只是說它不明確,我認爲@xFortyFourx可能意味着一個CSS文件*和*一個JS文件 – phenomnomnominal