作者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/m.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/m.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