這來源於一個非常現實的效能測試需求。要知道IE(除了剛誕生的IE9),其他出名的瀏覽器都支援JIT技術來提高代碼的執行能力,那麼我們進行效能測試時,通常會對某個函數的幾個實現迴圈執行10000次來評估其優劣。但10000次有時對IE來說太多了,幾乎不可能的計算量就把它down掉了,對於一些舊點的標準瀏覽器也是如此,因此這個迴圈次數不能死定為一個數量級。這個量化標準我就規定為瀏覽器是否支援JIT,是就讓它迴圈數多一點,不是就少一點。不過怎麼判定它是否支援呢?雖然過度最佳化,可能會帶來一些神奇的bug,但它們也很快會被瀏覽器修正掉。唯一的辦法就是到它們的官網查看它們是在哪個版本加入這支援了。
(function(){ //by 司徒正美 http://www.cnblogs.com/rubylouvre/ this.dom = {}; var ver =parseFloat(((/(?:rv\:|ari\/|sto\/)(\d+\.\d+(\.\d+)?)/. exec(navigator.userAgent) || [,0])[1]).toString().replace(/[^\d\.]/g, ""). replace(/^(\d+\.\d+)(\.(\d+))?$/,"$1$3")); dom.jit = document.documentMode === 9 ||// IE 9+ this.crypto && ver > 1.9 ||// firefox 3.5+(1.91) this.opera && this.opera.version()*1 >= 10.5 ||// opera10.50+ navigator.vendor && ver >= 528 || !1 // safari 4+, chrome 2+ })();
<br /> (function(){<br /> //by 司徒正美 http://www.cnblogs.com/rubylouvre/<br /> this.dom = {};<br /> var ver =parseFloat(((/(?:rv\:|ari\/|sto\/)(\d+\.\d+(\.\d+)?)/.<br /> exec(navigator.userAgent) || [,0])[1]).toString().replace(/[^\d\.]/g, "").<br /> replace(/^(\d+\.\d+)(\.(\d+))?$/,"$1$3"));<br /> dom.jit = document.documentMode === 9 ||// IE 9+<br /> this.crypto && ver > 1.9 ||// firefox 3.5+(1.91)<br /> this.opera && this.opera.version()*1 >= 10.5 ||// opera10.50+<br /> navigator.vendor && ver >= 528 || !1 // safari 4+, chrome 2+</p><p> })()<br /> alert(dom.jit)<br />
運行代碼