V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rv54ntjwfm3ug8
V2EX  ›  程序员

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

  •  
  •   rv54ntjwfm3ug8 · 2022-03-08 19:52:24 +08:00 · 4016 次点击
    这是一个创建于 997 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @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
    这个时候我又想起了那句经典名言-----------又不是不能跑!
    DOLLOR
        3
    DOLLOR  
       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   ·   实用小工具   ·   2888 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:58 · PVG 10:58 · LAX 18:58 · JFK 21:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.