一些JS开发心得
来源:互联网 发布:php专业培训 编辑:程序博客网 时间:2024/06/04 08:23
各个浏览器的差异问题
Opera
HTML5提供了绘制圆弧的函数arc其定义为:
Arc(x,y,radius,startAngle,endAngle,antiClockwise)
该函数的最后一个参数表示是顺时针还是逆时针绘制圆弧,在Opera下最后一个参数必须输入,否则函数会出错,圆弧无法绘制出来。而在IE9,FF, Chrome, Safari下最后一个参数可以不指定。
FireFox
FF7以下不支持座标平移
这个主要通过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则是一个闷头做事的小伙子,只要能搞定,就决不吭声,虽然它不快:)
- 一些JS开发心得
- js插件开发的一些感想和心得
- 一些多媒体开发心得
- 一些开发心得
- android一些开发心得
- 游戏开发的一些心得
- 最近开发 json 一些心得
- gb28181开发的一些心得
- Kotlin Android开发一些心得
- js遇到的一些小问题心得
- 最近改js学到的一些心得
- 使用D2010开发DATASNAP的一些心得。
- UDP开发相关的一些心得
- 一些开发心得与调试技巧
- Android手机开发的一些心得
- ios开发中归档的一些心得
- 微信支付开发中一些心得
- 开始记录开发中的一些心得
- SharedPreferences的使用
- win7oracle 10g安装 java.lang.Exception: Exception in sending Request :: null
- 如果你不明白爱情——短短一篇文章竟然说透了爱情的本质
- 转载:分布式设计与开发(论坛简要版,作为引子)
- Poj 3041 Asteroids
- 一些JS开发心得
- Linux设备驱动程序之中断与时钟(三)
- Resizing images with PHP(Php生成缩略图)
- J2ee各类在线api
- 20部励志电影
- Windows 7专业版安装VS2005与WinCE6.0开发环境
- 迅雷云点播服务免费体验--无需下载,无需等待
- android4.0 android2.3等下载地址 嘻嘻 希望能帮助到你们!!!!!!
- CVE-2011-4107 PoC - phpMyAdmin Local File Inclusion via XXE injection