使用JavaScript来渲染整个页面是一个好的实践吗?

3

我搜索了一段时间,但没找到相关的信息。我甚至尝试在UX部分提问,他们说这里更合适,所以我们又来了:

我正在编写一个页面,员工可以编辑、添加、删除或查看库存中的产品。它在页面上使用JavaScript来渲染和动画化一些元素,以加速页面加载过程并改善用户体验,因为服务器只发送纯JSON,然后浏览器JavaScript处理JSON,然后呈现(构建)整个页面。

它看起来很漂亮,加载非常快,但它被认为是良好的编程实践吗?什么时候会成为问题?即使Internet Explorer或移动浏览器(Chrome、ABP浏览器)也能正常显示每个页面,没有任何问题。但当我看到那700多行JS代码时,问题还是存在...

如果有人想知道这个页面长什么样子,这里有一些图片:(可能与主题无关,也可能相关)

https://istack.dev59.com/0rLI6.webp

https://istack.dev59.com/d90n9.webp


1
只要它能正常工作且性能良好,我个人并不在意事物是如何构建的。然而,Javascript 必须易于管理。考虑下一个需要处理它的人,而不仅仅是享受你所做的事情。如果您发布一些代码示例,则会获得更好的答案,因为答案与此更相关。 - Reinstate Monica Cellio
1
值得关注无障碍性,大多数用户并不关心事物是如何构建的,但大多数用户没有任何残疾。根据残疾人使用的支持软件,全JS网站可能会成为一个问题。我自己对此不是很了解,但在做出决定之前值得深入研究。 - GillesC
1
这违背了关注点分离的原则,如果用户禁用了JavaScript,那么你的网站将完全崩溃,但同时React以类似的方式工作。 - Pixelomo
@andymccullough 我也使用XML异步加载,这样我就可以以“材料物品”的方式显示内容,而无需每次刷新页面。但在旧版本的IE上,它看起来很糟糕,而且什么都不起作用。在这个行业中,每个人都使用最新版的Chrome等现代计算机,所以这不是一个问题,但我正在考虑是否应该继续这种方式...因此,我在这里提出了这个问题... - Fusseldieb
1
对于那些投票关闭的人来说,这个问题很可能会引起很多没有依据的意见,但是一个客观的答案是有可能的。 - Jared Smith
显示剩余7条评论
4个回答

2
如果一个网站的任何有价值的内容可以在没有JavaScript的情况下向用户提供,那么如果您未能这样做,就会对他们造成严重的伤害。您的代码可能会(读作:将)出现错误,CDN可能会崩溃,他们甚至可能因为各种原因关闭JS。并且完全可以使用表单登录用户而不需要任何JavaScript(使用服务器端HTTP请求和渲染也可以获取和提供内容)。您已经将应用程序结构化为需要JS,但除了数据刷新之外,似乎没有任何东西实际上需要JavaScript。除非您没有告诉我们什么。
这不是好的实践。在这种特定情况下是否可辩?可能是。
还请注意,许多辅助技术现在都具有JavaScript意识,至少谷歌也是如此,即使从SEO角度来看这不理想,也不是所有的都失去了。这真的归结为UX问题。
我在这里并不持强硬立场。有明显的反例和存在证明需要JavaScript的事物:画布游戏、文本/图像/等编辑器、吉他调音器、谷歌地图应用程序等。我构建的大多数站点都需要JavaScript。对于一个内部站点,仅供自己的员工使用?需要JavaScript可能没问题。但是一定要非常谨慎地绝对要求公开面向的任何事情都需要它。

0

理论上没有任何问题。这就是React应用程序通常的工作方式。

SEO很重要吗?如果是,您需要考虑一个同构应用程序 - 这意味着您在服务器上生成HTML输出(使用与客户端几乎相同的代码)并将其发送到浏览器。

但是,如果您只是使用JS来呈现HTML内容而没有像React这样的库,我会说这不是一个好主意。 React的流行之处在于它使用虚拟DOM。大多数Web应用程序中的第一个性能瓶颈是渲染,或者更具体地说是DOM抖动。 React做了一些聪明的事情,以最小化浏览器需要执行的渲染量,以更新您的页面。

如今,如果有人想要构建Web应用程序,我很难想出不使用类似Redux的React的好理由。


谷歌可以渲染JavaScript。参考:http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157 - Jay

0

我想指出几件事情:

第一,服务器端渲染与客户端渲染。JavaScript非常擅长本地操作...但是如果您试图在加载时隐藏元素(仅作为示例),则可能会出现闪烁或其他奇怪的问题,这是一个糟糕的用户体验。拥有适当的初始状态非常重要。同样,在同一条路线上 - 如果您有一个完全由JavaScript构建的庞大应用程序,由于长时间的加载时间,它可能会妨碍用户体验。

第二,可维护性。如果您将不同的UI元素组件化,则对视图进行更改就会自然而然地发生。虽然这也适用于所有软件,但如果您手动编写组件而没有框架或客户端库(如Angular或React),那么这将成为您和您的合作者的负担。


我最初是使用CSS来隐藏的,所以闪烁的东西不是问题。是的,我正在从头开始构建一切,我不确定这是否是一个好事。 - Fusseldieb

0

根据您提供的信息,这样描述“良好实践”总是意味着其他解决方案不好,而事实并非如此。

在不分析您的应用程序的工程方式的情况下,可能存在以下风险:

  • 代码版本控制
  • 内容和表现的分离
  • 访问控制

代码版本控制

仅通过传递JSON数据来回传输意味着在性能方面获得了很大的优势。但是,您是否计划如何容纳将新版本的Javascript代码部署到客户端?例如使用HTML5清单,在交易中包含版本信息等。

内容和表现的分离

您是否在JSON中嵌入序列化的HTML、Javascript或CSS?这可能会导致各种复杂性和安全问题。

访问控制

如果您的应用程序被攻击,最糟糕的情况是什么?通常关于保护Web应用程序的指导建议都是基于更传统的服务器端HTTP请求-响应模型和会话。而任何编写安全Web应用程序的人所学习的第一件事就是JavaScript无法访问会话cookie。Oauth2专门为解决这种情况而编写。

我通常从服务器加载HTML和CSS作为“基础”页面,这意味着顶部栏、侧边栏和所有其他内容。我使用Javascript构建主要内容(这样HTML代码就不会重复出现,潜在地减慢加载时间)。 - Fusseldieb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接