作者MOONRAKER (㊣祕密情報員)
看板PHP
標題Re: [討論] PHP顯示出html的速度差別!?
時間Mon Dec 30 12:14:09 2013
※ 引述《kingoface (桑原)》之銘言:
: 哈囉,大家好!
: 小弟剛剛想到了一個頗為無聊的問題.
的確是頗為無聊,根本不用考慮這個問題。
: 需要顯示資料的時候
: 1.
: 我會在<body>上方寫個
: <?php
: $exp_html='<table><tr><td>一堆資料庫的資料</td></tr><table>';
這是不利維護的爛設計,網頁外觀無法由其他人修改。
在團體開發中會整死前端和美術人員,
就算只有一個人在開發,大專案的後期必定令你痛不欲生。
: 2.
: <?php
: //做了一堆資料庫 or foreach的運算 存在 $data
: echo $data;
看不出來這跟1有什麼差別,就只是輸出的那包在同一個php內前面或後面算出來而已。
現在比較理想的作法是把view和其他部份切割開來,
不管你是用MVC,或SMARTY那種不明確的(M/C)+V,原則上都是這樣
(controller.php)
變數 = 資料;
變數 = 資料;
......
參數陣列 = Array( 變數, 變數, 變數, ... );
(以參數陣列代入view.php)
(view.php)
(framework自動打開參數陣列)
<?php echo 變數1; ?>
...
<table>
<?php foreach 變數2 as 列變數 : ?>
<tr>
<td><?php echo 列變數[欄位]; ?></td>
</tr>
<?php endforeach; ?>
</table>
...
這裡面不但把資料準備和資料顯示分開在兩個檔案中
(當然最後view可能還是被include進來在同一個檔案裡,視framework實作而定)
而且資料都是在陣列和物件內包了又包,最後包成參數陣列送給view
這些變數傳遞的成本,並沒有讓MVC或SMARTY慢到人能夠察覺的地步
即使資料再多也一樣。
會慢到有差別,那表示
1)邏輯裡面有多重迴圈不能避免,或者沒察覺到的多重迴圈。
2)資料真的很多很多,多到沒有意義。
在2的狀況,瀏覽器通常會先掛。
--
從前有個馬鈴薯王國 有個高貴偉大的國王
有的人尊敬他 有的人畏懼他 但有個人敢看不起他不只是一條龍
嘿呵 快出動 去征服 去擺平 嘿呵 快出征 去征服那條龍
嘿呵 快出動
(宰了它!轟了它!)嘿呵 快出征 去征服那條龍
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.12.174
1F:推 LaPass:嗯~ 總之就是這一篇說的這樣啦 XD 12/30 12:48
2F:推 kingoface:恩,了解,感恩大大的分享. 12/30 13:02
3F:推 ooopooo:pro! 12/30 23:08
4F:推 k900i:請問HTML先出來再用Javascript去讀PHP後innerHTML進td的作法 12/31 09:58
5F:→ k900i:是否就變成Ajax而比這兩例效能更差? 12/31 09:58
6F:推 LaPass:樓上那是個有趣的問題... 12/31 10:18
7F:→ LaPass:那會把一個request切成兩個以上request,但你html的部份可 12/31 10:22
8F:→ LaPass:以丟給nginx之類的做快取,就不用通過PHP去執行,這對效能 12/31 10:23
9F:→ LaPass:來說是比較好的作法。但缺點是會對SEO有影響,那些網路蜘蛛 12/31 10:23
10F:→ LaPass:通常不會看ajax抓出來的資料。 12/31 10:24
11F:→ LaPass:也就是說,比較適合一些私人的東西,例如Facebook、GMail就 12/31 10:25
12F:→ LaPass:這樣搞 12/31 10:25
13F:→ LaPass:而且以後做負載平衡時還可以把html等靜態資料主機跟php分開 12/31 10:26
14F:→ LaPass:,這會是比較好的作法。 12/31 10:26
15F:→ MOONRAKER:Ajax是另一個問題吧 他應用在有互動性或多層次查詢的時 12/31 12:26
16F:→ MOONRAKER:候 把一個大批次查詢切割成若干個小的查詢 每次輸出的資 12/31 12:27
17F:→ MOONRAKER:料量相對也少 而且受到使用者操作時間的影響 加總的效率 12/31 12:28
18F:→ MOONRAKER:並不像單一表格輸出要求那麼高 而且是有利介面設計的 12/31 12:29
19F:→ MOONRAKER:反過來講 如果是一個批次查詢的大表格 硬要用ajax可以算 12/31 12:33
20F:→ MOONRAKER:是規劃的錯誤 12/31 12:33
21F:→ danny8376:說到ajax 就想到可怕的GoogleBot 會解析JS OAO... 12/31 14:24
22F:推 LaPass:GoogleBot 會解析JS!! 太強大了.... OAO!! 12/31 15:42
23F:→ danny8376:我某個純AJAX (沒JS就只是個空樣板) 的網站 12/31 16:46
24F:→ danny8376:就這樣被GoogleBot爬內容了 看log也有GoogleBot 12/31 16:47
25F:→ danny8376:去爬AJAX資料的log... Google超可怕的啦!!! 12/31 16:48
26F:推 chenlarry:Google有寫一隻專門爬AJAX的機器人 囧 12/31 21:49
27F:→ xxxzzz:看不懂"..純AJAX (沒JS...",恐怖的是沒JS,GoogleBot解析JS 01/01 07:42
28F:→ danny8376:(沒JS"的話"就只是個空樣板) 01/01 18:03
29F:→ DongFeng:抽掉JS就只剩下空殼 網站一切資料都使用AJAX撈出的意思 01/01 20:22
30F:→ DongFeng:如果一個頁面需要用到多個不同性質的資料 $arr1、$arr2、 01/01 20:25
31F:→ DongFeng:$arr3等 並且這些資料在頁面上都有各自不同的使用區塊,那 01/01 20:26
32F:→ DongFeng:就會讓整體程式碼有好幾個包含html碼的<?php...?>區塊,如 01/01 20:28
33F:→ DongFeng:果加上其中又有判斷式又不想使用echo輸出html碼的時候,就 01/01 20:29
34F:→ DongFeng:會變成<?php...<?php...?>...?>這種巢狀的區塊, 總覺得這 01/01 20:30
35F:→ DongFeng:樣的呈現方式很雜亂, 不知道版上的前輩對於這樣的狀況有 01/01 20:31
36F:→ DongFeng:沒有什麼解決之道呢? 01/01 20:31
37F:推 LaPass:就smarty那些東西啊.... 01/01 22:02
38F:→ LaPass:還有,妳可以考慮使用MVC,不過不管切的再怎麼乾淨,還是會 01/01 22:04
39F:→ LaPass:有html跟後端程式碼混在一起的片段在,只是規模大不大、有 01/01 22:04
40F:→ LaPass:沒有把討厭的東西收到看不見的地方去而已 01/01 22:05
41F:→ MOONRAKER:這沒什麼啊 過度的潔癖是不衛生的 01/01 22:29
42F:→ MOONRAKER:如果潔癖到一點php code都不想在看板裡看到 那就ajax囉 01/01 22:30
43F:推 DongFeng:感謝樓上兩位. 推過度的潔癖是不衛生的XDD 01/01 22:41
44F:→ MOONRAKER::) 至少就我接觸到的習慣,與其把全部code都費勁藏起來 01/01 23:43
45F:→ MOONRAKER:不如把他收拾乾淨、整理好,讓前端也能看懂剩下的部份 01/01 23:44
46F:推 LaPass:用ajax的話會變成js跟html混在一起,某種程度只是把髒的地 01/02 00:29
47F:→ LaPass:方推到前端去而已.... 01/02 00:29
48F:→ mmis1000:反正js也能全部封裝進lib再調用阿,只要看不到就沒差 01/02 01:24
49F:→ MOONRAKER:如果用backbone.js那種新兵器,好像就可以在前端達成MVC 01/02 11:44
50F:→ MOONRAKER:並且code和HTML完全分離!? 01/02 11:44