【问题标题】:Dynamic Loading: Pass back url to script or pass back script itself?动态加载:将 url 传回脚本或传回脚本本身?
【发布时间】:2011-01-30 22:57:53
【问题描述】:

我一直想知道是否有正确的方法来做到这一点:当我使用 AJAX 动态加载脚本时,我可以选择将 url 传回服务器上的脚本,然后运行:@ 987654321@ 或者只是传回脚本本身。

我采用了将内容脚本本身传回的方法,因为我认为我只进行一次往返而不是两次。也因为我也想传回一些 CSS 或其他资产。但是我注意到 facebook 将 url 传回给 CDN 资源,所以我想知道我的方法是否有一些我忽略的后果。

谢谢! 马特

【问题讨论】:

    标签: javascript performance lazy-loading


    【解决方案1】:

    当您使用 Facebook 时,您会看到一些相当独特的流量模式。发回 20KB 的脚本与从动态服务器发送 30 个字符相比,可以转化为这些服务器上更多的负载。此外,他们可能无法如此快速地提供大型内容。

    相比之下,CDN 服务器是美化的静态代理,专为速度和规模而设计。所以从 facebook 的角度来看,额外的往返是有道理的,因为它仍然可以提高整体页面速度,并且肯定会改善他们的服务器流量模式。

    现在回到你身边。如果您要从与站点其余部分相同的服务器加载脚本,这种方法将没有意义。如果您确实也可以访问 CDN,那么您必须使用有关您的用户(延迟、位置)、有关您网站的事实(脚本大小、脚本加载时间)的各种假设进行数学计算,并比较让您的主服务器为这些脚本提供服务,而不是额外的往返和您的 CDN 服务器分发这些脚本。

    关于往返的另一个想法:如果我是 facebook,我可能会在页面实际需要加载脚本之前尽早分发这些 CDN URL。理想情况下,我会捎带另一个请求,将那一点点额外数据偷偷带进来。这会使额外的往返问题变得毫无意义。

    【讨论】:

    • 很棒的文章。你的意思是:“如果你去……这种方法就没有意义了”?还是我错过了什么?
    • 不,两步法的主要好处是从比通用动态服务器更擅长提供静态内容的服务器中获取脚本。如果您在同一组服务器上执行所有操作,那么这种方法几乎没有什么好处。
    • 哦,我明白了。你对我来说 Facebook 的方法没有什么好处,而不是我的方法。谢谢!
    【解决方案2】:

    嗯,我很确定 AJAX 存在一些跨域安全问题,这意味着如果您尝试从外部 CDN 动态加载脚本内容,则需要解决此类问题。

    【讨论】:

    • 感谢您的回复。对不起,我应该说得更清楚:它是 facebook 的一个子域,但这并不是问题的真正相关部分。编辑:他们还使用 iframe 来加载而不是 AJAX,所以我很确定可以解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2011-08-03
    相关资源
    最近更新 更多