一些JS開發心得

來源:互聯網
上載者:User
文章目錄
  • FF7以下不支援座標平移
  • 匿名函數的問題
  • Chrome/Safari
  • 匿名JS的處理
  • 調試是否需要重新載入以及代碼格式化工具
  • 內建JS執行採樣器
  • 項目中表現出的瀏覽器效能
各個瀏覽器的差異問題Opera

HTML5提供了繪製圓弧的函數arc其定義為:

Arc(x,y,radius,startAngle,endAngle,antiClockwise)

該函數的最後一個參數表示是順時針還是逆時針繪製圓弧,在Opera下最後一個參數必須輸入,否則函數會出錯,圓弧無法繪製出來。而在IE9,FF, Chrome, Safari下最後一個參數可以不指定。

FireFoxFF7以下不支援座標平移

這個主要通過html5的isPointInPath可以發現,代碼如下

<DIV id="testDiv"><canvas id="test"width="500" height ="500"></canvas></DIV><SCRIPT>var canvasNode =document.getElementById('test');var ctx = canvasNode.getContext('2d');ctx.translate(8,8);ctx.beginPath();ctx.arc(0,0,8,0,2*Math.PI,true);ctx.closePath();ctx.stroke();alert(ctx.isPointInPath(8,8));</SCRIPT>

按照W3C的定義isPointInPath需要考慮座標平移後的情況,上面的代碼雖然繪製圓弧的函數制定圓心座標為0,0但是,之前做過了平移,所以繪製完畢後,圓心(8,8)(實際座標)應該在園內。FF6的測試結果是False, FF7以上版本解決了這個問題。

匿名函數的問題

以下是代碼片斷

destroy: function(){    console.log('args number:' +arguments.length + (arguments.length > 0?' first arg:' + arguments[0]:''));.....     this.inherited(arguments);}

arguments是函數對象的內建屬性,是參數數組。在這樣的上下文中,argumengts應該是空數組。可是在不同瀏覽器下,執行完全一樣的介面操作,我觀測到的控制台輸出分別為

FF 6:args number:1 firstarg:0args number:0args number:1 firstarg:-1Chrome:args number:0args number:0args number:0args number:0args number:0args number:0Safari:args number:0args number:0args number:0args number:0args number:0IE9日誌: args number:0 日誌: args number:0 日誌: args number:0 日誌: args number:0日誌: args number:0

可見FireFox對於匿名函數的arguments處理存在BUG,在項目中通過其他方式規避了這個問題。

Chrome/Safari

當Dom結構比較複雜的時候,以WebKit為核心的瀏覽器在處理contentable=true的DIV時存在BUG,使得該屬性失效。這個問題的解決方案為在DIV外增加一個IFRAME使得該DIV和外界Dom隔離,任你外面如何複雜,IFRAME裡面的還是很簡單的。

各瀏覽器比較

這個標題比較大,這裡只談一下調試器和瀏覽器效能

匿名JS的處理

由於項目使用了dojo,dojo的一大特點就是JS動態載入,其原理是JS執行過程中通過調用dojo.require這個API向伺服器發送http請求,獲得JS文本,再通過eval函數執行對應的js代碼。

對於這樣的文本,chrome的調試器可以直接顯示對應的檔案清單,chrome15以上版本會對這個JS的目錄做了個整理輸出。在IE下這些匿名JS全是一些編號,但是選擇這些JS文本可以顯示。在FireBug下,如果是源碼包,可以看到這些JS。如果是發布包這些JS也是一些編號,但是比較糟糕的是,JS文本看不到。Safari調試器完全感知不到這些JS。

調試是否需要重新載入以及代碼格式化工具

相比於chrome/safari。IE,Firebug要求重新載入JS。另外除了FireBug其餘瀏覽器的調試器都提供了代碼格式化工具,這樣非常方便對於混淆JS的調試。

內建JS執行採樣器

IE8、9的調試器都提供了查看器功能。在查看器簽頁,點擊開始採樣(IE8下為開始設定檔),瀏覽器開始記錄從現在開始,JS函數的執行情況。點擊結束採樣,下方的表格會出現所有執行的JS函數列表,這個功能對於一個新手定位問題非常的有協助。同時顯示的JS執行情況支援調用棧視圖,非常的棒。

 

 

匿名JS處理

調試時是否需要重新載入

調試器內的JS格式化

內建JS執行情況統計工具

Chrome

最佳,可以很清楚的顯示

不需要

支援

NA

IE8,9

一般,可以顯示文本,但不能顯示檔案名稱

需要

支援

FireFox

一般

需要

不支援

NA

Safari

差,不能顯示

不需要

支援

NA

通過以上表格,我個人感覺Chrome的調試是非常便利的,確實應了一句話“Chrome能蠶食FireFox的原因之一就是WEB開發人員越來越喜歡使用Chrome的調試器”。 IE表現中庸, Firebug比較一般。

項目中表現出的瀏覽器效能

項目中存在一個大表格,有兩百條資料,每一列都用了dojo的FilteringSelect,。所以展現這樣一個表格非常的耗時(當然,後續的設計作了最佳化)。在這樣的一個情境下,各瀏覽器的表現分別為

FireFox和Chrome/Safari在介面失去響應近25 秒後彈出了提示框------問使用者是否繼續等待。這個時候點擊確定後繼續等待,介面還是可以出來。
IE在介面失去響應近30秒後,介面還是出來了。

在Opera下介面隨著指令碼的執行不斷地變化,11秒就全部搞定,果然是最快的瀏覽器。

從上面我個人感覺FireFox和Chrome的處理方式不太好,彈出的對話方塊很容易讓人誤以為指令碼存在問題,導致瀏覽器忙;Opera是一邊渲染一邊執行,給使用者的感覺最佳。IE則是一個悶頭做事的小夥子,只要能搞定,就決不吭聲,雖然它不快:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.