通常,当我将动态生成的HTML标记组合在一起时,我一直在使用PHP来存储信息,然后循环遍历它以在页面上创建元素。一个例子是导航;创建一个对象数组,然后循环它们以回显标记。这有助于我在开发或维护期间进行轻微(或主要)更改的时间。
最近我一直想知道是否应该使用JavaScript代替这一点。原理相同,但使用addElement。
想得到一些意见;优点,缺点,php vs js,seo考虑等等。
谢谢大家!
答案 0 :(得分:40)
做客户端意味着:
在决定是否应该做客户端而不是服务器端时,根据经验,问自己两个问题:
答案 1 :(得分:4)
这不是一种或另一种情况;通常你需要做两件事。
做客户端可能会慢一些,因为服务器仍需要弄清楚所有数据,但客户端需要渲染它;这将涉及多个请求(最有可能)并且DOM操作很慢(特别是在较旧的浏览器上)。
答案 2 :(得分:4)
最佳做法是在服务器端生成任何必要的标记。原因包括:
SEO:大多数抓取机器人都不会解析Javascript,因此他们会跳过您使用addElement生成的任何关键内容。
辅助功能:您的网站基本上无需使用Javascript即可运行。考虑一下可能正在浏览您的网站上的人,包括Kindles,旧Blackberry,Nokias或其他带有数据的功能手机。他们不需要所有花哨的风格和效果,但他们至少应该能够绕过你的网站。
一致性:JS可以添加另一个级别的跨浏览器可变性。为什么要依赖客户端呈现必要的标记?做它服务器端。
当然,如果您正在开发一个全JS桌面应用程序或使用Sencha Touch框架之类的东西,这个建议可以大步迈进。
答案 3 :(得分:1)
如果您关心SEO,事情很简单:JS没有编入索引。
还存在UI问题:如果未启用JS,则不会加载与JS相关的内容。
答案 4 :(得分:0)
一种可能性是检测哪些用户正在查看您的网站:
如果它是一个机器人:在服务器端解析,你可能只输出机器人所需的东西,没有图形化的东西,......
如果是移动设备:使用像Sencha Touch这样的东西展示移动优化版本,正如查理指出的那样
如果是标准浏览器,没有javascript:在服务器端渲染页面
如果它是标准浏览器,则启用javascript:只需从服务器端发送数据(或使用Ajax加载)并从客户端呈现数据
您可以使用Mustache之类的东西,它是在许多服务器端语言上运行的模板引擎(PHP,Ruby,Java,...还有Javascript,支持客户端页面呈现!) p>
尝试使用jQuery,Mootools,Dojo或ExtJS等Javascript框架,它们将帮助您编写将在每个浏览器上运行的代码。< / p>
答案 5 :(得分:0)
PHP适用于某些方面,包括Handlebars类型模板和快速服务器端内容替换。但对于某些内容,例如单页应用程序和游戏,网站的实时更新,它也不是很好。那些东西是JavaScript强大的地方。