PAC文件怎么写便于维护?(顺带抛砖引玉)

上网、浏览、聊天、下载等
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

PAC文件怎么写便于维护?(顺带抛砖引玉)

#1

帖子 科学之子 » 2016-07-10 16:55

PAC文件怎么写便于维护?(顺带抛砖引玉)
这是我目前能想到的最好的便于维护的PAC了
有没有更方便维护的?
以下代码不够高效,更高效代码见4楼
感谢 astolia 提示

代码: 全选

var patterns=[
"google.com",
"zh.wikipedia.org",
"gstatic.com",
"blogspot.com",
"blogger.com",
"googleusercontent.com",
"twitter.com",
"googleapis.com",
"google.com.hk",
"blogblog.com"
];
function FindProxyForURL(url, host)
{
	for (var i = 0, len = patterns.length; i < len; i++)
	{
		if (shExpMatch(host, patterns[i])||(shExpMatch(host, "*."+patterns[i])))
		{
			return "PROXY 127.0.0.1:80";
		}
	}
	return "DIRECT";
}
思路借鉴了Firefox的"FoxyPAC"生成的文件
上次由 科学之子 在 2016-07-11 23:07,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6421
注册时间: 2008-09-18 13:11

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#2

帖子 astolia » 2016-07-10 17:40

讲究查询性能的话,别用数组,用对象属性,域名分段查询。即对于a.b.c,先查a.b.c是否存在,再查b.c,以此类推
头像
astolia
论坛版主
帖子: 6421
注册时间: 2008-09-18 13:11

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#3

帖子 astolia » 2016-07-10 18:48

另外gfwlist2pac可以从gfwlist生成pac文件,它的查询算法更快,但不适合手工写列表维护
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#4

帖子 科学之子 » 2016-07-11 22:26

astolia 写了:另外gfwlist2pac可以从gfwlist生成pac文件,它的查询算法更快,但不适合手工写列表维护
好像人工写只是稍微费事一点
除了字符串,还要加个属性值这种方法才有效

代码: 全选

// Generated by gfwlist2pac
// https://github.com/clowwindy/gfwlist2pac

var proxy = "PROXY 127.0.0.1:80";

var domains = {
'github.com':0,
'blogblog.com':0
};

var direct = 'DIRECT';

var hasOwnProperty = Object.hasOwnProperty;

function FindProxyForURL(url, host) {
    var suffix;
    var pos = host.lastIndexOf('.');
    pos = host.lastIndexOf('.', pos - 1);
    while(1) {
        if (pos <= 0) {
            if (hasOwnProperty.call(domains, host)) {
                return proxy;
            } else {
                return direct;
            }
        }
        suffix = host.substring(pos + 1);
        if (hasOwnProperty.call(domains, suffix)) {
            return proxy;
        }
        pos = host.lastIndexOf('.', pos - 1);
    }
}
头像
astolia
论坛版主
帖子: 6421
注册时间: 2008-09-18 13:11

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#5

帖子 astolia » 2016-07-12 1:23

你找的这个版本又不是查询最快的,我记得最快的一版是这种的

代码: 全选

var domains = {
 'com':{
  'github': 0
 }
};
只有对上千条规则的那种才会有点效果,对纯手工弄的几十上百条来说速度上没什么明显的差异
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#6

帖子 科学之子 » 2016-07-12 3:15

astolia 写了:你找的这个版本又不是查询最快的,我记得最快的一版是这种的

代码: 全选

var domains = {
 'com':{
  'github': 0
 }
};
只有对上千条规则的那种才会有点效果,对纯手工弄的几十上百条来说速度上没什么明显的差异
原来最快的是这样写啊...
有无版本地址?我谷歌搜不到...
我用的是这个:https://pypi.python.org/pypi/gfwlist2pac
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#7

帖子 科学之子 » 2016-09-15 2:26

astolia 写了:你找的这个版本又不是查询最快的,我记得最快的一版是这种的

代码: 全选

var domains = {
 'com':{
  'github': 0
 }
};
只有对上千条规则的那种才会有点效果,对纯手工弄的几十上百条来说速度上没什么明显的差异
为了把这个折腾出来特意学了Python
但折腾出来之后发现比原来的更慢?
折腾结果帖子:
viewtopic.php?f=63&t=480527&p=3175419#p3175419
名字其好啦
帖子: 4
注册时间: 2018-08-03 21:35
系统: ubuntu

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#8

帖子 名字其好啦 » 2018-12-03 17:16

自己临时学了以下js 写了一个利用map查询的 感觉map查询不会太慢吧

代码: 全选

//需要筛选的网站 0为直连  1为走代理   不匹配走直连 
//请不要要将"www"  "com"  "cn"  等常见字符加入到map中 
var map=new Map([
["google",1],
["wikipedia",1],
["dynu",1],
["wikipedia",1],
["archive",1],
["jsfiddle",1],
["baidu",1],
["www.baidu.com",0],

]);

function FindProxyForURL(url, host)
{
	//host根据"."拆分为数组a  起始位为0
	var a=host.split(".")
	//将数组0也加入对比 是防止输入类似 google.com 时不走代理
	if(map.get(host)==1||map.get(a[1])==1||map.get(a[0])==1||map.get(a[2])==1||map.get(a[3])==1||map.get(a[3])==1){
		/*
		//允许特殊情况 强制直连
		if(map.get(host)==0){
			return "DIRECT";
			
			}
		*/
		return "SOCKS5 127.0.0.1:1080";
	}
   
}
头像
astolia
论坛版主
帖子: 6421
注册时间: 2008-09-18 13:11

Re: PAC文件怎么写便于维护?(顺带抛砖引玉)

#9

帖子 astolia » 2018-12-03 17:41

名字其好啦 写了: 2018-12-03 17:16 自己临时学了以下js 写了一个利用map查询的 感觉map查询不会太慢吧
写代码不要凭感觉。从原理上来讲,Object也是键值对,而且限定了键类型为文本,给js引擎的优化空间更大。前几年的各种实测也显示了在随机查找上Map往往比Object还慢些,快的时候也是同一个数量级
回复