我的印象是,为了获得最佳性能,应将Javascript视为静态内容,并应从无cookie的域以及CSS文件,图像等提供服务。

但是Google在这里说:不要提供服务从无cookie的域中早期加载的外部JS文件


对于文档的开头
中引用的,页面启动所需的JavaScript,应该从
与主文档相同的主机名。
在处理时避免了额外DNS查找的风险。


所以现在我很矛盾。我不清楚“页面启动所需”是什么意思。 $(document).ready()函数。页面启动是否需要此代码?

#1 楼


所以现在我很矛盾。我不清楚“页面启动所需”的含义是什么。基本上,这是需要有人运行才能使用网页的JavaScript。例如,如果您访问http://www.weather.com/,则可以看到人们决定使用一些JavaScript魔术来提示天气搜索表单。即单词Enter Zip, City or Place (e.g. Disney World)出现在文本输入字段中。不幸的是,页面加载时会稍有延迟,至少在我这端。因此,如果页面加载的速度足够慢,并且您的速度足够快,可以在执行JavaScript之前开始输入文本输入(这不是拉伸操作),则JavaScript可能会盲目地提示该输入,从而破坏了您的输入输入框中的文本。

当然可以通过首先在文本框中检查用户输入或完全放弃这种过时的技术来避免这种情况。但是,它就不是一个很好的例子。原始主机名)
我的JavaScript应该在哪里提供?另外,正如bpeterson76所暗示的那样,这取决于您网站的具体情况。即页面有多大?您的主机满足需求的程度如何?它会加载多少CSS文件,图像等?它正在加载多少外部资源?

根据您的具体情况,这可能是过早的优化。

#2 楼

“页面开始呈现之前所需的任何内容都应来自同一服务器”规则通常适用于您的服务器或其他较小的资源-在这种情况下,DNS查找可能花费一秒钟的时间(如果您的对象很快就会加起来遍布许多领域)。使用Google的jQuery缓存和其他库等通用公共资源,您的访问者的浏览器很可能已经在今天进行了DNS查找(因为其他站点正在引用该服务的内容),并且文件也可能在缓存中,传输需要完成(或者,如果发出请求,它可能只会返回简短的“ 304-未修改”响应)。即使需要完全下载该对象,对于大多数用户而言,Google的内容分发网络也将比您的小规模操作更快。

一个相关规则:对象的正确功能不需要页面(如用户所见)应在主HTTP响应中尽可能晚地引用。例如,广告/统计服务所需的脚本(例如Google Analytics(分析)及其类似工具)之类的东西-尽快为用户提供您的内容,然后加载您真正感兴趣的背景内容。我封锁了一些广告/统计服务(通过将它们映射到我的主机文件中的127.0.0.1),因为它们通常太慢了,而且早先引用它们的网站在等待脚本时给了我空白页较晚地引用它们,以便我可以阅读我在那里的内容,而其他内容则在后台徘徊。无cookie的域对静态内容的有用性取决于规模。如果您在Cookie中仅拥有一个10字节的会话ID,并且每天有一万名访问者每次访问请求约20个静态对象,那么您每月仅节省约118 MB带宽(20 * 20 * 10000 * 31/1024/1024)。另一方面,如果您的站点在Cookie中保留了一个或两个KB的内容,则差异可能会更大得多,尤其是如果您的任何用户通过慢速连接(例如,通过与移动设备的网络共享或-拥挤的wifi链接处于高干扰区域),或者每天的访问量达数百万次。 >

ajax.googleapis.com或类似名称
调用页面的原始主机名
无cookie的静态域名

用于非必需资源对于初始页面渲染,请尽可能晚地引用它们,并反转上面的首选项列表(尽管除非大规模操作,否则原始主机名和无cookie域之间的差异很可能并不重要)。

评论


有了公共资源,...您的访问者的浏览器很可能已经在今天完成了DNS查找。就我个人而言,我对依靠它感到不舒服。我希望它在尽可能多的情况下尽可能快。无论如何,您都提出了要点。 +1

–乔治·玛丽安(George Marian)
2010年8月3日,18:24

#3 楼

Google运行着一个庞大的内容网络,分布在世界各地,这使您的内容比您可能正在运行的任何单个服务器(想想Akami,但归Google拥有)更接近用户。 Google将以比本地服务器更快的速度将文件发送给用户...除非他们非常靠近您的个人服务器。上述答案似乎始终是共识。但是从现实的角度来看,从长远来看,托管在一个与另一个托管上所获得的收益将很小。通过最小化,优化和减少总体http请求,您将比仔细检查事物的实际位置获得更好的收益。在开始变得重要的情况下(我所做的工作是页面每天加载1.5+百万次,因此5k的改进意味着节省了5兆的带宽),通常会有一组决策者负责研究这些决策。

我个人通常是在Google托管,其唯一原因是他们会向我提供我所寻找的最新副本。

评论


您在哪里托管自定义JavaScript?静态的无cookie域或原始主机名?

–詹姆斯·劳鲁克(James Lawruk)
2010年8月3日在17:19

老实说,在(大部分)在线Jquery之外,确实没有很多不能动态链接的。我倾向于使用(主要)核心Jquery和Jquery UI来使voodoo降至最低,但Datatables插件可能除外。我坚信“保持简单”(愚蠢)的概念,如果不向后兼容,则不会发布代码,这会排除很多选择。就像我在上面说的,将文件放在非cookieless域上没什么大不了的。

–bpeterson76
2010年8月3日,18:43

#4 楼

要记住的重要一件事是,浏览器对将从同一域中同时下载的资源有限制,具体取决于浏览器,通常在2到6之间。使用不同的域可以使浏览器同时从您的域中下载更多内容。用户可能已经完成了DNS查找,甚至可能已经缓存了资源。 CDN已针对速度进行了优化,并可能在您的用户附近拥有一台服务器。

如果不选择CDN,那么如果您有很多Cookie或要下载的资源(图像等),那么使用无Cookie的域(无论如何,只需要执行一次DNS查找)。域。

良好的资源:

http://www.phpied.com/free-falling-waterfalls/

http:// www .stevesouders.com / blog / 2009/04/27 / loading-scripts-without-blocking /

http://developer.yahoo.com/performance/rules.html

#5 楼

尽管以上回答已经解决了您的大部分问题,但我将为“页面启动所需”做出贡献。我将其翻译为:该脚本对于使用网站是否必不可少?根据经验,通常答案是否定的。但是,在某些情况下,我会:


表单验证
基于JavaScript的导航(无论如何都不理想)
如果布局取决于JavaScript
JavaScript或库(如jQuery)用于进行重要的DOM修改

和Yahoo的YSlow性能准则供参考。