平衡大型网站上的服务器端和客户端代码

时间:2010-07-27 17:24:57

标签: php javascript web client-side server-side

让我们假设我正在编写Facebook(我不是),或其他涉及大量流量的网站。

我们的总体布局是:

  1. 所有CSS都在外部文件中
  2. 99%的JS在外部文件中
  3. 网站HTML的骨干由PHP / MySQL后端生成。
  4. JS用于生成通常更改的部分的DOM。
  5. 我们的服务器有一个inplace API,它返回JSON对象,这些对象被提供给我们的DOM构建器(JS函数),它们采用JSON对象数组,比如朋友列表,然后生成所有用于显示列表的html朋友,或事件等。
  6. 问题

    1. 这合理吗?
    2. 如上所述,通常的做法是使用专用的JS函数来构建DOM吗?
    3. 这可扩展吗? JS太慢了吗? (顺便说一下,我们几乎只使用JQuery)
    4. 我知道它极大地降低了带宽和服务器负载,因为服务器不再遍历朋友列表(它也通过MySQL查询)并生成所有HTML,而是进行查询并返回小JSON对象。这似乎对我好,但我想要第2 /第3 /第4 / ......意见。

      非常感谢!

      如果我遗漏了任何重要信息,请告诉我。

3 个答案:

答案 0 :(得分:1)

鉴于JS引擎正在不断发展以提高性能,我认为这是一个非常好的设计。我们将越来越多地将其视为HTML5& Co越来越受欢迎。

答案 1 :(得分:1)

这是我正在迈向的方法。我很高兴。 JS当然不会太慢。你需要一个好的JS模板系统。 Trimpath JS Templates是我尝试过的人的最爱。

答案 2 :(得分:1)

我认为您的布局非常好,但我仍然建议您阅读YAHOO! Best Practices for Speeding Up Your Web Site。它比我能做的更好地总结了它(非常好的阅读)。

我认为facebook在实现规模方面做了三件最重要的事情:

  1. CACHING => Memcached。这个非常重要。您应该记住,与MEMORY相比,磁盘IO的速度很慢(根据我的book,磁盘5毫秒/内存40-80ns)。 Facebook几乎拥有内存中的所有活动数据。 These old slides说他们的记忆力超过5TB。到现在为止,这将更多!
  2. HIPHOP => https://github.com/facebook/hiphop-php/wiki/
  3. 离线处理 =>使用消息队列,例如redisbeanstalkdgearman,仅举几例。
  4. 其他一些有趣的链接: