PageSpeed - 減少無用的 CSS
說明使用 PageSpeed 或 Lighthouse 測試網頁的時候,很容易遇到這個錯誤,原因也如字面上一樣的淺顯易懂,就是 CSS 過大。可參考官方提供的如何減少無用的 CSS 建議作法。 解決方法我整理了以下幾種解決方法 壓縮 CSS 減少無用的 CSS 拆分檔案 壓縮 CSS由於有另一個檢測項目就是壓縮 CSS,所以文件沒有寫到,這邊就大概提一下。現在很多框架和工具都可以壓縮 CSS,所以也算是有效又簡單解決方案之一,就不做過多說明。 減少無用的 CSS如同字面上和官方文件所說,找出並刪除無用的 CSS。然而實務上常常會直接使用 CSS 框架,例如 Bootstrap,很容易就無法通過這項檢測。在允許的情況下,我們可以嘗試只引用需要的部分,例如原本在 SCSS 中引用 Bootstrap 可能是這樣寫: 1@import "bootstrap"; 改為依據實際情況引用需要部分 12345678910111213141516171819202122232425262728293031323334353637@import "bootstrap/f ...
非同步載入 CSS
本篇文章說明無樣式內容閃爍 FOUC(Flash of unstyled content)、渲染阻塞 (render-blocking) 的問題,以及如何非同步載入 CSS。 無樣式內容閃爍英文為 FOUC(Flash of unstyled content),這是 HTML 載入後就先顯示出來,之後 CSS 才載入進來,會看到沒有套用樣式的 HTML 畫面。而載入 CSS 可能沒有很久,看起來就像閃了一下。除了這個情況之外,現在有很多網頁也有透過 JavaScript 來載入畫面,也會有類似的問題發生。 例如一個使用 Bootstrap 的頁面放入一個按鈕 1<a class="btn btn-primary" href="https://www.google.com/">Google</a> 如果發生了 FOUC 會有一瞬間看到 當樣式載入後才會看到正確的結果 渲染阻塞為了避免上面的情況,瀏覽器使用渲染阻塞 (render-blocking) 來處理,會將一些渲染阻塞資源載入後才開始渲染畫面,而 CSS 是渲染阻塞資 ...
GCP Cloud Monitoring 減少流量和費用
Cloud Monitoring 可以用來監控系統狀態,並透過它來寄出警示通知。主要用來監控硬碟容量和一些自訂狀態,於是在所有機器裝上了 Ops Agent 來監控硬碟狀態。但後來發現帳單的費用驚人,於是研究了一下他的費用和如何降低成本。 費用首先了解一下 Cloud Monitoring 定價,平常用到的只有第一個項目 Monitoring 資料,這部分前 150 MiB 是免費額度,如果能夠壓低在這之下就可以免費使用。本篇文章也是針對這項目說明。 帳單點開帳單可以找到名為 Metric Volume 的項目,這就是 Cloud Monitoring 資料的費用。 可以看到月份的前幾天沒有這項目,大概在 5 號的時候才出現,這是因為前幾天是 150 MiB 的免費額度。可以看到後面每天都花費 $4.3 左右。這是八台主機的情況。 也可以看到多少流量被計算費用 流量從監控的[設定]頁簽中,在 GCP Projects 之下,展開專案名稱,可以看到流量報告。 在 Agent Metrics 最右邊點擊[在 Metrics Exploer 中查看],可以查詢每個時間的流量狀況。 不過這裡無 ...
GCP Cloud Storage 無法下載或複製
問題使用 GCP Cloud Storage 的網頁時,想把物件複製到別的地方,結果出現錯誤無法複製您的物件。 存取遭拒 直接點下載則是出現 12ForbiddenError 403 點擊物件進查看則出現:您必須具備其他權限,才能查看這個物件的中繼資料;請要求物件擁有者授予您「storage.objects.get」權限 (例如為您的帳戶授予身分與存取權管理 (IAM) 儲存空間管理員角色)。 使用指令複製 1gsutil cp gs://backup/20230529.gz gs://archives/20230529.gz 出現錯誤 12Copying gs://backup/20230529.gz [Content-Type=application/octet-stream]...AccessDeniedException: 403 [email protected] does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objec ...
解決 You have already activated x, but your Gemfile requires y
錯誤訊息將專案部署到 Ruby 3 版本的 Production 環境時,網頁跑不起來,在 Nginx 的 error log 出現以下錯誤: 12345678910111213141516171819202122232425262728[ E 2023-03-09 07:36:26.5249 368322/T8 age/Cor/Con/CheckoutSession.cpp:281 ]: [Client 2-12] Cannot checkout session because a spawning error occurred. The identifier of the error is 23a96bb5. Please see earlier logs for details about the error.App 369021 output: Error: The application encountered the following error: You have already activated strscan 3.0.4, but your Gemfile req ...
如何停用瀏覽器轉址
今天在研究部落格搬家的時候,在痞客邦的文章加入了轉址語法進行測試: 1<meta http-equiv="refresh" content="http://xxxx"> 結果在前台網頁被過濾掉,沒有轉址的作用,想再次編輯的時候,一進入文章就觸發轉址轉走,然後就再也無法編輯。 研究了一段時間使用這個方法解決: 打開 FireFox 瀏覽器。 在網址列輸入: about:config 搜索 refresh 找到 accessibility.blockautorefresh 項目。 在右邊的按鈕點一下切成 true 進入編輯文章移除掉語法後再把設定改回來就可以了,如果有使用別人的後台遇到類似事情可以用這個辦法自救。 Chrome 瀏覽器似乎沒有類似的功能,只能使用 FireFox 來處理。
解決 libicui18n.70.dylib (no such file, not in dyld cache)
錯誤訊息最近把 Mac OS 從 Monterey 升級到 Ventura 後, Homebrew 安裝的 Postgresql 就跑不起來: 123456$ brew services info postgresqlWarning: Use postgresql@14 instead of deprecated postgresqlpostgresql@14 (homebrew.mxcl.postgresql@14)Running: ✘Loaded: ✔Schedulable: ✘ 重啟或重新安裝都沒有用,也沒有明確的錯誤訊息。到 Homebrew 的 log 資料夾下查詢: 1$ tail /opt/homebrew/var/log/postgres.log 看到錯誤訊息: 12Referenced from: <B17C4116-8D6C-32B3-8403-3EBE2BBCA14E> /opt/homebrew/Cellar/postgresql@14/14.2_1/bin/postgresReason: tried: '/opt/homebrew/opt ...
利用 binstubs 省略 bundle exec
bundle binstubs在 Ruby 中我們可以使用 Bundler 來管理專案的套件和版本,為了確保執行 rake 等指令時,能使用 Gemfile 一致的設定,我們通常會使用 bundle exec 作為開頭來執行指令,例如: 1bundle exec rake db:migrate 不過每次都要打 bundle exec 顯得有些麻煩,這時候我們可以利用 bundle 的 binstubs 來解決這問題。 例如我們想產生 rake 的 binstubs,輸入 1bundle binstubs rake 會在專案下的 bin 資料夾產生 rake 的 script,這時候執行 1./bin/rake 就相當於 1bundle exec rake 如果想產生全部 binstubs,可以執行 1bundle install --binstubs 不過不建議這樣做,他會在該目錄下產生 .bundler 的設定值,之後只要執行 bundle install 都會重新產生 binstubs,如果有使用 spring 之類的套件會被覆蓋掉。 環境變數產生了 binstubs 之後 ...
Ruby 教學 - 陣列 (Array)
語法一般陣列Ruby 中使用中括號 ([]) 來建立陣列,括號中為陣列元素,以逗點 (,) 隔開: 1p [178, 169.99, "30cm", [9527]] # [178, 169.99, "30cm", [9527]] 陣列中的元素也可以是陣列,而成為多維陣列的應用。 字串陣列Ruby 中另外提供了使用百分比符號 (%) 開頭,加上任意的符號 (非字母數字) 包夾字串陣列元素,以空白隔開,有以下兩種方式: %w{xx oo},不解析內容 %W{xx oo},解析內容 規則和單引號雙引號類似,所有的元素都會是字串型別,如下範例: 1234var = 5566p %w{178 169.99 "30cm" [9527] %w{9527} #{var}} # ["178", "169.99", "\"30cm\"", "[9527] ...
Ruby 教學 - 符號 (Symbol)
語法符號類似一種無法修改的字串,使用冒號 (:) 開頭,有以下三種使用方式: 冒號加名稱,:symbol 冒號加單引號字串,:'symbol' 冒號加雙引號字串,:"symbol" 如下範例: 123p :symbol1 # :symbol1p :"symbol2" # :symbol2p :'symbol3' # :symbol3 程式解析當使用字串形式的時候,也具有和字串一樣程式解析的性質,同樣的是雙引號的時候才有: 1234var = "value"p :"#{var}" # :valuep :'#{var}' # :"\#{var}" 不過一般而言,使用 symbol 通常是固定值,所以這種動態的用法不常使用。 符號的操作符號是無法修改的,但有也部分類似字串的方法: 123456symbol = :"I lose"puts sy ...