【问题标题】:PHP vs JavaScript For Dynamic HTML Pages用于动态 HTML 页面的 PHP 与 JavaScript
【发布时间】:2011-08-31 16:10:58
【问题描述】:

通常,当我将动态生成的 HTML 标记放在一起时,我一直在使用 PHP 来存储信息,然后循环遍历这些信息以在页面上创建元素。一个例子是导航;创建一个对象数组,然后遍历它们以回显标记。这对于在开发或维护期间可能需要进行小(或大)更改的时候有很大帮助。

最近我一直在想是否应该使用 JavaScript 来代替。原理相同,但使用 addElement。

只是想对此发表一些意见;优点、缺点、php vs js、seo 考虑等。

谢谢各位!

【问题讨论】:

  • 感谢大家的意见。这有助于证实我的怀疑,尤其是在 SEO 方面。堆栈溢出 FTW!
  • 好吧,尽管这里达成了共识,但 JavaScript 是现在要走的路(Angular、React 等)。没有人提到的 JavaScript 的一个重要优点是无需重新加载页面,从而带来更好的用户体验。

标签: php javascript html seo


【解决方案1】:

做客户端意味着:

  1. 在许多不同的环境中进行,而不是在一个环境中进行
  2. 只要用户在没有 JS 的情况下出现(无论出于何种原因),它就会中断
  3. 它无法为绝大多数漫游器(包括搜索引擎)工作
  4. 投入开发时间来转换所有逻辑
  5. 要求浏览器向服务器发出额外请求,从而减慢加载时间

在决定是否应该在客户端而不是服务器端做某事时,根据经验,问自己两个问题:

  1. 用户是否会受益于获得即时反馈以响应他们所做的事情?例如他们尝试提交的表单中的不正确数据的错误消息。如果是这样,那么在客户端进行操作将是有益的。
  2. 可以在服务器端完成吗?如果是这样,请先在服务器端进行,因为它更可靠(并且对于非化妆品,更难干扰)。 Build on things that work

【讨论】:

  • 我的经验法则是“尽可能多地在服务器端做”。 JS 仅用于渐进增强。任何人,很好的答案。 +1
  • @Mark — 这不是我说的吗? :)
  • 是的........我想我读到第 1 点结束,然后我的大脑就关闭了。
  • 我认为你应该更新你的答案))现在有很酷的框架,如 angularjs、backbone、ember 可以很好地呈现 html,绑定是编写 html 的完美方式。为什么要加载服务器?我同意最近我们无法编写可维护的代码,因为客户端缺乏结构(我正在使用 angularjs,客户端可能有非常好的 mvc 结构)。
  • 真正的角度本身并不能反驳您的论点。但是您没有承认 javascript 本质上不是一种客户端语言,尽管它通常用于客户端。即使在撰写此答案时,nodejs 已经在世界上引起了轰动。论点 3 也没有承认 html 可以在无头浏览器中提供给机器人,谷歌自己推荐用于 JS 驱动的应用程序。考虑到这些因素,你的大部分主张都被否定了。
【解决方案2】:

这不是一种或另一种情况;通常你需要同时做这两个。

在客户端做可能会更慢,因为服务器仍然需要计算所有数据但客户端需要渲染它;这将涉及多个请求(很可能)并且 DOM 操作很慢(尤其是在旧浏览器上)。

【讨论】:

    【解决方案3】:

    最佳做法是在服务器端生成任何必要的标记。原因包括:

    SEO:大多数爬虫机器人不会解析 Javascript,因此它们会跳过您使用 addElement 生成的任何重要内容。

    可访问性:您的网站应该基本上可以在没有 Javascript 的情况下运行。考虑可能在 Kindle、旧款黑莓、诺基亚或其他带有数据功能的手机上浏览您网站的人。它们不需要所有花哨的样式和效果,但它们至少应该能够绕过您的网站。

    一致性: JS 可以增加另一个级别的跨浏览器可变性。为什么要依赖客户端渲染必要的标记?在服务器端做。

    当然,如果您正在开发全 JS 桌面应用程序或使用类似 Sencha Touch 框架的东西,则可以从容地接受此建议。

    【讨论】:

      【解决方案4】:

      如果你关心的是 SEO,事情很简单:JS 没有被索引。

      还有 UI 问题:如果不启用 JS,则不会加载任何依赖于 JS 的东西。

      【讨论】:

        【解决方案5】:

        一种可能性是检测什么样的用户正在查看您的网站:

        • 如果是机器人:在服务器端解析,你可以只输出机器人需要的东西,没有图形的东西,...

        • 如果是移动设备:显示移动优化版本,使用 Sencha Touch 之类的工具,正如查理指出的那样

        • 如果是标准浏览器,不带javascript:在服务器端渲染页面

        • 如果是标准浏览器,启用 javascript:只需从服务器端发送数据(或使用 Ajax 加载)并从客户端呈现数据

        您可以使用Mustache 之类的东西,它是一个在许多服务器端语言(PHP、Ruby、Java 等)上运行的模板引擎,还可以在 Javascript 上运行,支持客户端页面呈现!

        并尝试使用像 jQueryMootoolsDojoExtJS 这样的 Javascript 框架,它们将帮助您编写可在每个浏览器上运行的代码。

        【讨论】:

        • 使用那些“框架”只会让你的代码在少数最近的浏览器上运行。当然不是“每个浏览器”。最好使用服务器端逻辑并尽可能多地缓存静态(或大部分是静态)页面。
        • 它们中的大多数也支持旧浏览器,并且对于我使用 jQuery 进行的尝试,它运行良好。并且希望我们很快就能抛弃 IE6...(我知道它不是唯一的旧浏览器...但肯定是最丑陋的浏览器之一...)
        【解决方案6】:

        PHP 在某些方面很有用,包括 Handlebars 类型模板和快速的服务器端内容替换。但它也不适用于某些事情,例如单页应用程序和游戏,网站的实时更新。这些就是 JavaScript 的强大之处。

        【讨论】:

        • 您能否详细说明这些差异?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 2020-11-25
        • 2013-01-30
        • 1970-01-01
        相关资源
        最近更新 更多