在部落格上,常常會有人分享程式碼。
但是只是直接貼上的話,程式碼的排版不但沒辦法顯示,可讀性上也會非常糟。
所以就有人使用類似SyntaxHighlighter這樣的外掛工具貼出漂漂亮亮的程式碼。
但是SyntaxHighlighter雖然好用,但也是會吃掉你的網頁速度。
那麼該怎麼辦呢?
以下提供解決跟廢話的方法。
SyntaxHighlighter是很常用的高清顯示工具,安裝的方法我就不在這裡多說了,有興趣的自己去Google。
安裝好了之後應該會覺得網頁開啟的速度有點下降,我就是這麼覺得……
我的個性這麼龜毛,當然沒辦法忍受,所以我就開始嘗試怎樣可以讓載入快一點。
其實這個方法也沒什麼大不了的,甚至我認為會一點程式的人就會想到這樣的方法(,或英文,後來才發現官網有寫......)。
所以我認為這一篇成為廢文的機率還滿高的,先為這篇文默哀一下好了。
不管怎樣,我還是來介紹一下怎麼做。
首先,為了看出差別,我們要使用網頁的測速工具。
在下用的網頁測速工具是這一個:Pingdom
將網址輸入進欄位後,按下Test Now,它會顯示出你的網頁速度。
這是我沒裝SyntaxHighlighter時候的速度
安裝SyntaxHighlighter之後的速度
找到你的SyntaxHighlighter程式碼,以我為例,大概會長這樣:
仔細看,我註解以下的地方都是屬於判別程式語言如何顯示的js檔,也就是說它們其實不是必要的檔案。
所以你可以挑選你要程式語言,這樣而要載入的檔案就會變少,也可以達到加速的目標了。
順帶一提,如果你沒有用到autoload的函式的話,你甚至可以把這行刪掉。
至於js檔對應的程式語言,你可以在官網這裡找到說明
留下你要的語言就好,以我為例,我只留下了
不過你以為這樣就結束了嗎?
當然沒有,看了官網之後才發現程式語言的檔案其實是可以動態載入的!
也就是說,你可以不用一開始就把所有的程式碼給載入進來。
而是在判斷要取用哪一個程式語言之後再行載入。
怎麼作呢? 以我為例,把程式碼改寫成如下的樣子:
在<head>之後加入
在<body>之後加入
這樣就大功告成了! 再測一遍讀取的速度吧
這個工具受到某些因素的干擾,而會有些些的誤差,基本上作參考就可以了。
不過我們還是可以看出有稍微加快了一點,真是可喜可賀、可喜可賀。
除了加速載入之外,在SyntaxHighlighter之中也是有些設定是可以更改的。
範例:
接下來是改變SyntaxHighlighter的預設顯示
有兩種方式可以控制上述的設計:
透過範例應該會比較容易暸解,有興趣的請點選範例。
另外,如果你不喜歡預設的主題樣式,官網也提供了其它的主題可以進行更換。
點擊這裡選擇你喜歡的主題。
並將下面程式碼中的shThemeDefault.css改成你選擇的主題檔案名稱。
示範:
Hope you like it!
但是只是直接貼上的話,程式碼的排版不但沒辦法顯示,可讀性上也會非常糟。
所以就有人使用類似SyntaxHighlighter這樣的外掛工具貼出漂漂亮亮的程式碼。
但是SyntaxHighlighter雖然好用,但也是會吃掉你的網頁速度。
那麼該怎麼辦呢?
以下提供解決
SyntaxHighlighter是很常用的高清顯示工具,安裝的方法我就不在這裡多說了,有興趣的自己去Google。
安裝好了之後應該會覺得網頁開啟的速度有點下降,我就是這麼覺得……
我的個性這麼龜毛,當然沒辦法忍受,所以我就開始嘗試怎樣可以讓載入快一點。
其實這個方法也沒什麼大不了的,甚至我認為會一點程式的人就會想到這樣的方法
所以我認為這一篇成為廢文的機率還滿高的,先為這篇文默哀一下好了。
不管怎樣,我還是來介紹一下怎麼做。
首先,為了看出差別,我們要使用網頁的測速工具。
在下用的網頁測速工具是這一個:Pingdom
將網址輸入進欄位後,按下Test Now,它會顯示出你的網頁速度。
這是我沒裝SyntaxHighlighter時候的速度
安裝SyntaxHighlighter之後的速度
找到你的SyntaxHighlighter程式碼,以我為例,大概會長這樣:
<!-- SyntaxHighlighter 3.0.83--> <link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link> <link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"></link> <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/> <!--程式語言.js檔--> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/> <!--呼叫函式--> <script type='text/javascript'> SyntaxHighlighter.all(); </script>SyntaxHighlighter有提供它們的網頁空間,真是佛心來著。
仔細看,我註解以下的地方都是屬於判別程式語言如何顯示的js檔,也就是說它們其實不是必要的檔案。
所以你可以挑選你要程式語言,這樣而要載入的檔案就會變少,也可以達到加速的目標了。
順帶一提,如果你沒有用到autoload的函式的話,你甚至可以把這行刪掉。
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/>
至於js檔對應的程式語言,你可以在官網這裡找到說明
留下你要的語言就好,以我為例,我只留下了
<!-- SyntaxHighlighter 3.0.83--> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/> <!--程式語言.js檔--> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/> <!--呼叫函式--> <script type='text/javascript'> SyntaxHighlighter.all(); </script>
不過你以為這樣就結束了嗎?
當然沒有,看了官網之後才發現程式語言的檔案其實是可以動態載入的!
也就是說,你可以不用一開始就把所有的程式碼給載入進來。
而是在判斷要取用哪一個程式語言之後再行載入。
怎麼作呢? 以我為例,把程式碼改寫成如下的樣子:
在<head>之後加入
<!-- SyntaxHighlighter 3.0.83--> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/>
在<body>之後加入
<script type='text/javascript'> SyntaxHighlighter.autoloader( 'cpp c http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js', 'java http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js', 'js jscript javascript http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js', 'php http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js', 'py python http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js', 'sql http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js', 'xml xhtml xslt html http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' ); SyntaxHighlighter.all(); </script>
這樣就大功告成了! 再測一遍讀取的速度吧
這個工具受到某些因素的干擾,而會有些些的誤差,基本上作參考就可以了。
不過我們還是可以看出有稍微加快了一點,真是可喜可賀、可喜可賀。
除了加速載入之外,在SyntaxHighlighter之中也是有些設定是可以更改的。
名稱 | 預設值 | 說明 |
---|---|---|
bloggerMode | false | 如果你是blogger的用戶的話,建議把這個設成true |
strings | Object | 你可以改變SyntaxHighlighter中的預設訊息,點擊這裡顯示可更改的訊息內容 |
stripBrs | false | 這個選項可以讓你忽略<br />標籤 |
tagName | "pre" | 可以使用不同的標籤 |
SyntaxHighlighter.config.bloggerMode = true; SyntaxHighlighter.all();要說我的測試結果的話,我只有試出bloggerMode跟strings而已(掩面)
接下來是改變SyntaxHighlighter的預設顯示
名稱 | 預設值 | 說明 |
---|---|---|
auto-links | true | 偵測網址,並決定是否設成超連結。設成false網址就會不能點擊 |
class-name | '' | 允許你設計自己的css樣式 |
collapse | false | 設成true的話,你可以將程式碼收納起來,點擊便會展開 |
first-link | 1 | 設定開始的行數 |
gutter | true | 是否顯示行數 |
highlight | false | 允許你在其它的程式語言中顯示html或xml的程式碼,設成ture必須要有載入shBrushXml.js。 |
smart-tabs | true | 允許你使用smart tabs功能。其實我不知道這是什麼,不過好像是偵測tab的功能吧。 |
toolbar | true | 允許你決定是否顯示工具列 |
1.直接在程式碼中設定
SyntaxHighlighter.defaults['gutter'] = false; SyntaxHighlighter.defaults['smart-tabs'] = false; ... SyntaxHighlighter.all();
2.在標籤中設定
<pre class="brush: js; ruler: true; first-line: 10; highlight: [2, 4, 6]">...</pre>
以上寫的設定,在官網中皆有範例。
透過範例應該會比較容易暸解,有興趣的請點選範例。
另外,如果你不喜歡預設的主題樣式,官網也提供了其它的主題可以進行更換。
點擊這裡選擇你喜歡的主題。
並將下面程式碼中的shThemeDefault.css改成你選擇的主題檔案名稱。
示範:
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDjango.css" rel="stylesheet" type="text/css"></link>這樣就可以了。 對於SyntaxHighlighter的說明大概就到這邊為止。
Hope you like it!
0 comments:
張貼留言