閱讀223 返回首頁    go 阿裏雲 go 技術社區[雲棲]


magento -- 為Magento提速再做一點小努力之移除不需要的JS

Magento的速度一直是個讓人頭疼的問題,加大硬件投入是效果最明顯的,當然程序層麵還是要努力的優化。常見的優化方式就不多說了,不外乎開啟gzip,關閉不需要的模塊,裝php加速器等等,網上有一篇已經被轉載了無數遍的文章專門有講到。今天講到的是一些小手段,有多少效果還未知,不過至少不會變慢。

有些人可能會注意到,新安裝的Magento項目,本身頁麵就載入了很多外置JS,這裏以1.4.1.0為例,通過Firebug可以看到,在沒有修改任何文件和添加任何數據的情況下,Magento首頁就要載入13個外置JS,總計300K出頭(不算Gzip壓縮),可是Magento真的需要那麼多JS嗎,就算需要,那退一步講,首頁能用到的JS能有幾個。首頁的載入速度是網站速度中很重要的一環,一方麵是因為這是用戶看到的第一個頁麵,另一方麵訪問其他頁麵時,瀏覽器可以大量使用已經從首頁讀來的數據緩存,而不必重新完全載入,所以會比訪問首頁快得多。

 

所以我的方式就是想辦法在首頁去掉那些首頁用不到的外置JS,減少請求數。經過不完全測試,針對我自己在做的項目,slider.js,dragdrop.js,builder.js和ccard.js對首頁是無效的,移除後沒有任何影響,同時據估計,如果首頁用不到表單驗證,validation.js應該也是沒有用的(這個是大頭,有34KB)。我並沒有測試所有的JS,而且不同的項目有不同的首頁,可能需求的JS也不同,隻是提供一種思路,對頁麵無用的JS是沒必要載入的。

如何隻在首頁不載入某些特定的JS,這裏提供一種方式。我們知道,通用的JS文件是在layout目錄下的page.xml中載入的,載入的方式如下

<block type="page/html_head" name="head" as="head"> <action method="addJs"><mce:script type="text/javascript"><!-- prototype/prototype.js // --></mce:script></action> <action method="addJs" ifconfig="dev/js/deprecation"><mce:script type="text/javascript"><!-- prototype/deprecation.js // --></mce:script></action> <action method="addJs"><mce:script type="text/javascript"><!-- lib/ccard.js // --></mce:script></action> ………………………………………………………………………… 

在head這個block中用<action method="addJs">的方式載入外部的JS文件,相對應的,我們同樣可以用寫xml的方式移除這些JS文件,方法如下

<reference name="head"> <action method="removeItem"><type>js</type><name>scriptaculous/builder.js</name></action> <action method="removeItem"><type>js</type><name>scriptaculous/dragdrop.js</name></action> ………………………………………………………………………………………… 

因為隻是在首頁移除這些JS,其他頁麵還是要用的,所以把這段xml寫在後台首頁的CMS裏。點擊進入後台首頁的CMS,點擊左邊的Design,把移除JS的代碼寫在Layout Update XML裏麵,保存後就可以看到效果,首頁已經不會再載入你移除掉的JS,而其它頁麵依然存在。

 

同樣的方式除了首頁其他頁麵也可以使用,如果有足夠的耐心的話,至少內容少了,訪問速度總是會有所提升,不管效果明不明顯。

 

PS:類似的思路我之前發過一篇文章,因為Magento的核心庫prototype.js有127KB之巨,而絕大多數人應該是不會去動核心庫的代碼的,所以可以把prototype.js壓縮,然後替換掉原來的,類似於jquery會提供一個jquery.min.js。

https://blog.csdn.net/shuishui8310/archive/2010/03/28/5422257.aspx

最後更新:2017-04-02 06:51:26

  上一篇:go magento -- web services API 初體驗
  下一篇:go CreateThread,_beginthread,_beginthreadx的區別