作者Hsins (迅雷不及掩耳盗铃)
看板Soft_Job
标题Re: [请益] 後端精进的方向?
时间Wed Jan 12 01:13:38 2022
: → superpandal: 怎麽会有人想不开想要跑过来 这些东西其实你自己碰都 01/12 00:08
: → superpandal: 可以做出差不多的工具出来... 模板语言的话用什麽都 01/12 00:09
: → superpandal: 可以 很多目前看到的不外乎就是侦测档案变化并生成程 01/12 00:10
: → superpandal: 式码 还是偏底层比较好 路广 01/12 00:11
: → superpandal: 可以说都在学怎麽应用这些工具 而不是真正的知识... 01/12 00:17
: → Hsins: 侦测档案变化生成程式码听起来好屌ㄛ,你的模板可能跟大家 01/12 00:23
: → Hsins: 的模板不太一样欸。 01/12 00:23
: → superpandal: 不然呢js很多框架就是这样 haha 不然你以为光xml格式 01/12 00:27
: → superpandal: 的语法就可以跑... 01/12 00:27
不是啊,你可不可以不要每次都想要说个好像高深莫测的东西,但
是其实自己不是很理解呀?我觉得传递错误的知识比藏拙还要更可
恶耶。比如上次在那嘴人家 Wine 不做自动化测试,可是人家明明
付出了超级多的心力在那块:
https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1636600658.A.81D.html
回到这次的主题来。
模板引擎(Templating Engines)这种东西虽然没有什麽学术上明
确的定义,但绝对不是你所谓的「侦测档案变化并生成程式码」好
吗?这边我借用一下 Vue.js 的作者尤雨溪曾经在一篇回答中所使
用过的叙述:
「严格的模板引擎的定义:
输入模板字串 + 资料,得到渲染过的字串。」
[REF]:
https://www.zhihu.com/question/32524504/answer/55812327
或者在绝大多数的状况下,甚至可以说是将资料(data)和模板(
template)合并然後生成 HTML 文件,再返回给发出 HTTP 请求的
客户端。这些资料在後端会透过与资料库进行交互取得,又不是三
十年前,你的资料不是来自於纯文字档案,请问哪里侦测了档案变
化?
在早期前後端分离架构还不流行时,这是十分常见的作法,常见的
模板引擎,比如:
- Spring 搭配 JSP, Freemaker, Thymeleaf 等
- Flask 搭配 Jinja2
- Laravel 搭配 Blade
- Django 自己就带有模板引擎
- Express.js 搭配 Jade, EJS 等
- Rails 搭配 Erb, Haml 等
他们在使用上都很类似,比如以 JSP来说,使用上可能是这样的
,其中 user 的资料会在 Controller 里面从资料库中获取再带
入:
<table border="1">
<c:forEach items="${users}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.age}</td>
<td>${user.address}</td>
</tr>
</c:forEach>
</table>
如果使用过前端框架比如 React, Vue, Angular, Svelte之类的,
可能会发现在语法跟概念上有类似的地方,但在本质上是有所不同
的:
1. 模板引擎在後端将资料和模板组成 HTML 并返回给客户端
2. 前端框架通常是透过转换成 live DOM 或操作 virtual DOM 来
将透过 AJAX方式获取到的资料渲染到页面上,但各自的实作略
有差别
至於前後端分离与前後端不分离之间的差异和优缺点我就不多加赘
述了。只希望有些人可以做点功课再来说话,不要人家就已经是烦
恼想要求解了,还在那边被你乱。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.71.215.250 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1641921221.A.B4E.html
1F:→ shomingchang: 从实作角度来看这跟侦测档案产出程式码没啥差距吧 01/12 01:19
2F:→ shomingchang: 侦测socket产生HTML? 01/12 01:21
这种东西如果要说到 socket 就又扯远了,我想以常人看到那句「
侦测档案变化」所想到的要嘛是档案内容或相关资讯变动而做出行
为,在这层面上来说不会想到是 socket。 以常见的架构来说,是
後端根据客户端发送请求时夹带的资料,在控制层里依照需求去与
资料库交互,获取到资料後再放入,交由模板引擎产出 HTML。
另外这跟他扯到的 JS 框架很多也是这样是两回事,这也是为什麽
尤雨溪那篇对於提问者将东西混为一谈很有意见,毕竟「前端框架
」和「模板引擎」是两个概念,不论理念、实践跟功能上都是完全
不一样的东西。
3F:→ superpandal: 我上次说的是wine测试成果不大 一堆dll跟我说100%有 01/12 01:21
4F:→ superpandal: 什麽用 有时候还是得用native dll 01/12 01:21
虽然跟这个主题没什麽关联,但你上次的说法是「 Wine 开发者为何
不考虑一下自动化测试」,而不是测试成果不大,是我提了之後你才
改口的。
5F:→ superpandal: 至於模板引擎很多实现都有输出 要不要弄成档案的差异 01/12 01:24
6F:→ superpandal: 跟我讲没有产生... 01/12 01:25
7F:→ superpandal: 那篇我给的建议就是继续不纯软 我到底在乱什麽? 01/12 01:25
8F:→ superpandal: 还嘴前後端不分离? 就你一个人知道? haha 01/12 01:28
没嘴呀。模板引擎在早些年前後端不分离的架构下扮演着重要角色。
我觉得算是大家都知道的东西啦。生成程式码或生成文件不是我要说
你的谬误点,你的谬误点是侦测档案变化好吗?
9F:→ superpandal: 我也希望有人看不懂就不要在那边五四三 的确没有高深 01/12 01:32
10F:→ superpandal: 只是你测不到 你还是继续觉得你的理解才是对的最好 01/12 01:32
11F:→ superpandal: 当然如果你继续觉得最终html才是产出我也不反对 01/12 01:39
12F:→ superpandal: 那个结果你跟我说是自动化测试结果... 後来有解释了 01/12 01:51
13F:→ superpandal: 这叫什麽自动化测试? 当然也知道他有测试 怎麽测而 01/12 01:52
所以一来你没搞清楚自动化测试是什麽,二来根本连我贴了网址也没
回去认真看嘛!
https://wiki.winehq.org/Conformance_Tests
当初 Wine 的开发团队为了进行自动化测试,建构了一组单元测试并
打包成每日更新的执行档,让世界各地的使用者可以运行之後获得每
日的测试报告,不知道花费了多少心力。
另外自动化测试可以是白盒测试、黑盒测试也可以是混合的灰盒测试
,并不是黑盒测试就不会是自动化测试。
14F:→ superpandal: 已 前後端不分离可以用模板 分离也可以用模板 01/12 01:53
15F:→ superpandal: 很多js的server本来就会根据档案改变更新 这不是因应 01/12 01:54
16F:→ superpandal: 变化是什麽? 01/12 01:55
17F:→ superpandal: 前端框架有含模板 这麽一说php有cache起来就不算模板 01/12 02:03
18F:→ superpandal: 搂? XD 到底是谁讲得很高深 01/12 02:03
我不确定你有没有带过新人啦,但你这样的叙述方式我真希望希望
没有……不知道你说的 PHP 有 cache 起来究竟是指些什麽。如果
是指像是 Smart这样的模板引擎的快取机制,他也是会先经过上述
将资料与模板进行合并产出 HTML 文件的过程,那是 Smart提供的
而不是 PHP 提供的。
另外前端框架比如 Vue 有提供元件样板(template) ,但那与像
是 Jinja2 这类的模板引擎并不相同,上面尤大大那篇回答我真的
建议您可以看一下。
19F:→ superpandal: 我说的自动化测试是智能测试 因应那个主题的智能 鸡 01/12 02:06
20F:→ superpandal: 蛋挑骨头 01/12 02:06
21F:→ superpandal: 根本牛头不对马嘴再来嘴别人不懂 01/12 02:09
自动化测试就自动化测试,智能测试又是什麽辣><
22F:→ superpandal: 没带过新人也不适合带人 你管我怎麽论述 一定得要有 01/12 02:18
23F:→ superpandal: 专业的区隔感才可以吗? 01/12 02:19
这不是专业的区隔感,是描述问题的精确性,你如果做了很多并不
那麽精确的描述,而且这不是为了比喻所以才用白话叙述,甚至说
了些似是而非的东西,那只是「竹篙凑菜刀」而已。
24F:→ superpandal: 你只是自动而非智能 不然也不用人回报问题 01/12 02:20
25F:→ superpandal: 说说的cache肯定是php的 而且框架本来就很多组件 这 01/12 02:24
26F:→ superpandal: 不是蓝加黄必须命名为绿的问题 01/12 02:24
27F:嘘 MoonCode: 红明显 你们两个人一起定义并给出一个模板引擎的语法後 01/12 02:24
28F:→ MoonCode: 然後同时开个 GitHub repo 提交实作 看谁做得出来好 01/12 02:24
29F:→ MoonCode: 了 这是我在知乎看到人家吵架的时候的解法 只是给个建 01/12 02:24
30F:→ MoonCode: 议 以和为贵喔 01/12 02:24
这我是没问题啦。另外如果你对於我上面的内容和我的说法有什麽
问题也可以提出来呀,我会这样说是因为在我认知和所接收到的资
讯(比如上面 Evan You 的说法)中,大多数人在这样情境下谈及
的模板引擎并不是他所说的那样。
如果他本身传递的内容就是错误的,这样的状况和你说的知乎上那
件事是不同的。
31F:→ superpandal: 我已经描述的很准确了 如果要挑准确性 这个版很多都 01/12 02:26
32F:→ superpandal: 很不准确 你要挑毛病是挑不完的 如楼上所说尽量换位 01/12 02:27
33F:→ superpandal: 思考 不口出恶言 01/12 02:27
34F:→ MoonCode: 我记得当初在知乎的那两个人是在吵谁比较懂 c 的 prepr 01/12 02:28
35F:→ MoonCode: ocessor 跟 lexer 01/12 02:28
36F:推 MoonCode: 01/12 02:32
37F:→ superpandal: 是你接受不了还是这是个错误? 强大的模板还是模板 01/12 02:39
虽然不是很懂你想要表示什麽,但是好像感觉很厉害的样子:)
38F:→ superpandal: 你刚刚讲过 模板与框架 这是回应 01/12 02:49
39F:推 tnfshjcc: 我只记得s大不刷题 01/12 04:15
40F:→ Firstshadow: 请定义一下你们认知的模板== 01/12 05:11
41F:→ Hsins: 看一下文啦,我有给出定义。 01/12 08:11
42F:→ superpandal: 我确实不刷题 如上篇所说我不觉得这是什麽了不得的技 01/12 08:25
43F:→ superpandal: 术 要做都做的出来 比较底层的知识才是宝贵的 01/12 08:26
44F:推 superpandal: 至於模板应该是特性符合就是了 01/12 08:29
刷题或许不是什麽了不得的技术,但他考验的也是你所谓的底层的
知识:资料结构与演算法。另外这个不太了不得的技术,也不知道
你刷不刷得动呢。
45F:推 CRPKT: 尤雨溪的说法是准确的,详细来说,任何模板功能的核心都是 01/12 11:17
46F:→ CRPKT: string * data -> string 01/12 11:17
47F:→ CRPKT: 至於延伸的功能怎样算,就要另外讨论了 01/12 11:18
48F:→ xxi511: S大你说的是不是webpack 的hot reload 01/12 12:19
49F:→ ttss4092: 他是不是只是想说开发时的 autoreload 而已 01/12 13:01
50F:→ ttss4092: 他的文字表达真的不是很好懂 01/12 13:02
51F:推 Lomonosov: 真的难懂 我觉得S大与其描述自己用的技术做了什麽 不如 01/12 13:08
52F:→ Lomonosov: 直接说自己用什麽技术 01/12 13:08
53F:→ superpandal: 是 这很多框架都有 来这边本来就没要谈什麽技术 本来 01/12 15:33
54F:→ superpandal: 就几句带过就可以 是有人想要挑骨头反应过激 01/12 15:34
55F:→ superpandal: 其实不只开发 生产都可以用 01/12 15:38
56F:→ superpandal: 那推文的重点其实不是这个 只是表达这不是真正有技术 01/12 15:39
57F:→ superpandal: 含量的东西 01/12 15:39
58F:→ superpandal: 所以推荐该楼楼主最好还是碰底层比较好 01/12 15:40
原 Po 在文章里面提及有太多技术都可以实现网站後端,甚至是前
後端可以一起包,对照他说的熟悉 Vue 和 React 的说法,以及谦
称自己没有什麽头绪,我补充了关於框架和模板引擎的部分。
你倒好,扯个似是而非的东西出来,嘴里说着模板语言现在又成了
热重载(hat reloading)...... 可能你是名不经传的大神,这样
的东西都能随随便便「自己碰就能做出差不多的工具」,顺带跟你
提一下好了,不同模板引擎有不同的实作方式,有的甚至自定义了
自己的 BNF规则,并根据该规则解析模板字串来构造抽象语法树,
最後才是透过抽象语法树把丢入的资料生成出字串。
我不知道你说的底层是什麽啦,以 Web仔来说去跟网通系统厂工程
师谈底层,我是没什麽脸;至於要解释成底层知识,我不觉得编译
设计原理不隶属於其中。
俗话说哦鸡蛋里捡骨头找麻烦是因为鸡蛋里不会有骨头,你是丢了
骨头进去污染了鸡蛋让人捡,还怪人反应过激?我还是那句话啦!
传递错误的知识比藏拙还可恶。
59F:→ MoonCode: 你吃过鸡仔蛋吗 01/12 19:45
60F:→ superpandal: 你看得懂那是两句话吗 我上篇提的是web技术 而不是刷 01/12 20:56
61F:→ superpandal: 题技术 只是纯粹陈述事实 你还可以联想到轻视的意思 01/12 20:57
62F:→ superpandal: 刷题有少少底层没错 但知识只是冰山一角 01/12 20:58
那是问句呀,我自己觉得刷题不容易呀!您觉得不是什麽了不得的
技术那您一定信手拈来就在周赛榜上有名了吧:)
63F:→ superpandal: 热重载对於现今模板技术中不重要? 如你所说模板可以 01/12 20:59
64F:→ superpandal: 有很多方式实现 所以我关心要怎麽实现了? 01/12 21:00
我很期待您分享一下热重载对於现今模板技术的重要性,真的!
65F:→ superpandal: 肯定不是脸的问题 我都不能以web评web搂 我只是陈述 01/12 21:02
66F:→ superpandal: 事实web本来就不会高深 也许他会觉得很有趣 但时间久 01/12 21:03
67F:→ superpandal: 还是会懂 我什麽时候跟他谈底层? 请你告诉我 01/12 21:03
68F:→ superpandal: 反应过激还怕人说阿 明显不针对人 你在那边自以为眼 01/12 21:05
69F:→ superpandal: 尖做出来的反应不是反应过激是什麽 另一个词讲就是脑 01/12 21:05
70F:→ superpandal: 补 传递什麽错误知识? 我主要传递的是web技术并没高 01/12 21:08
71F:→ superpandal: 深 你还探讨别人是不是推论错误 然後嘴又很臭 我是在 01/12 21:09
72F:→ superpandal: 做学问? 01/12 21:10
我是觉得 Web技术很高深啦!当然上述的内容在使用上看起来可
能是很浅显的,但要发展到今天的规模和支持这麽多的项目,中
间一定有很多细节。我没有自以为眼尖,只看到有人穿凿附会东
拼西凑,在资讯科学领域里面,我们都不应该频频「举烛」:(
73F:→ superpandal: 至於工具 有很多人都做的出来 自己做工具不用考虑与 01/12 21:17
74F:→ superpandal: 别人经验差距 也不一定得要协同做出 要做出好用差不 01/12 21:18
75F:→ superpandal: 多的不难 01/12 21:18
76F:→ superpandal: 上层工具做的出来是神 下到上都做的出来不就是上帝.. 01/12 21:22
77F:→ superpandal: 我肯定不是神 因为神不神不是我定义的 也是做不到很 01/12 21:23
78F:→ superpandal: 多事情 01/12 21:23
这边我就不知道你在说什麽了,但好像听起来还是很厉害的样子
。您一定很厉害的,什麽东西都瞧不上,什麽东西又都能说一说
,至少比我厉害的多了,在我眼中真的很神 :)
79F:→ superpandal: "如上篇所说我不觉得这是什麽了不得的技术" 上篇我说 01/13 18:42
80F:→ superpandal: 的是web技术而不是刷题技术 不用联想在一起 XD 01/13 18:44
81F:→ superpandal: 我不爱分享所以不用谈这个 XD 至於web我看法不同 其 01/13 18:48
82F:→ superpandal: 实不高深 很多细节本身也只是为了隐藏实作方式而已 01/13 18:49
83F:→ superpandal: 并不是很重要 你没有眼尖会看到别人说的只言片语反应 01/13 18:50
84F:→ superpandal: 这麽大? 穿凿附会? 本身就有影响的附会什麽? 我在做 01/13 18:52
85F:→ superpandal: "专"题? 这个版是软工不是资料科学研究 01/13 18:53
抱歉,我觉得都是很了不得的技术,是有很多前人铺好了路把很
多东西抽象了才能让你这样拼凑 API就觉得好像完成了全世界。
我不知道为什麽你感觉什麽东西都能够瞧不上眼,您如果觉得你
说的热启动对於现今的模板引擎有重大影响,您倒是说说呀!让
人长长见识开开眼界,而不是喷了一句闪人又补一句说自己不爱
分享就作罢呀。
对了,我上面说的是资讯科学不是资料科学。我很期待跟您讨论
技术,毕竟我觉得这些东西就像汪洋的大海,我只是在旁边捡着
石头的小孩子而已:) 如果能够得到您的指教那一定可以让我成
长很多的吧!
86F:→ superpandal: 最後面那个我在说什麽? 回应你嘴臭酸人的说法 说自己 01/13 18:55
87F:→ superpandal: 不是大神 没有瞧不上 只是在说事实 01/13 18:57
88F:→ superpandal: 不需要膜拜技术 把技术看很高 掌握技术才是真的 XD 01/13 19:00
怎样才算是掌握技术呢?好想知道认为这些技术都不是什麽大不
了的东西的大大跟我分享><
89F:推 tnfshjcc: 我忘记s大有没有抱怨台湾找不到好工作 只记得s大不刷题 01/14 08:07
※ 编辑: Hsins (111.71.215.8 台湾), 01/14/2022 14:09:16
90F:→ superpandal: 你是不是觉得别人只会拼凑api? XD 不是瞧不上 是太多 01/14 23:12
91F:→ superpandal: 浪费时间的技术 计算机本来就是要方便 你要我说我就 01/14 23:13
92F:→ superpandal: 说? 本来就是发表看法不然呢 你自己先把你之前推文 01/14 23:14
93F:→ superpandal: 发表的看法详细解释再说 原来以上只有一句... 01/14 23:14
94F:→ superpandal: 当然在你这位大佬口中说资料科学就low掉了 这是人造 01/14 23:16
95F:→ superpandal: 海洋 你都可以喷人了怎麽会是小孩呢? 肯定是大人 要 01/14 23:17
96F:→ superpandal: 管东管西才能心情舒坦 我在指你只是在膜拜技术 你会 01/14 23:18
97F:→ superpandal: 创造不就证明你不是一无所获了 当然我不知道你能不能 01/14 23:19
98F:→ superpandal: 本人被你喷的一无是处才要静听观摩你的高见 01/14 23:20
99F:→ superpandal: 我不是抱怨台湾找不到好工作 是台湾好工作真的少 以 01/14 23:24
100F:→ superpandal: 我的level当然不如楼主这麽有行情 深入了解别人的工 01/14 23:25
101F:→ superpandal: 程运作原理 01/14 23:26