如果你在HTML文件中编写脚本src =“/ path / to / nonexistent / file.js”并在浏览器中调用它,并且HTML文件中任何其他地方都没有依赖项或资源来预期文件或其中的代码实际存在,这样做有什么本质上不好的做法吗?
是的,这是一个奇怪的问题。基本原理是开发人员正在处理允许在某些情况下提供自定义(自包含)javascript文件的CMS。问题是CMS在创建javascript的条件包含时不是很灵活。因此,无论它们是否实际位于指定的路径,都可以更轻松地引用自包含的js文件。
由于没有向用户显示错误,这种做法是否应被视为可行的选择?
答案 0 :(得分:2)
主要的缺点是性能,因为浏览器会尝试(很难)下载文件,而您的服务器会查找它。最后,浏览器可能会下载404页面 - 从而减慢页面加载速度。
答案 1 :(得分:1)
如果您的Web服务器配置为处理404错误(“您可能正在寻找此”等),那么您还会在服务器上造成不必要的负载。
答案 2 :(得分:1)
如果你有<head>
标签中引用的脚本(不推荐用于初学者),它也会减慢初始页面渲染时间。
如果不是快速返回404,您的站点只接受连接然后从不响应,这可能导致页面无限期地加载,在某些情况下,锁定整个用户界面。
(至少就是FireFox的一个版本的情况,我希望他们已经修复了它,因为我看到它发生在〜2年前。*)
您至少应该在页面顺序中将标记放在尽可能低的位置,以便解决此问题。
到目前为止,最好的选择是拥有一个一致的无操作URL,用作所有“不存在”JavaScript文件的填充,返回带有HTTP标头的0字节响应,告诉UA缓存它直到奶牛回家,这应该否定大多数你的服务器&lt; - &gt;客户端负载惩罚超过第一次点击(这应该几乎不会伤害人们甚至在你们的拨号上)
*获得的经验教训:不要将script-src引用放在头脑中,特别是对于在机器外部托管的第三方脚本,因为这样你就可以让客户能够访问你的网站,但是由于一些互联网怪异而无法访问的广告JS,因此存在页面无法操作的风险。即使他们是一个声誉良好的第三方。
答案 3 :(得分:1)
你应该问问自己为什么你懒得自己测试一下:)
我测试了1000个随机javascript文件名,加载需要几纳秒,所以不,它没有什么区别。示例:
script src =“/ 7701992spolsky.js”
这是在我的本地机器上,所以它应该采用N * roundTripTime让浏览器找出远程服务器,其中N是坏脚本的数量。
script src =“http://www.randomsite7701992.com/spolsky.js”
然后需要很长的时间。
答案 4 :(得分:0)
如果您选择以这种方式实现它,您可以调整Web服务器,如果找不到引用的JS文件,而不是404,它可以将重定向(301)返回到空/默认JS文件。
答案 5 :(得分:0)
如果您使用的是asp.net,可以考虑使用自定义处理程序(ASHX文件)。 这是一个例子:
public class JavascriptHandler : IHttpHandler {
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
//Some code to check if javascript code exists
string js = "";
if(JavascriptExists())
{
js = GetJavascript();
}
context.Response.write(js);
}
}
然后在你的html标题中你可以声明一个指向自定义处理程序的文件:
src="/js/javascripthandler.ashx"