2013-02-11 45 views
1

我有優化問題 - 我的網站使用2(相當大的)JavaScript資源:應該使用Head.js還是在</body>之前使用標記中的腳本縮小腳本?

  1. 的application.js(最小化的jQuery,jQuery的用戶界面,強調-js和一些共享的腳本,120KB總)
  2. 控制器特定的文件(頁面+交互所需的一些模塊,總共4KB)

我在視圖中有一些腳本用JavaScript格式化/轉換標記(可以同時使用jQuery和我的控制器特定的JS代碼)所以我需要等待$(document).ready或head.ready,它使w的一部分ebsite無形防止無樣式內容:(閃光燈

現在我的問題來了:我應該使用head.js它,或只是堅持「之前」的腳本?在這種情況下,有沒有什麼聰明的方法來加快頁面加載時間?

更新: 下面的代碼的一部分(見versusio.com爲完整的代碼,着陸頁):

<html> 
    <head> 
    ... usual stuff 
    <link (css stuff) /> 
    <script src="head.js"></script> 
    <script> 
     // Here some global variables are set like cache keys, actual locale code etc., not dependable on jQuery or any other JS code from the JS assets 
    </script> 
    </head> 

    <body> 
    ... page content 

    <div id="search">!-- here some code with the "display: none" style to prevent flash of unstyled content</div> 
    <script> 
     // Here is code that positions and processes some styles and adds some interactions to the #search div 
     Application.Position.In.Center($(#search), $(document)); 
    </script> 

    ... more page content 

    ... another "display: none" div and accompanying script 

    ... rest of the page content 

    <script type="text/javascript">head.js({ 'application': 'application.js' }, { 'landing': 'landing.js' });</script> 

    </body> 
</html> 
+0

我更新了示例代碼的問題並鏈接到「完整代碼」:)感謝您的建議@Mörre – user2060653 2013-02-11 09:26:03

回答

2

首先問自己這個問題:我是否真的需要這一切的JavaScript加載當用戶訪問我的網頁?

當第一次加載你的網站,你實際上只需要自動完成的功能,不需要負載休息。所以你可以去分離的方法。我的建議如下:

  • 建立此頁面沒有任何javascript功能,然後用javascript增強它,擺脫內聯樣式和腳本。
  • 完成此操作後,加載您實際需要的腳本,您可以在頭部或結束之前執行此操作。
  • 對JQuery,jquery-ui,下劃線和其他庫使用CDN。如果用戶已經從另一個網站加載這些庫,您將獲得性能獎勵。所有的
  • 最後,已經異步加載以後所需的JavaScript,因此用戶已經擁有的腳本時,他碰到比較按鈕。

小的調整:

  • 使用諸如YSlow的工具或網絡圖中你喜歡的瀏覽器,以尋找任何瓶頸。它看起來像gzipping沒有啓用,嘗試並做到這一點。
  • 你真的需要加載的Facebook /谷歌/微博/第三方的東西,在頭部或加載頁面時,可能是做什麼?
  • 服務器是否儘可能快?它看起來幾乎需要一秒鐘才能獲得HTML。

我希望我幫你一下,祝你好運,性能調整!

+0

謝謝您的回答,讓我走向了一個好方向 - 我刪除了head.js,在之前移動了腳本,添加一個自定義窗口。載入處理程序和使用CDNjs.com CDN :)現在像一個魅力:) – user2060653 2013-02-15 13:27:20

0

我認爲,把負載腳本在頁面的底部(作爲最後標籤在身體)。該JavaScript不會阻止繪圖頁面,就像現在一樣。

0

你可以把覆蓋固定樣式的頁面遮罩層,然後隱藏或銷燬它,當加載過程結束。這樣,就沒有必要隱藏在每個內容,而是將覆蓋面具格

0

看到您的頁面的查看源。

  1. 有一些內嵌腳本可以阻止渲染。像這樣的

Application.i18n = { 「攀比」:{ 「off_ratio」:

這裏更多。 http://calendar.perfplanet.com/2012/deciphering-the-critical-rendering-path/

快速方法:將它們移動到主體標籤的末尾。 最好的方法:它們應該作爲外部腳本加載 - 具有非常好的緩存標頭。 也許你是這麼做的 - 你必須根據用戶的locale加載這些消息 - 你可以在你的構建過程中爲每個語言環境創建單獨的JS文件 - 它們可以鏈接/加載爲具有良好緩存頭的外部JS文件

另一個原因,爲什麼你可能需要內聯腳本 - 注意初始加載時間。這是不必要的 - 因爲現代瀏覽器爲我們提供了性能時序。

http://www.html5rocks.com/en/tutorials/webperformance/basics/

移動它作爲外部腳本文件 - 也將有利於您的網站的安全性 - 在情況下,如果你將試圖CSP。

http://updates.html5rocks.com/2012/11/Content-Security-Policy-1-0-is-officially-awesome

  1. 推遲/異步屬性。

ga.js設置爲異步attibute - 但其他JS文件可以嘗試使用defer屬性。另外,根據一般的經驗法則,儘可能延遲加載資源,僅在需要時加載資源。

  1. window.onload - $ .ready 用$ .ready開始腳本執行始終會比window.onload更好。 ,因爲window.onload只有在所有圖像,內部iframe被加載後纔會觸發。

以下鏈接可能會有幫助。

https://developers.google.com/speed/

的漸進式JPEG後在http://calendar.perfplanet.com/2012/

http://blog.chriszacharias.com/page-weight-matters

http://www.igvita.com/2013/01/15/faster-websites-crash-course-on-web-performance/

很多進一步的優化是可能的。祝一切順利。

+0

感謝您的迴應 - 就像早先提出的人一樣,我把所有非關鍵腳本移動到頁面的結尾,但事實證明$ .ready是某種程度上超級與window.onload相比較慢,一些操作應該在$ .ready觸發之前執行(我不知道爲什麼,但它有幫助)。 – user2060653 2013-02-19 08:33:32

相關問題