ASP.NET ScriptManager控件自动插入各种内联javascript,如PageRequest初始化。是否可以将其移除或移动到外部js文件?
而且,脚本管理器总是添加__DoPostback,即使没有在页面上使用,如何避免这种情况,或者将其移到外部文件中?
发布于 2009-10-09 21:55:05
首先,"__DoPostBack“是由可以导致回发的控件插入的,比如DropDownList,其中AutoPostBack属性设置为true。由于ScriptManager基本上拦截了传统的回发,所以我认为这就是它插入函数的原因。
-以下只是我在想.:)
现在,关于将所有东西移动到外部文件。这并不容易,但“可能”是可能的。问题是ASP.NET在运行时生成脚本,所以您不能静态地处理它。你需要考虑的是为什么你一开始就想这么做。事实上,大部分生成的脚本是动态的,这使得缓存变得相当困难。但是,如果确实需要,您应该同时查看HttpHandlers和HttpModules。
基本上,您需要以某种方式提取每个脚本标记(没有src-属性集)。这可以在HttpModule上对HttpContext的BeginRequest事件执行。现在,您需要提取所有必要的信息片段,并将其替换为可以作为替换服务的特定HttpHandler的引用。但是,要想发挥任何作用,就必须对现有脚本进行某种缓存。为此,您可能需要使用ASP.NET缓存。棘手的部分是比较现有缓存条目和新缓存条目,并确定是获取缓存版本(将HttpHandler指向现有条目)还是生成新条目。如果您有大量的脚本,这很可能是一个相当昂贵的操作。此外,您需要确定客户端是否可以自己缓存(电子标签等可能会派上用场)。重要的是客户端避免每次下载相同的不必要脚本(我相信这是您的最终目标)。
因此,概括地说:
顺便说一句。脚本外部化最多是很棘手的,所以您需要小心不要引入不可能修复的bug ;)
不是一个扩展的解决方案,但我自己也试过这样做,没有任何运气.主要是因为时间太少。当你被付钱去做一项任务时,这种优化是没有道理的。:(
https://stackoverflow.com/questions/1496519
复制相似问题