很多人都有裝Ad Blocker,但你可能會好奇到底Ad Blocker的原理是什麼。

Ad Blocker 最簡單的實作方式有兩種,一種是阻擋Ad Request,另一種是從頁面上移除廣告框。兩種都屬於pattern matching。

Blacklist

Ad Blocker Plus為例,裡面的blacklist用是easylist,一個開源的廣告黑名單。長的是下面這樣子。

&ad_channel=
&ad_classid=
&ad_code=
&ad_height=
&ad_ids=
&ad_keyword=
...

凡是match到這個lsit裡面的request都會被擋掉,實際擋的方式應該是直接用chrome extension API。

移除頁面廣告

基本上原理與blcklist一樣,不過他match的是webpage elements。比如說

 <ad><iframe/></ad>

這會移除掉所有在 <ad> tag裡的iframe。

結論

說起來簡單,但做起來卻是困難的,最主要的困難點便是效能,頁面上有數百數千的element,每一個網站的request同樣至少數十數百,你要最match blacklist的話最簡單的方法是O(n^2),但這很明顯的不夠快,有興趣的話可以看看這篇文章,Adblock Plus and (a little) more, Investigating filter matching algorithms