="t18">痛陈javascript
![](/icons/45562de.gif)
缺点
也做了很长时间
![](/icons/45562de.gif)
页面了
![](/icons/45562dou.gif)
开发中最令人讨厌
![](/icons/45562de.gif)
就是Javascript代码
![](/icons/45562dou2.gif)
所以今天在这里痛陈
![](/icons/45562yi.gif)
下Javascript
![](/icons/45562de.gif)
缺点
![](/icons/45562dou2.gif)
先说
![](/icons/45562yi.gif)
些基本性
![](/icons/45562de.gif)
问题
1:兼容性低
在WWW 上有很多浏览器
![](/icons/45562dou.gif)
如Netscape Navigator,Mosaic和HotJava等
![](/icons/45562dou.gif)
但每种浏览器支持JavaScript
![](/icons/45562de.gif)
程度是不
![](/icons/45562yi.gif)
样
![](/icons/45562de.gif)
![](/icons/45562dou.gif)
支持和不完全支持JavaScript
![](/icons/45562de.gif)
浏览器在浏览
![](/icons/45562yi.gif)
个带有JavaScript脚本
![](/icons/45562de.gif)
主页时
![](/icons/45562dou.gif)
效果会有
![](/icons/45562yi.gif)
定
![](/icons/45562de.gif)
差距
![](/icons/45562dou.gif)
有时甚至会显示不出来
结果
![](/icons/45562dou.gif)
javascript
![](/icons/45562de.gif)
开发人员常常需要针对区别
![](/icons/45562de.gif)
浏览器开发区别
![](/icons/45562de.gif)
版本
![](/icons/45562dou2.gif)
无形中工作量增加
![](/icons/45562dou.gif)
而且基本上全都是重复性
![](/icons/45562de.gif)
工作
![](/icons/45562dou2.gif)
这是我们所不愿意看到
2:造成内存泄漏
JavaScript是内存管理
![](/icons/45562de.gif)
语言
![](/icons/45562dou2.gif)
这意味着JavaScript具有内置
![](/icons/45562de.gif)
信息包收集功能
![](/icons/45562dou.gif)
因此能够抽取不再有引用路径使用
![](/icons/45562de.gif)
变量并重新分配这些变量所使用
![](/icons/45562de.gif)
内存
![](/icons/45562dou2.gif)
作为基本工作原理这很好
![](/icons/45562dou.gif)
但是在模型对象和察看元素的间互相引用时
![](/icons/45562dou.gif)
由于这些循环引用
![](/icons/45562dou.gif)
你就不能依靠这个功能来实现你
![](/icons/45562de.gif)
内存使用最优化
![](/icons/45562dou2.gif)
从原则上讲
![](/icons/45562dou.gif)
对象为零
![](/icons/45562dou.gif)
则元素为零
![](/icons/45562dou.gif)
但是如果这时从元素到对象
![](/icons/45562de.gif)
向后引用
![](/icons/45562dou.gif)
那么信息包搜集器不会动这些对象
![](/icons/45562dou2.gif)
现在
![](/icons/45562dou.gif)
问题出来了:在文件对象模型中
![](/icons/45562dou.gif)
任何文件树中
![](/icons/45562de.gif)
DOM节点都可能被树中
![](/icons/45562de.gif)
其它元素引用
![](/icons/45562dou.gif)
不论其是否被其他对象所引用!因此任何在信息包收集器中经过标注
![](/icons/45562de.gif)
被DOM节点向后引用
![](/icons/45562de.gif)
对象
![](/icons/45562dou.gif)
在这
![](/icons/45562yi.gif)
方向必须为空
![](/icons/45562dou.gif)
否则其内存就会
![](/icons/45562yi.gif)
直处于已分配状态
![](/icons/45562dou2.gif)
而实际上
![](/icons/45562dou.gif)
![](/icons/45562chengxu.gif)
员常常忽视这点
![](/icons/45562dou2.gif)
这就是为什么很多大型网页游戏打开后内存嗖嗖
![](/icons/45562de.gif)
往上飚
3:对流媒体
![](/icons/45562de.gif)
支持
无
![](/icons/45562dou.gif)
只能使用内嵌其他播放器
![](/icons/45562de.gif)
思路方法
![](/icons/45562dou2.gif)
Javascript最初
![](/icons/45562de.gif)
设计目标是“让网页动起来”
![](/icons/45562dou2.gif)
这
![](/icons/45562yi.gif)
点
![](/icons/45562dou.gif)
它已经实现了
![](/icons/45562dou.gif)
而且还有
![](/icons/45562yi.gif)
些突破
![](/icons/45562dou2.gif)
但是
![](/icons/45562dou.gif)
“动起来”只是“动起来”
![](/icons/45562dou.gif)
这是不够
![](/icons/45562de.gif)
![](/icons/45562dou2.gif)
在Javascript面对Rich Application
![](/icons/45562de.gif)
时候
![](/icons/45562dou.gif)
它就有些力不从心了
![](/icons/45562dou2.gif)
现在
![](/icons/45562dou.gif)
如果要讨论javascript
![](/icons/45562de.gif)
发展
![](/icons/45562dou.gif)
不应该局限于Javascript
![](/icons/45562dou.gif)
而应该从HTML(DHTML),DOM,Javascript,CSS联合考虑
![](/icons/45562dou2.gif)
从浏览器应用
![](/icons/45562chengxu.gif)
(请原谅我发明了这个词“浏览器应用
![](/icons/45562chengxu.gif)
”)
![](/icons/45562de.gif)
角度出发