Turbolinks 實例:最後一根稻草,我終於跟 Turbolinks 說再見了
WriterShelf™ is a unique multiple pen name blogging and forum platform. Protect relationships and your privacy. Take your writing in new directions. ** Join WriterShelf**
WriterShelf™ is an open writing platform. The views, information and opinions in this article are those of the author.
Like
or Dislike
About the Author
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯
More to explore
上個禮拜,我可愛的客戶有個要求,他們要追蹤一個行銷活動的點擊,以前我都是自己直接寫在網站後台,或是用 Google Analytics 的 event 來記錄,但是這次客戶的要求只是一個短暫的行銷促銷點擊紀錄,寫在程式內或是埋 GA event,未來的管理總是一個問題,也很麻煩,所以,我決定使用 Google tag manager,還好,客戶也同意,這樣大家未來都簡單多了,行銷部門也可以更快速,更有彈性的自己建立所需的客戶點擊紀錄。
沒想到,一個簡簡單單的 Google tag manager 安裝,卻讓我吃盡了苦頭,如果各位有看過我寫的 turbolinks 5 介紹:
Rails Turbolinks™ 5 深度研究 — 不管你是愛、還是恨(說得有點超過),但是真的很多 Rails 人乾脆把 Turbolinks 關掉了。 我還是繼續使用中... 什麼是...
Scrivinor 思書: 紅寶鐵軌客
就會知道,Turbolinks 基本上就是將網頁改成 Single Page Application (SPA),但是,它卻是一個半套的 SPA,如果各位讀者有用過 React 或是其他真正 SPA 開發平台,就會知道,SPA 有一個很重要的關鍵觀念,state,也就是狀態,要談 SPA 可能要再寫一本書,我在這就不深談了,也不是說 半套的 Turbolinks 不好,畢竟,SPA 的開發相當的麻煩,很多網站並不需要 SPA,Turbolinks 提供了一個相當有效率的快速開發方式。
想也知道,如果依照 google tag manager 的建議安裝方式,裝在有 Turbolinks 的網站上,一定不會動,會用到 google tag manager 的網站,基本上都已經是運營中的網站了,相對上,這種運營中的網站,工程師不大能上網討論,還不錯,Rails 最好的就是很棒的開發互助社群,這篇是我能找到,介紹安裝最完整的:How to use Google Tag Manager with Rails and Turbolinks,不幸的是,問題並不完全解決,照著文章改好後,Google tag manager 的 debug console 在點擊連結後,就不見了。
說實話,這是我第一次整合 google tag manager 在 rails / turbolinks 上,這時,我只能盡力去了解問題在那裡,對照文章的介紹,我發現與 google tag manager 標準安裝法中,最大的不同點,就是以下這段:
看起來不難,但是很多的疑問就出來了,這段程式很簡單,就只是在 turbolinks 將頁面改變後,更改 dataLayer 這個變數,但是,為什麼要在 turbolinks 頁面更新後,要改變 dataLayer 這個變數?除了 pageview 外,其他的 tag 也需要做 dataLayer 變數改變嗎?dataLayer 變數是什麼?為了知道這些,我必須要進一步的深度了解 Google tag manager 的運作方式,這一研究,就是兩天,我慢慢的知道了 dataLayer 在 Google tag manager 的使用方式,只是,google 也沒有再進一步的說明,其他 tag 與 dataLayer 的關係,說實話,我覺得網站上的討論與我自己的研究,都指向必須用逆向工程來解,也就是 hacking 啦,我突然領悟了,這樣做是不對的,因為:
光這個 google tag manager 的安裝,我就已經花了四天的時間,而且還不知道能不能解決問題,這次更不是第一次,幾乎所有的外部服務或是 open source 的 Javascript 程式,一遇到 turbolinks 都可以說「一定」不會一次就過,都需要改,都需要 hacking, 而且,對我,turbolinks 還有以下的問題:
這裡還有一個很棒的網站,分享著如何「相容」於 Turbolinks:Turbolinks Compatibility,以前,覺得真好,Rails 的社群真棒,可是現在看起來,卻覺得真可怕,怎麼那麼多要改要 hacking 啊!
要死駱駝的最後一根稻草,就是 google tag manager 了,我決定要跟 Turbolinks 說再見了!
如何拔除 Turbolinks?
網路已經有很多分享了,大家都說得很簡單,但是我實際上拔除時,有很多細節要注意:
就這樣,我試過應該就能完整的移除 Turbolinks,當然每個人使用 turbolinks 的形況都不一樣,你必須要每一個功能都重新測試,我就發現好幾個地方要重寫 Javascript。
Turbolinks 移除後有壞處嗎?
目前看不到,我原先擔心網站效率會變慢,但是我的客戶說沒感覺,還說好像更快了,因為剛移除,我會繼續追蹤這點,一旦有新的發現,我會在這裡更新,當然有歡迎大家提供心得。
附註:
下面這篇是我所參考的網路討論:「How to disable Turbolinks」,但是我覺得不完整:
How to disable turbolinks in Rails 5? — It's a constant headache when dealing with websockets, and it kills my performance in addition to adding bugs. Since ActionCable is the whole reason I upgraded I'd very much like to get rid of it Stack Overflow