`
jindw
  • 浏览: 509821 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

脚本装载时一个似乎应该有所重视的问题。

阅读更多
今天无意间打开了一个CSDN上的个人blog,发现窗口无法拖动,Firefox的标签页也无法切换。

查看代码:
<script type="text/javascript">Include("Csdn.Blog.UserOnline");</script>
<script type="text/javascript">Include("Csdn.Blog.ShowmeDataDeal");</script>

看到Include函数,马上可以想到,它很可能使用了动态包含脚本的设计。
//http://blog.csdn.net/scripts/jsframework.js
window.Include=function(namespace, path)
{
  .....
};
S.load=function(namespace, path)
{
  ......
}


仔细阅读这两个函数代码,发现它是通过XMLHttpRequest对象同步装载脚本资源的(对IE,它采用userdata缓存优化)。而这必将导致一种完全阻塞问题(这种问题我在仍外一篇blog上描述过:http://jindw.iteye.com/blog/66702)。

说到阻塞问题,我想大家可能会以为只是一种下载延迟,其实不然。
下载延迟不是完全阻塞,浏览器依然可以响应用户事件。而同步XHR请求阻塞是一种完全的阻塞。
浏览器在脚本运行与事件响应共用同一个线程(我的猜测)。任何脚本尚在运行时(包括被同步XHR请求阻塞的时间),浏览器将无法响应任何用户事件(无法拖放窗口、切换标签、重画页面等等,就像程序死了一样)。与普通的下载延迟造成的阻塞,感觉明显不同。

我对这个问题可以说深有体会,起初,在构建JSI1的项目站点时。因为网站放在sourceforge上,访问数度不是一般的慢,几个简单的例子,浏览器就要完全阻塞好几妙钟。正是厌恶这种完全阻塞的现象,我才开发了JSI2。

事实上,现在的一堆堆js框架中,采用XHR同步装载资源的有不少,JSVM、dojo、a9engine、hax的pies;其中JSVM,dojo都提供打包工具,将可能装载的脚本打包到启动文件中,所以也可以避免XHR同步请求。不过这样也就失去了部分动态装载的意义了。

总之,我非常讨厌这种完全阻塞现象,认为这个严重影响用户体验。
可能也有些主观因素把,希望听听大家的看法。
分享到:
评论
10 楼 ueseu 2007-08-27  
引用
啊,说了半天,你是说不关心这个问题啊:(

一般互联网项目关心这个, 企业项目不关心
9 楼 sorphi 2007-08-14  
jindw 写道
jianfeng008cn 写道
发挥css+html的威力  和提供更好的机制来配合浏览器 应该双管齐下,我认为重点还是在前面部分,所以我很欣赏ext。


偏题了吧:)
我在这里想说的只是一种xhr同步请求导致的浏览器短时间停止响应的问题。

这个问题经常是很容易忽视的,因为我们本地测试的时候,根本发现不了问题;本地测试不必考虑网络传输的时间,所以,阻塞的时间基本察觉不到,但是,当网络不够快的时候,这种问题就很让人头疼了。

这个链接体验一下:http://jsintegration.sourceforge.net/example/code-block.html


刚体验过,最后只能在任务管理器中杀死浏览器。

再次打开浏览器就好一些了。不过虽然响应码全是304,仍然有点停顿的感觉。

很喜欢JSI这种做法。不过我太懒了,现在还是采用引入full.js,web服务器设置expired和gzip优化一下。JSI对我这个门外汉的吸引力还是让不同JS类库和平共处这个亮点。
8 楼 jindw 2007-08-13  
jianfeng008cn 写道
。。。。
观点很明确啊,就是开发人员不管这个问题,留个你们来研究了 呵呵


啊,说了半天,你是说不关心这个问题啊:(
7 楼 jianfeng008cn 2007-08-13  
jindw 写道
jianfeng008cn 写道
发挥css+html的威力  和提供更好的机制来配合浏览器 应该双管齐下,我认为重点还是在前面部分,所以我很欣赏ext。


偏题了吧:)
我在这里想说的只是一种xhr同步请求导致的浏览器短时间停止响应的问题。

这个问题经常是很容易忽视的,因为我们本地测试的时候,根本发现不了问题;本地测试不必考虑网络传输的时间,所以,阻塞的时间基本察觉不到,但是,当网络不够快的时候,这种问题就很让人头疼了。

这个链接体验一下:http://jsintegration.sourceforge.net/example/code-block.html


观点很明确啊,就是开发人员不管这个问题,留个你们来研究了 呵呵
6 楼 weiqingfei 2007-08-13  
jindw 写道


weiqingfei 写道
原来如此,我每次都是冒着浏览器崩溃的风险去打开csdn的.

以前用ie的时候访问csdn也老是浏览器崩溃,我想那应该是别的原因吧。

同步xhr请求导致浏览器短时间停止响应,虽然很让人讨厌,不过我没找到任何证据说明它将导致浏览器崩溃。


我说的崩溃,其实就是指的浏览器僵死,不管是IE还是firefox,一个标签僵死,其它标签都动不得,20秒钟是我的心里极限,如果还是不能操作,我就认为浏览器已经down了。
5 楼 jindw 2007-08-13  
jianfeng008cn 写道
发挥css+html的威力  和提供更好的机制来配合浏览器 应该双管齐下,我认为重点还是在前面部分,所以我很欣赏ext。


偏题了吧:)
我在这里想说的只是一种xhr同步请求导致的浏览器短时间停止响应的问题。

这个问题经常是很容易忽视的,因为我们本地测试的时候,根本发现不了问题;本地测试不必考虑网络传输的时间,所以,阻塞的时间基本察觉不到,但是,当网络不够快的时候,这种问题就很让人头疼了。

这个链接体验一下:http://jsintegration.sourceforge.net/example/code-block.html
4 楼 jindw 2007-08-13  
i_love_sc 写道
csdn浏览器杀手。
最新版本的yui也提供了loader,不过它好像是通过动态加<script/>标签来实现的。
东西太多,看起来好累。搂主如果感兴趣的话,可以去研究下。

yui-ext倒是准备研究一下:)
忙着找工作,推后推后。

weiqingfei 写道
原来如此,我每次都是冒着浏览器崩溃的风险去打开csdn的.

以前用ie的时候访问csdn也老是浏览器崩溃,我想那应该是别的原因吧。

同步xhr请求导致浏览器短时间停止响应,虽然很让人讨厌,不过我没找到任何证据说明它将导致浏览器崩溃。
3 楼 jianfeng008cn 2007-08-12  
发挥css+html的威力  和提供更好的机制来配合浏览器 应该双管齐下,我认为重点还是在前面部分,所以我很欣赏ext。
2 楼 weiqingfei 2007-08-12  
原来如此,我每次都是冒着浏览器崩溃的风险去打开csdn的.
1 楼 i_love_sc 2007-08-12  
csdn浏览器杀手。
最新版本的yui也提供了loader,不过它好像是通过动态加<script/>标签来实现的。
东西太多,看起来好累。搂主如果感兴趣的话,可以去研究下。

相关推荐

    自动下一集脚本js插件免费最新版

    自动下一集脚本js插件是由作者唐Reagen分享的一个浏览器扩展插件。本脚本应用到应用到 superchutou.com,可以自动下一个视频。需要的朋友们,赶紧来下载吧! 什么是脚本? 脚本是批处理文件的延伸,是一种纯文本...

    bat脚本技巧一键批量替换文件名,bat脚本知识小技巧小妙招

    今天,我分享一个一键批量替换文件名的bat脚本给大家,因为我自己有这样的需求,所有从新写了一个bat脚本,顺便分享给大家,上期我们分享了批量改名,但是我在实际中遇到了这样的问题,有一些文件我是要去改它的...

    unity2019转2018 ui脚本丢失问题自动一键修复

    然而,当从一个版本的Unity升级到另一个版本时,可能会遇到各种问题,其中包括UI脚本丢失的问题。这个问题主要发生在从Unity 2019版本降级到Unity 2018时,因为不同版本的Unity对脚本引用和资源管理有其特定的规则。...

    脚本引擎 脚本解析器

    author:ListenWind ...c 语言模式脚本解析器,脚本执行不是其目的。...希望对学习脚本的人有所帮助。 今天测试循环 发现效率实在令人郁闷。先不管了(感觉递归引起的) 代码照样没释放内存,存在内存泄露问题。

    装备制作脚本_079脚本_冒险岛079NPC脚本_

    "装备制作脚本.js"是一个JavaScript文件,它是游戏中的一个关键组成部分。JavaScript是一种广泛使用的编程语言,尤其在Web开发中,但也可以用于游戏开发,尤其是在客户端的逻辑控制上。在这个特定的上下文中,装备...

    WinCC常用C和VBS脚本.pdf

    在处理大量数据时,WinCC脚本提供了GetTagMulti()函数来一次性读取多个变量,而SetTagMultiWait()函数则用于等待并设置多个变量。这些函数对于数据采集、记录和分析等任务特别有用。 7. 脚本的触发机制 脚本通常与...

    C#利用脚本做了一个公式编辑器

    总的来说,“C#利用脚本做了一个公式编辑器”是一个优秀的示例,它展示了如何巧妙地利用脚本语言来增强软件的灵活性和可扩展性,尤其是在处理需要频繁变动的业务逻辑时。通过这种方式,开发者可以更专注于核心业务的...

    sqlserver表数据生成insertsql脚本(导出成insertsql脚本).pdf

    * 数据迁移:当我们需要将数据从一个数据库迁移到另一个数据库时,生成INSERT SQL脚本可以帮助我们快速地将数据迁移到目标数据库中。 * 数据备份:生成INSERT SQL脚本可以作为数据备份的一种方式,以便在数据丢失或...

    EVE 采矿脚本

    最后,"采矿脚本(T语言版)"表明这是针对TC语言的一个版本,可能与其他编程语言编写的脚本在语法和实现上有所不同,需要有TC语言基础的玩家才能理解和修改。如果你是EVE Online的玩家并且对提高采矿效率有兴趣,深入...

    shell脚本大全

    3. **管道操作**:`|`符号用于连接多个命令,让前一个命令的输出成为后一个命令的输入,实现数据的流程控制。 4. **命令替换**:反引号(``)或`$( )`用于命令替换,它们会先执行括号内的命令,然后将结果替换为文本...

    windows server 2008和ser2012 r2设置开关机脚本

    组策略编辑器是一个管理工具,允许管理员针对Windows系统进行各种配置。在Windows Server中,通过运行gpedit.msc命令可以打开组策略编辑器,从而修改组策略。组策略编辑器中的用户配置&gt;Windows设置部分,可以找到...

    大麦网演唱会演出抢票脚本

    在大麦网抢票脚本案例中,"DamaiHelper-main"可能是一个主程序文件,它包含了实现脚本功能的核心代码。这个文件可能包括了对大麦网接口的调用,网页数据的抓取,以及模拟点击、填写表单等操作。开发者通常会使用编程...

    脚本解析器 脚本引擎

    c 语言模式脚本解析器,脚本执行不是其... 支持单行、多行注释 测试字符串类型 希望对学习脚本的人有所帮助。 今天测试循环 发现效率实在令人郁闷。先不管了(感觉递归引起的) 代码照样没释放内存,存在内存泄露问题。

    自动修改网卡名称的VBS脚本

    标题中的“自动修改网卡名称的VBS脚本”指的是使用Visual Basic Script(VBS)编写的一个程序,它的主要功能是自动更改计算机上的网络适配器(网卡)的名称。VBS是一种基于Windows的脚本语言,常用于自动化任务执行...

    Excel2003打开的时候显示 无法装载这个对象,因为它不适用于这台计算机

    在使用Microsoft Excel 2003时,可能会遇到“无法装载这个对象,因为它不适用于这台计算机”的错误提示。这个错误通常与控件组件(即OCX控件)的注册问题有关,这些控件是Excel用来增强其功能的外部程序模块。在此...

    SQL脚本批量执行脚本

    此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行。并且生成日志文件,可查看执行过的所有脚本名称和错误信息...2) 3个SQL脚本实例(其中一个为脚本含有错误) 3) 说明文档(英文版)

    CGI脚本入门学习--HTML格式

    创建特殊的脚本输出 以装载另一个文本响应 无响应 处理表单的脚本 表单格式和表单脚本 GET 和 POST URL 编码 问题 CGI 变量 解码程序 uncgi cgi-lib.pl 解码文件上传的输入 自己做 非解剖的头部脚本...

    A在线学习挂机脚本js插件免费最新版

    A在线学习挂机脚本js插件是由作者Sammy M分享的一个浏览器扩展插件。广东人才培训网在线学习自动挂机,自动过答题验证。 什么是脚本? 脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序...

    gcc链接脚本详解.pdf

    总之,GCC链接脚本是构建可执行文件过程中不可或缺的一部分,它允许开发者精细地控制程序内存布局,以适应各种复杂的系统环境和性能需求。通过深入理解和熟练运用链接脚本,可以更好地优化程序性能,解决特定平台上...

    自动输入脚本 -- 解决禁止粘贴问题

    为了解决这个问题,我们可以编写一个Python脚本模拟键盘输入,这样即使网站禁止了粘贴,我们仍然可以自动化地输入大量数据。 `pyautogui`库是Python中用于屏幕操作的一个强大工具,它可以模拟鼠标和键盘的行为。...

Global site tag (gtag.js) - Google Analytics