Re: [討論] PHP顯示出html的速度差別!?

看板PHP作者 (㊣祕密情報員)時間10年前 (2013/12/30 12:14), 編輯推噓10(10040)
留言50則, 10人參與, 最新討論串2/2 (看更多)
※ 引述《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

12/30 12:48, , 1F
嗯~ 總之就是這一篇說的這樣啦 XD
12/30 12:48, 1F

12/30 13:02, , 2F
恩,了解,感恩大大的分享.
12/30 13:02, 2F

12/30 23:08, , 3F
pro!
12/30 23:08, 3F

12/31 09:58, , 4F
請問HTML先出來再用Javascript去讀PHP後innerHTML進td的作法
12/31 09:58, 4F

12/31 09:58, , 5F
是否就變成Ajax而比這兩例效能更差?
12/31 09:58, 5F

12/31 10:18, , 6F
樓上那是個有趣的問題...
12/31 10:18, 6F

12/31 10:22, , 7F
那會把一個request切成兩個以上request,但你html的部份可
12/31 10:22, 7F

12/31 10:23, , 8F
以丟給nginx之類的做快取,就不用通過PHP去執行,這對效能
12/31 10:23, 8F

12/31 10:23, , 9F
來說是比較好的作法。但缺點是會對SEO有影響,那些網路蜘蛛
12/31 10:23, 9F

12/31 10:24, , 10F
通常不會看ajax抓出來的資料。
12/31 10:24, 10F

12/31 10:25, , 11F
也就是說,比較適合一些私人的東西,例如Facebook、GMail就
12/31 10:25, 11F

12/31 10:25, , 12F
這樣搞
12/31 10:25, 12F

12/31 10:26, , 13F
而且以後做負載平衡時還可以把html等靜態資料主機跟php分開
12/31 10:26, 13F

12/31 10:26, , 14F
,這會是比較好的作法。
12/31 10:26, 14F

12/31 12:26, , 15F
Ajax是另一個問題吧 他應用在有互動性或多層次查詢的時
12/31 12:26, 15F

12/31 12:27, , 16F
候 把一個大批次查詢切割成若干個小的查詢 每次輸出的資
12/31 12:27, 16F

12/31 12:28, , 17F
料量相對也少 而且受到使用者操作時間的影響 加總的效率
12/31 12:28, 17F

12/31 12:29, , 18F
並不像單一表格輸出要求那麼高 而且是有利介面設計的
12/31 12:29, 18F

12/31 12:33, , 19F
反過來講 如果是一個批次查詢的大表格 硬要用ajax可以算
12/31 12:33, 19F

12/31 12:33, , 20F
是規劃的錯誤
12/31 12:33, 20F

12/31 14:24, , 21F
說到ajax 就想到可怕的GoogleBot 會解析JS OAO...
12/31 14:24, 21F

12/31 15:42, , 22F
GoogleBot 會解析JS!! 太強大了.... OAO!!
12/31 15:42, 22F

12/31 16:46, , 23F
我某個純AJAX (沒JS就只是個空樣板) 的網站
12/31 16:46, 23F

12/31 16:47, , 24F
就這樣被GoogleBot爬內容了 看log也有GoogleBot
12/31 16:47, 24F

12/31 16:48, , 25F
去爬AJAX資料的log... Google超可怕的啦!!!
12/31 16:48, 25F

12/31 21:49, , 26F
Google有寫一隻專門爬AJAX的機器人 囧
12/31 21:49, 26F

01/01 07:42, , 27F
看不懂"..純AJAX (沒JS...",恐怖的是沒JS,GoogleBot解析JS
01/01 07:42, 27F

01/01 18:03, , 28F
(沒JS"的話"就只是個空樣板)
01/01 18:03, 28F

01/01 20:22, , 29F
抽掉JS就只剩下空殼 網站一切資料都使用AJAX撈出的意思
01/01 20:22, 29F

01/01 20:25, , 30F
如果一個頁面需要用到多個不同性質的資料 $arr1、$arr2、
01/01 20:25, 30F

01/01 20:26, , 31F
$arr3等 並且這些資料在頁面上都有各自不同的使用區塊,那
01/01 20:26, 31F

01/01 20:28, , 32F
就會讓整體程式碼有好幾個包含html碼的<?php...?>區塊,如
01/01 20:28, 32F

01/01 20:29, , 33F
果加上其中又有判斷式又不想使用echo輸出html碼的時候,就
01/01 20:29, 33F

01/01 20:30, , 34F
會變成<?php...<?php...?>...?>這種巢狀的區塊, 總覺得這
01/01 20:30, 34F

01/01 20:31, , 35F
樣的呈現方式很雜亂, 不知道版上的前輩對於這樣的狀況有
01/01 20:31, 35F

01/01 20:31, , 36F
沒有什麼解決之道呢?
01/01 20:31, 36F

01/01 22:02, , 37F
就smarty那些東西啊....
01/01 22:02, 37F

01/01 22:04, , 38F
還有,妳可以考慮使用MVC,不過不管切的再怎麼乾淨,還是會
01/01 22:04, 38F

01/01 22:04, , 39F
有html跟後端程式碼混在一起的片段在,只是規模大不大、有
01/01 22:04, 39F

01/01 22:05, , 40F
沒有把討厭的東西收到看不見的地方去而已
01/01 22:05, 40F

01/01 22:29, , 41F
這沒什麼啊 過度的潔癖是不衛生的
01/01 22:29, 41F

01/01 22:30, , 42F
如果潔癖到一點php code都不想在看板裡看到 那就ajax囉
01/01 22:30, 42F

01/01 22:41, , 43F
感謝樓上兩位. 推過度的潔癖是不衛生的XDD
01/01 22:41, 43F

01/01 23:43, , 44F
:) 至少就我接觸到的習慣,與其把全部code都費勁藏起來
01/01 23:43, 44F

01/01 23:44, , 45F
不如把他收拾乾淨、整理好,讓前端也能看懂剩下的部份
01/01 23:44, 45F

01/02 00:29, , 46F
用ajax的話會變成js跟html混在一起,某種程度只是把髒的地
01/02 00:29, 46F

01/02 00:29, , 47F
方推到前端去而已....
01/02 00:29, 47F

01/02 01:24, , 48F
反正js也能全部封裝進lib再調用阿,只要看不到就沒差
01/02 01:24, 48F

01/02 11:44, , 49F
如果用backbone.js那種新兵器,好像就可以在前端達成MVC
01/02 11:44, 49F

01/02 11:44, , 50F
並且code和HTML完全分離!?
01/02 11:44, 50F
文章代碼(AID): #1ImFCLpi (PHP)
文章代碼(AID): #1ImFCLpi (PHP)