Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

两种脚本加载方式的优劣对比

  加载脚本的方式基本可以分为两种。一种是创建SCRIPT标记,让文档自己去加载;另一种是通过Ajax之类的方式直接加载代码之后再eval执行。这两种功能方式各有自己的优缺点,适用的场景也不同。没有最优秀的方法,只有最合适的方法。
  加载脚本最大的问题有两个,一个是同异步,另一个是跨域
  创建SCRIPT标记来加载脚本的方式不存在跨域问题,因为加载外部脚本是允许的,但对于同异步的处理就不太容易了。在IE上有defer属性可以使用,但是它并不能让SCRIPT标记异步于文档加载,只是相当于把SCRIPT标记放到文档的末尾而已。现代浏览器支持了async属性,可以做到让SCRIPT异步于文档加载,但是在需要兼容低版本IE且异步加载SCRIPT的应用场景,使用SCRIPT标记的脚本加载方式就无法如愿。
  通过Ajax之类的方式来加载代码后eval执行就不存在同异步的问题,因为加载时这些参数通常都是可设置的。浏览器自带全兼容的通信支持就是XHR对象,也就是Ajax方式。它存在跨域的问题,虽然现代浏览器可以使用CORS来让Ajax跨域,但低版本IE对Ajax跨域问题就依然无能为力。当然我们也可以不用Ajax,现代浏览器上还支持其它通信方式,但这些要兼容好低版本浏览器就需要用到Flash之类的插件。
  除了这两大问题之外,还有一些小问题。创建SCRIPT标记来加载脚本的方式,有个最根本的问题,那就是需要创建SCRIPT标签,这需要操作文档。一旦操作文档就有可能带来副作用,比如之前提到的Chrome刷新时滚动条被重置的BUG。另一方面,使用eval执行代码会使代码变得难以调试,一些浏览器可能已经支持了eval代码的单步调试,但整体来看目前兼容的并不好。
  总之,这两种方式各有千秋,两种都可能用到,关键是要知道什么样的场景适合什么方式。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^