2010-05-20 43 views
7

如果在HTML文件中执行脚本src =“/ path/to/nonexistent/file.js”,并在浏览器中调用该脚本,并且HTML文件中任何地方都没有依赖项或资源,其中真的存在,是否有什么内在的坏做法呢?是否有任何负面影响采购一个实际上不存在的JavaScript文件?

是的,这是一个奇怪的问题。理由是开发人员正在处理一个CMS,允许在某些情况下提供自定义(自包含)的JavaScript文件。问题是,当为JavaScript创建条件包含时,CMS不是非常灵活。因此,仅仅引用自包含的js文件比较容易,无论它们是否实际位于指定的路径。

由于没有错误显示给用户,这种做法是否应该被视为可行的选择?

回答

1

如果您有<head>标记中提及的脚本(不推荐用于初学者),它也会稍微减慢初始页面呈现时间。

如果不是快速返回404,您的站点只接受连接,然后再也不会响应,这会导致页面无限期地加载,并且在某些情况下会锁定整个用户界面。

(至少是与Firefox的一个修改的情况下,我希望他们已经修复它,因为我看到这种情况发生〜2年前。*)

你至少应该把标签为低页面顺序,你可以负担得起,以解决这个问题。

到目前为止,您最好的选择是拥有一个一致的无操作URL,用作所有“不存在”JavaScript文件的补充,该文件返回带有HTTP标头的0字节响应,告诉UA缓存它,直到母牛回家,应该否定大部分的服务器< - 超越先打>客户端负载处罚(这应该几乎没有伤到人甚至在叶奥尔德拨号)

*教训:不要”不要将script-src引用放在头部,特别是对于托管在机器外部的第三方脚本,因为这样可以让客户端能够访问您的网站,但由于一点点操作可能会导致页面无法运行广告JS因为某些互联网而无法访问我们irdness。即使他们是一个有信誉的第三方。

2

那么主要的缺点是性能,因为浏览器将尝试(很难)下载文件,你的服务器将寻找它。最后,浏览器可以下载404页面,从而减缓页面加载速度。

1

如果你的网络服务器被配置为404错误(“你可能正在寻找这个”等),那么你也在服务器上造成不必要的负载。

0

如果您选择以这种方式实现它,您可以调整Web服务器,如果找不到引用的JS文件而不是404,它可能会返回一个空的/默认的JS文件的重定向(301)。

1
  1. 你应该问自己,为什么你懒得对此进行测试自己:)

  2. 我测试1000的随机的JavaScript文件名,并花了几纳秒加载,所以没有,它没有一个区别。例如:

SCRIPT SRC =“/ 7701992spolsky.js”

这是我的本地机器上。但是,因此预计需要N * roundTripTime的浏览器找出远程服务器,其中N是坏脚本的数量。

  • 但是,如果你有一个不存在的随机域名,像
  • 脚本SRC =“http://www.randomsite7701992.com/spolsky。 js“

    那么它将需要很长的f-in时间。

    +1

    你也跑人的愉快风险注册该域名,并把一些恶意的有=)。 JOY〜! – 2010-05-20 04:04:11

    +1

    @chief:太懒了?没有!我知道你在等着教我!为什么让幼崽摸索一下,直接从校长那里学习? ;) – dreftymac 2010-05-20 15:45:21

    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" 
    
    相关问题