ASP.NET ScriptManager 控件自动插入各种内联 javascript,如 PageRequest 初始化。是否可以将其删除或移动到外部 js 文件?
此外,脚本管理器总是添加 __DoPostback,即使在页面上不使用时,如何避免或将其移至外部文件?
ASP.NET ScriptManager 控件自动插入各种内联 javascript,如 PageRequest 初始化。是否可以将其删除或移动到外部 js 文件?
此外,脚本管理器总是添加 __DoPostback,即使在页面上不使用时,如何避免或将其移至外部文件?
首先,“__DoPostBack”是由可能导致回发的控件插入的,例如将 AutoPostBack 属性设置为 true 的 DropDownList。由于 ScriptManager 基本上拦截了传统的回发,我相信这就是它插入函数的原因。
- 以下只是我的想法...... :)
现在,关于将所有内容移动到外部文件。这并不容易,但它“可能”是可能的。问题是 ASP.NET 在运行时生成脚本,因此您无法对其进行静态处理。您需要考虑的是为什么您首先要这样做。事实上,大部分生成的脚本都是动态的,这使得缓存起来相当困难。但是,如果你真的需要,你应该看看 HttpHandlers 和 HttpModules。
基本上你需要以某种方式提取每个脚本标签(没有 src-attribute 集)。这可以在 HttpContext 的 BeginRequest 事件上的 HttpModule 中完成。现在您需要提取所有必要的信息,并将其替换为对可以作为替换的特定 HttpHandler 的引用。但要完全改变,您有必要对现有脚本进行某种缓存。您可能会为此使用 ASP.NET 缓存。棘手的部分是将现有缓存条目与新条目进行比较,并确定是获取缓存版本(将 HttpHandler 指向现有条目)还是生成新条目。如果您有很多脚本,那么这很可能是一项相当昂贵的操作。此外,您需要确定客户端是否可以缓存它' 自己的(电子标签等可能会派上用场)。重要的是客户端避免每次都下载相同的不必要的脚本(我相信这是您的最终目标?)。
回顾一下:
顺便提一句。脚本外部化最多很棘手,因此您需要注意不要引入无法修复的错误;)
不是一个确切的解决方案,但我之前尝试过自己这样做,但没有任何运气......主要是因为时间太少。当你付钱去做一项任务时,这种优化是不合理的...... :(