講個幹話:臺灣的民主,就是的聲音大就聽誰的。
公民的投票權,是給了解議題、有自己想法的人,一個表達想法給政府的機會。然而 2021 四合一公投看到的變成這樣 OO 黨「請投四個同意」、XX 黨「請投四個不同意」,這是誰的想法?投票人的嗎?
到底有多少人會在投票前,花時間蒐集資料來了解優點缺點?還是大家都已經被學校洗腦,反正選擇題有及格就好?
軟體開發、伺服器和生活瑣事
講個幹話:臺灣的民主,就是的聲音大就聽誰的。
公民的投票權,是給了解議題、有自己想法的人,一個表達想法給政府的機會。然而 2021 四合一公投看到的變成這樣 OO 黨「請投四個同意」、XX 黨「請投四個不同意」,這是誰的想法?投票人的嗎?
到底有多少人會在投票前,花時間蒐集資料來了解優點缺點?還是大家都已經被學校洗腦,反正選擇題有及格就好?
網站上常見的資源,像是 HTML、CSS、JacaScript、JSON 等等,其實都是文字組成的,而文字壓縮以後大小可以縮小到剩下 10% 左右,因此有些人主張先將圖片轉成 data URI 在用 gzip 壓縮。
Nginx 可以在遇到特定類型的檔案內容時,啟用 gzip 壓縮後再傳輸資料,透過這個方法來加快傳輸速度:
server { .... gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; # 排除不支援的瀏覽器 }
再來要注意,不是所有類型的檔案壓縮以後檔案會變小,像是圖片、影片就不適合使用 gzip 壓縮。這邊新增 MIME type 類型,讓 Nginx 只壓縮真正有效的檔案類型:
所以用 gzip_types
來更新一下 Nginx 的設定檔:
server { gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; gzip_types text/x-component text/css application/x-javascript application/javascript text/javascript text/x-js text/richtext text/plain text/xml; }
另外有個注意事項,gzip 可以調整壓縮等級:使用較高的的壓縮率,可以讓檔案盡可能的縮小,但壓縮會花掉較多的時間;使用較低的壓縮率,檔案大小只會縮小一點點,但是只需要一瞬間的時間。所以這個參數就要取決於網站的特性、主機的硬體配備來調整。比較中庸的設定如下:
server { gzip on; gzip_disable "MSIE [1-6].(?!.*SV1)"; gzip_types text/x-component text/css application/x-javascript application/javascript text/javascript text/x-js text/richtext text/plain text/xml; gzip_comp_level 6; # from 0 to 9 }
PHP 是一種直譯式語言,也就是說程式碼開起來以後,讀一行、執行一行,軟體修改後不須重新編譯,直譯器重新再讀取一次即可看到修改後行為上的差異。
這在開發環境是一個非常棒的特性,可以加速開發的迭代速度。但也有缺點,當程式確定要上產品線以後,在正式主機上 PHP 也是讀一行執行一行,每次使用者造訪網頁時都要開啟程式碼讀取一次。
之前在 2010 年時,是讓 PHP 搭配 APC 來將讀取過的結果暫存起來,現在 PHP 官方已經內建 OPcache 工具來處理,不用另外安裝工具。OPcache 會將已翻譯過得檔案建立快取,只要程式碼沒有變更過且有快取可用,PHP 就會直接從快取來執行而不重新讀取程式碼,這對產品線上不常更動的程式非常有用。
開啟 php.ini
並找到 [opcache]
:
[opcache] opcache.enable = 1 ; 設定為啟動 opcache.memory_consumption = 512 ; 使用 512MB 的記憶體做快取
主要就上面這二個設定,其他的可以看說明再調整。
接下來要注意的就是觀察主機記憶體使用量,千萬不要讓記憶體吃光開始使用 SWAP,不然就會變成沒有開啟 OPcache 那樣慢了。
跑去 CanIUse 查了一下,原來 Safari 尚未完全支援 webp 影像格式:
未來似乎會完整支援,這樣以後網站上的圖片就先都轉 webp 好了,檔案比較不佔空間、傳輸速度也較快。
追 logs 時,留意到一些 bot 都會特別去戳 HTTP CONNECT 這個 method,看了文件才知道可能是在偵測主機是否可以當成跳板來使用,因此針對這些 methods 建立規則。
多數平台應該都會使用 RESTful 的概念來設計 API,所以會用到的應該是 GET
, POST
, PUT
, DELETE
:
if ($request_method !~ ^(GET|HEAD|POST|DELETE)$ ) { return 444; }
這個方法用了一陣子,直到有次發現 WordPress 的某些 API 一直故障、出錯,但又不是功能導致的問題,使用開發人員工具以後,才知道不是只有 RESTful 定義的幾個 HTTP method 會被用到。
最後改成只擋比較有風險的二個 HTTP method:
if ($request_method ~ ^(CONNECT|TRACE)$ ) { return 444; }