维护一个屎山时看到了模板渲染的最佳实践(误),竟然说不出缺点

2022 年 3 月 8 日
 rv54ntjwfm3ug8
@foreach (var thatOrder in Model)
{
    ...
    <td><script>document.write(["未付款", "等待发货", "已发货", "已签收", "待评价", "已完成", "已取消"][@thatOrder.StatusType]);</script></td>
    ...
}
5215 次点击
所在节点    程序员
21 条回复
zjhzxhz
2022 年 3 月 8 日
HTML 数据传输爆炸?
pengtdyd
2022 年 3 月 8 日
这个时候我又想起了那句经典名言-----------又不是不能跑!
AV1
2022 年 3 月 8 日
只要用 JS ,必然能举出不利于 SEO 、万一浏览器不支持 JS 之类的万能缺点。
ChrisFreeMan
2022 年 3 月 8 日
很棒的代码,通俗易懂不费一点脑子就能理解
gowk
2022 年 3 月 8 日
ASP.NET Razor View
IvanLi127
2022 年 3 月 8 日
我居然觉得。。挺不错的。。不过都模板引擎了,为啥要用 js😥
CallMeReznov
2022 年 3 月 8 日
我可以不可以理解这是一种 GEEK 风?
codehz
2022 年 3 月 8 日
虽然知道这是 meme ,但还是要提一句:Document write 会严重拖慢渲染速度(((
xuanbg
2022 年 3 月 8 日
代码只要易于维护就是好代码。很多时候性能什么的就根本不是关键。
tomczhen
2022 年 3 月 8 日
基于后端模板渲染的前后端分离项目 :doge:
agagega
2022 年 3 月 8 日
在后端生成动态的 JS 代码发给前端去执行,本来就是前 SPA 时代一种常用的做法啊,Rails 的 SJR 就是这么搞的
seakingii
2022 年 3 月 9 日
这很好啊,可以反没有带脚本引擎的爬虫
finab
2022 年 3 月 9 日
挺好,表驱动替代 if ,当初学设计模式第一课😄
dcsuibian
2022 年 3 月 9 日
第一眼以为自己看明白了、通俗易懂,仔细看了一下才发现是怎么回事,感觉楼上的有几楼似乎也没看懂。

本来服务端发给前台的 html 应该是

<td>未付款</td>

这样的。而现在是

<td><script>document.write(["未付款", "等待发货", "已发货", "已签收", "待评价", "已完成", "已取消"][0]);<script></td>

这样的。问题是前一种的“未付款”和后一种的“0”是等同的,而且后一种还要使用 js 再运行一次。吐槽的应该是这个多此一举的做法。
(而且也不光是多此一举,传输的数据多了,浏览器遇到 script 就要暂停执行,对性能不好。document.write 感觉有点危险,当页面加载后如果用这个,就是直接清空。)
vibbow
2022 年 3 月 9 日
@dcsuibian 现实情况是,使用古典 JavaScript 的页面的速度通常都比使用模板引擎的要快 😂
cslive
2022 年 3 月 9 日
经过 #14 解释看懂了😂
h82258652
2022 年 3 月 9 日
缺点还是有吧😂
相当于把订单的所有业务状态暴露了
sunhelter
2022 年 3 月 9 日
#14 解释通俗易懂,还在想那个 @thatOrder.StatusType 是什么意思
sss007
2022 年 3 月 9 日
感觉 没毛病啊 ~
Mateverse
2022 年 3 月 9 日
咱就说,能不能跑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX