2007/02/12

版面 Script 更新‧Ⅳ

我得承認本網誌幾乎跟 ACG 沒有關係了 XD
雖然我很想寫點什麼,不過你知道的,嗯,寫點技術文章似乎比較爽,
而且遊戲我也玩不多、動畫、漫畫、小說也看不多,音樂是有在聽不過也很少量。
所以呢...哈哈 (裝傻)

不多說,最近發現 Google Pages 載入速度慢的跟什麼一樣,本來想說連日本比較遠,
把原本放 Cool 的一些東西丟到 Google Pages 上以加快速度 (美國 + 即時 Gzip 壓縮傳輸)
結果沒想到光 Ping 就慢很多,尤其現在版面可說是中量使用 JavaScript (哪天會變成大量呢?)
光基本載入的函式庫就有主函式庫、Trip生成函式庫 (DES編碼)和 XMLHttpRequest 函式庫。
最近又加上 dp.SyntaxHighlighter,這樣就算了。它還需要其他 Brush檔案 (ex: shBrushPhp.js)
萬一需要標亮的程式語言繁多,就不得不每個都載入。
假如版面剛好只用一兩個時,那又怎麼辦?每次都全部載入豈不耗時又耗頻寬?

於是首要之務先輕量化 Trip生成函式庫,原始檔案從日本網站弄下來的,
把它改成能通過 JSLint 檢測,再以 JSMin 壓縮,果然小多了。

再者修改 dp.SyntaxHighlighter,我打算讓它以動態需求載入的方式來運作。
首先會先查看各個 <textarea> 是否為目標,然後再取出其 class 值來判斷需要載入類型。
節錄自 mainscript.js:


以 e.getAttribute('name') 或是 e.name 來判斷是否為需要自動標亮的欄位,
而以 e.className 來取得 class 設定 (如 php, c++, js)。
這邊有一個怪處,單純用 e.getAttribute('class') 看來似乎可以達成,事實上 IE 會失敗。
IE有自己的一套 e.getAttribute('className')。這個地方讓我除錯除了好幾小時找不出原因。
這邊使用 W3C DOM 節點都有的 className 屬性直接取來判斷,是各個瀏覽器都支援的手段。
取出屬性後我拿去和建立好的別名資料庫陣列作比對,例如 alias['Cpp'] = ['cpp', 'c', 'c++'],
如果我取出 c++ 一值,那我就知道得去載入 Cpp 這個刷子 (shBrushCpp.js),而後續就不必再載入,
所以刪除這個別名資料庫 (用 delete 關鍵字)

後續的動態載入需要利用 DOM 的 document.createElement 方法,
動態建立 script 標籤並載入我們需要的函式,程式碼一樣節錄如下:


產生了一個 sc 物件後,設定好相關參數,就把它附加到 <HEAD> 標籤之下,
這個是 DOM 的節點觀念,可以多利用 Mozilla Firefox 的 DOM 觀察器 來看看。
最後一個 Interval 又是怎麼一回事?因為我不知道這些標籤產生之後,是否已經讀取完畢,
只好設定一個計時器定期查看載入狀況,等全部都準備好再執行標亮步驟。



我使用判斷 dp.sh.Brushes[XXX] 是否為函數的方法來確認,如果 dp.sh.Brushes['Php'] 為函數,
我就知道它必定載入完畢可供我使用了,而當確認載入完畢便將其自載入列表中移除。
這個列表是剛才用來以迴圈逐個載入的,這邊只是再做一次利用,以刪減方式標記哪些已載完。
沒意外的話最後只會剩 Core 一項,這一個是特別的存在 (核心)。
故把陣列串起來之後如果為 'Core' 便表示其他函式庫皆已載入完畢,刪除計時器,執行標亮吧!

至於判斷途中使用 try 的原因是因為你不能保證 shCore.js 會優先載入完畢,
如果他沒有載入完畢,後面的刷子是無法掛載的,便會產生 dp 變數未定義錯誤警告。
於是使用 try 無視錯誤,反正一定會有載入好的一天 (檔案確實在的話)。
當真正載入完成了,其他刷子檔便可以正確掛載,也就能從載入列表中刪除了。
假設所有刷子檔皆已載入完成,唯獨 shCore.js 因為某些因素尚未載入完成 (前提是確實存在)
因為有 try 加持,即使 dp.sh.Brushes[XXX] 確實存在,但因為 dp 未定義錯誤,便不會去執行刪除而略過。

至此完成動態載入的工程。

5 則留言:

  1. 我相信應該也有很多人想對此點發問,
    所以就當作是代表那些人來發問好了......

    你們有什麼計畫改善板上的風氣與加強巡邏嗎?
    我也是最近才在經常繞板子,不過認為沒有發生重大暴動是個奇蹟......
    不知道你有什麼想法?^^a

    回覆刪除
  2. 我不能代表站方立場,所以單就我個人觀點來回答。
    哈,這也不是正式的回答,正確說來是回應而已。

    我的觀點:「沒亂不管,亂了就砍」。

    大家都知道人多的地方亂源就跟著來,沒什麼。
    假如會亂的人占所有使用者的 1%,一次 1000 人豈不就有10人?10 人鬧其他 990 人也會受影響的。
    不管是什麼地區都逃脫不了這種統計值才對。(人就是那些在流動)
    我不是什麼當權者,才不會去管太多,但是一旦違反主要綱領(版規),二話不說當然處理。
    除此之外版眾偶爾因理念不合而吵也是常態,充滿不同意見不是很好嗎?
    匿名制帶來的其中一樣特色就是大家敢說話,不會因為名字而綁手綁腳。

    至於版面成什麼樣子,最重要的應該是群眾自己自治的力量,Web 2.0嘛。
    2006年風雲人物「You」就是維持這個奇妙機制的力量。
    大家都有共識之下,版上自然會有一定走向 (當然是呈可接受區間 ± 走動)

    定期的觀看當然是少不了的,我本身也是使用者,當然會因為本身想看而看。
    至於計畫什麼的,除了技術上的計畫 (版面程式碼、主機運作) 之外,並沒有其他的。

    回覆刪除
  3. 我認為現狀來說,還算可以,但有可能面臨失控的危險。
    有些不好的現象為:
    1. 反應時間 - 有人檢舉,接近一天才有人處理
    2. 廚戰 - 防廚當然沒有什麼對策,可是叫廚等行為也只是激發青少年們不必要的情緒並且增加戰亂危險
    3. 沒有文章規範 - 我是相信言論自由的人,但是如人身傷害、威脅、挑動語言、族群歧視、暴力、髒話 (使用諧音字隱藏)是不應該在任何情況出現的。不管是日本鬼子都該死 (可以改成日本人仍然不對南京大屠殺道歉?)或「廚國」人不要來這裡 (可以改成許多中國網友們的網路素質不符合本板之風氣),這些在現代文明社會上,都不應該呈現在他人眼前。

    我認為問題不是技術層面的。
    很好笑的是,幾天前才跟網友在MSN聊到這件事,然後對方就提到他們太注重於程式設計觀點了......^_^b

    我認為只要回到基本面,就可以解決這些問題。
    例如增加板主數量,一個板從一人巡邏到兩人巡邏,反應時間有可能減少至一半。
    我認為站上流量多並不是壞事,因為肯定有很多人願意出來幫忙管理。

    安全上,我推薦雜湊數 (Hash)系統,如MD5、SHA等,因為密碼太容易被破解了。
    給新人五道問題,像你就讀的國小名字為?或你出身的地名為?等,而系統只保留題目編號跟其雜湊數數值。
    需要登入時,則詢問板主名稱,跟任意挑選兩項題目作答。
    這樣子,除了本人以外,沒有人知道暗號是什麼。
    即使知道雜湊數數值,目前也幾乎無法反運算算出。

    另一個方法就是將每位管理的板數量增加至兩位以上。
    也就是說多重人員互相照料。
    當然負擔是加倍的,但是短期內應該能避免廚戰擴大並且有刪除整個討論串的能力。

    現在糟糕島釣魚的風聲傳的相當遙遠了,
    希望能至少考慮如何改善治安問題。

    回覆刪除
  4. >> 1. 反應時間
    每個版有每個版自己的走向,不過有很多版是一個人同時管的。
    這時候效率問題就會發生在他們上面,而他們也不是全職管理員,
    當然有自己的工作,只能偷閒上來查看。
    目前看似比較有危機的版面,大概就是那種。

    >>2. & 3.
    這個完全是自由心證,蓄意挑撥和無關本版面文章的規範是很大的。
    當然要看管理員自己的方針,有的就很寬有的就很嚴。
    ---
    至於在這邊得到的結果是關於技術層向,那當然。
    我是 Pixmicat! 貼圖版開發專案的領導人,自然會以技術觀點對待,
    當初不是我自願接"漫畫",而是當初"漫畫"的 NTj 離去並推薦我才這樣的。
    當初我只是在 2cat/Komica 有一個 GazouBBS雙葉改 scribe FIXED 的修改計畫版面而已。
    這與其他管理者無關。而目前漫畫版面也是以測試 Pixmicat! 穩定性為優先的版面。
    (看似好像本末倒置? 反正事實就是這樣)

    管理版面的對策已經有許多想法被提出過了,諸如新增巡邏人員也都有採納。
    我以前也曾經試過利用「You」之力的公民管理制度,但在還沒被廣泛接受前還不適用。
    還有因為每個管理員方針不同,有的喜歡自己來,有的則是希望大家共同管理。
    但無論如何身為主管理員的責任是一定要做到的,別攤子丟給人就什麼也不管,
    然後以事務繁重沒時間作為藉口。

    安全?你指的是後端登入吧,確實太容易了。我會列為待修正項目。
    如果是一般的刪除密碼和 2ch トリップ,目前是沒有什麼疑慮 (MD5 / 標準DES+取斷字元)

    至於你提到的一些方針和看法,我會試著讓其他管理群看到,感謝。
    ---
    再次強調這都是我個人觀點,非站方立場或公開聲明。

    回覆刪除
  5. 沒事的,只是提一些意見。
    我也知道管....「人」....是很痛苦的一件事。
    不管是在網路上,還是在圖書館的工作上。
    接下音樂板的工作,仍然是我心中有些後悔的事。

    選在這裡發問是因為.....
    現實生活已經夠忙了,
    我不想被拉入K島的管理群中!XD

    回覆刪除