之前一篇《【js優化系列】從乙個計時器的寫法**js多種實現方式的優劣》的討論讓我學到不少東西,現在再來一篇,拋磚引玉。
站點的很多頁面經常需要發一些公告,而每次發公告都需要開發同學手工來操作是很麻煩的,而且經常不夠實時。因此寫了乙個通用公告系統,希望能將這份工作交由產品同學來操作。這裡只寫了「小黃條」一種形式的公告,其他形式實現方法類似。實現了可以「定時自動關閉」,「所有頁面每次開啟都顯示小黃條」,「僅在第一次開啟的頁面顯示一次」,「使用者手動關閉後不再顯示」功能。以此基本能滿足日常運營需求。
先將**和實現方式貼出,邀請大家一起**優化。
/*** 通用公告系統
* * @package pub_notice.js
* @author jessezhang * @date 2009-08-15
* @version 1.0.0
*/var lib = lib || {};
lib .pubnotice = (function()
var $ = lib ;
/*** 小黃條
*
* @access public
* @param json 小黃條屬性
*/function yellowtips(json)
yellowtips.prototype = (function()
/*** 顯示小黃條
* * @access public
*/
function show()
/*** 隱藏小黃條的介面
* * @access public
*/
function hide() , this._timeout);
} else
} /**
* 內部實現隱藏小黃條
* * @access private
*/ function _hide()
/*** showtype : 顯示方式
* 1:所有頁面每次開啟都顯示
* 2:只在第一次開啟的頁面顯示一次
* 3:使用者手動關閉後不顯示
** cookievalue : cookie儲存的狀態
* 1:已經顯示過
* 2:使用者手動關閉
*/ function _checkshowtype()
return
})()
/*** 浮出層,建設中...
* */
function floatlayer(obj){}
/*** 彈出視窗,建設中...
* */
function openwindow(obj){}
/*** 將設定的url轉化成驗證頁面位址的正規表示式
* * @access private
* @param url 設定的url
* @return 驗證頁面位址的正規表示式
*/function _regurl(url) else );
} else
return ret;
});return new regexp(regstr);
} }/**
* 判斷當前頁面的url是否符合要求
* * @access public
* @param str 設定的驗證url的字串
*/function checkurl(str),
, ] for(var i=0; i目前的實現方式是,所有頁面都在自身載入完成之後去載入這段**。**會通過頁面的url來判斷是否顯示公告,以及顯示哪幾條公告。而設定的時候有兩種方式,一種是輸入特定頁面的完全url,另一種是通過正則來匹配。在本實現中以傳入的url是否以「^」符號其起始來判斷是否當正則來處理(這種方式好壞大家可以一起**),如「^表示發布到vip.lib.com網域名稱下的所有頁面,「或者「表示僅僅發布到lib首頁乙個頁面。
這裡的**將由管理後台生成,若沒有沒有公告,則所有**為空,以節省流量。
在本例中應該有很多地方可以優化的,希望大家一起**優化。比如_regurl()這個函式的實現,我並沒有做很多的考慮,肯定有很多可以優化的地方。還有實現方式上也有很多地方值得**,比如這樣做所有頁面都多了個請求,所有頁面都會引入所有的公告內容,這樣實現是否是最好的。**是由管理後台生成的,那麼產品同學輸入內容的,在後台輸出的時候是不是需要過濾處理那些特殊字元,等等。。。還有很多其他需要周全考慮的地方。
希望大家一起來**,讓**達到最「優雅」。當然大家的**不僅僅是**上,還可以是整個公告實現的方式上的。
【本人發帖拋磚引玉,希望能夠引出更多的「玉」來,希望所寫的每一段**都能夠得到一種最「優雅」的實現方式。以後本人會丟擲更多的「磚」,希望能引來更多的「玉」,以供大家一起學習進步】
乙個不起眼的公告
非常抱歉,已經好久沒更新了。不應該這樣但確實事出有因。原因主要有 一 專案時間太緊。寫文章確實很費時間,我寫的這幾篇文章都是我自己實踐過,然後才放上來的。需要總結,需要實踐,需要思考,所以很耗精力。二 專案開發思路改變了。之前我們專案組討論的是大部分使用native組建,然後極少數變動較大的組建使用...
乙個關於js 優化的問題
在我們遍歷陣列 for 迴圈的時候,通常習慣的寫法是這樣 for var i 0 i myarray.length i 但是在這段 中,有乙個十分明顯的問題,就是每次在迴圈的時候,都會計算一邊 myarray.length 的值,這就意味著每次都要實時查詢dom,而dom的操作又是十分昂貴的。在這個...
乙個通用的makefile(一)
最近在編寫android編譯系統時,需要遍歷每乙個目錄下每乙個資料夾下的makefile,網上的方法有些繁瑣 就直接貼上自己遍歷子目錄深度為1 for temporary 之後會繼續更新 下面是我的乙個簡單例項工程 資料夾目錄層次 獲取當前目錄下的子目錄名字 2 subdir shell ls l ...