restructuring folders

This commit is contained in:
Ilya Ig. Petrov 2015-12-21 02:01:14 +05:00
parent f07a4890f4
commit a44bd22108
17 changed files with 26 additions and 25 deletions

View File

@ -17,27 +17,3 @@ My maxim is _"Your freedom ends when it starts to confine the freedom of others"
Looking at how Russian government [distorts TV](https://therussianreader.wordpress.com/2015/11/22/russian-truckers-strike-dagestan/) and blocks [critics of Putin](http://www.reuters.com/article/2014/03/13/us-russia-internet-idUSBREA2C21L20140313), Looking at how Russian government [distorts TV](https://therussianreader.wordpress.com/2015/11/22/russian-truckers-strike-dagestan/) and blocks [critics of Putin](http://www.reuters.com/article/2014/03/13/us-russia-internet-idUSBREA2C21L20140313),
I decided to write an anti-censorship extension for Chromium before they strike me first. I decided to write an anti-censorship extension for Chromium before they strike me first.
## PAC-Script Performance Analysis
```javascript
if (Is_subdomain_of( host, blocked_hosts ))
return 'use proxy';
```
You have to make `Is_subdomain_of` very fast.
This check is executed on each request. You should watch memeory consumption too.
The naive solution is to keep array of blocked ips and check if the host resolves to one of the ips.
You may do it with `indexOf`, binary search, etc.
The shortcoming of every ip solution is that __some providers resolve blocked hosts to wrong ips__, so we eventually need list of hosts.
I have tested different solutions, and depicted [results](./benchmark/Output.txt) in the following chart:
![Host Lookup Chart: Time-Memory, Hits-Misses](./chart/host-lookup-chart.png)
* __IPs indexOf__ Blocked IP is searched by `indexOf`
* __IPs binary__ Blocked IP is searched by binary search. For some reason miss time slightly increased.
* __IPs switch__ Simply `switch(Blocked_IP) { case1: ... caseN: return true }`. Works even better than binary search. Magic.
* __Hosts switch__ Radix trie built on `switch`. Comparable to __IPs switch__.

View File

@ -0,0 +1,25 @@
## PAC-Script Performance Analysis
Somewhere in PAC-script you may want:
```javascript
if (Is_subdomain_of( host, blocked_hosts ))
return 'use proxy';
```
You have to make `Is_subdomain_of` very fast.
This check is executed on each request. You should watch memeory consumption too.
The naive solution is to keep array of blocked ips and check if the host resolves to one of the ips.
You may do it with `indexOf`, binary search, etc.
The shortcoming of every ip solution is that __some providers resolve blocked hosts to wrong ips__, so we eventually need list of hosts.
I have tested different solutions, and depicted [results](./benchmark/Output.txt) in the following chart:
![Host Lookup Chart: Time-Memory, Hits-Misses](./chart/host-lookup-chart.png)
* __IPs indexOf__ Blocked IP is searched by `indexOf`
* __IPs binary__ Blocked IP is searched by binary search. For some reason miss time slightly increased.
* __IPs switch__ Simply `switch(Blocked_IP) { case1: ... caseN: return true }`. Works even better than binary search. Magic.
* __Hosts switch__ Radix trie built on `switch`. Comparable to __IPs switch__.

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -7,7 +7,7 @@
"generate": "cd pac-generator && npm start", "generate": "cd pac-generator && npm start",
"prestart": "npm run generate", "prestart": "npm run generate",
"start": "npm run bench", "start": "npm run bench",
"bench": "cd Benchmark && dnx run ../pac-generator/generated-PACs", "bench": "cd ./pac-script-performance-analyses/benchmark && dnx run ../../pac-generator/generated-PACs",
"test": "rm -r pac-generator/generated-PACs" "test": "rm -r pac-generator/generated-PACs"
}, },
"author": "ilyaigpetrov", "author": "ilyaigpetrov",