维护一个屎山时看到了模板渲染的最佳实践(误),竟然说不出缺点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rv54ntjwfm3ug8
V2EX    程序员

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

  •  
  •   rv54ntjwfm3ug8 2022-03-08 19:52:24 +08:00 4538 次点击
    这是一个创建于 1391 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @foreach (var thatOrder in Model) { ... <td><script>document.write(["未付款", "等待发货", "已发货", "已签收", "待评价", "已完成", "已取消"][@thatOrder.StatusType]);</script></td> ... } 
    21 条回复    2022-03-09 19:43:11 +08:00
    zjhzxhz
        1
    zjhzxhz  
       2022-03-08 20:11:53 +08:00
    HTML 数据传输爆炸?
    pengtdyd
        2
    pengtdyd  
       2022-03-08 20:42:56 +08:00
    这个时候我又想起了那句经典名言-----------又不是不能跑!
    AV1
        3
    AV1  
       2022-03-08 20:55:20 +08:00
    只要用 JS ,必然能举出不利于 SEO 、万一浏览器不支持 JS 之类的万能缺点。
    ChrisFreeMan
        4
    ChrisFreeMan  
       2022-03-08 20:58:00 +08:00 via iPhone
    很棒的代码,通俗易懂不费一点脑子就能理解
    gowk
        5
    gowk  
       2022-03-08 21:02:59 +08:00
    ASP.NET Razor View
    IvanLi127
        6
    IvanLi127  
       2022-03-08 21:57:48 +08:00 via Android   1
    我居然觉得。。挺不错的。。不过都模板引擎了,为啥要用 js
    CallMeReznov
        7
    CallMeReznov  
       2022-03-08 22:06:20 +08:00
    我可以不可以理解这是一种 GEEK 风?
    codehz
        8
    codehz  
       2022-03-08 22:11:51 +08:00 via Android
    虽然知道这是 meme ,但还是要提一句:Document write 会严重拖慢渲染速度(((
    xuanbg
        9
    xuanbg  
       2022-03-08 22:21:24 +08:00
    代码只要易于维护就是好代码。很多时候性能什么的就根本不是关键。
    tomczhen
        10
    tomczhen  
       2022-03-08 22:23:39 +08:00
    基于后端模板渲染的前后端分离项目 :doge:
    agagega
        11
    agagega  
       2022-03-08 22:36:01 +08:00
    在后端生成动态的 JS 代码发给前端去执行,本来就是前 SPA 时代一种常用的做法啊,Rails 的 SJR 就是这么搞的
    seakingii
        12
    seakingii  
       2022-03-09 00:01:03 +08:00
    这很好啊,可以反没有带脚本引擎的爬虫
    finab
        13
    finab  
       2022-03-09 00:06:11 +08:00 via iPhone
    挺好,表驱动替代 if ,当初学设计模式第一课
    dcsuibian
        14
    dcsuibian  
       2022-03-09 01:10:32 +08:00   2
    第一眼以为自己看明白了、通俗易懂,仔细看了一下才发现是怎么回事,感觉楼上的有几楼似乎也没看懂。

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

    <td>未付款</td>

    这样的。而现在是

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

    这样的。问题是前一种的“未付款”和后一种的“0”是等同的,而且后一种还要使用 js 再运行一次。吐槽的应该是这个多此一举的做法。
    (而且也不光是多此一举,传输的数据多了,浏览器遇到 script 就要暂停执行,对性能不好。document.write 感觉有点危险,当页面加载后如果用这个,就是直接清空。)
    vibbow
        15
    vibbow  
       2022-03-09 08:29:48 +08:00
    @dcsuibian 现实情况是,使用古典 Javascript 的页面的速度通常都比使用模板引擎的要快
    cslive
        16
    cslive  
       2022-03-09 09:04:22 +08:00
    经过 #14 解释看懂了
    h82258652
        17
    h82258652  
       2022-03-09 09:13:55 +08:00
    缺点还是有吧
    相当于把订单的所有业务状态暴露了
    sunhelter
        18
    sunhelter  
       2022-03-09 10:06:20 +08:00
    #14 解释通俗易懂,还在想那个 @thatOrder.StatusType 是什么意思
    zzlhr
        19
    zzlhr  
       2022-03-09 13:46:30 +08:00
    感觉 没毛病啊 ~
    Mateverse
        20
    Mateverse  
       2022-03-09 14:57:40 +08:00   1
    咱就说,能不能跑。
    JaxXu
        21
    JaxXu  
       2022-03-09 19:43:11 +08:00
    。。。。说实话在干后端的时候,我真的写过这样的代码
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3285 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:46 PVG 12:46 LAX 20:46 JFK 23:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86