在不改变 PAC 结果的前提下让它更快
保留重叠的例外与回退顺序,同时减少不必要的 PAC 求值工作。
“把常见情况放在最前面”对 PAC 文件来说是片面的建议。第一个 return 就结束了判断。当规则重叠时,它们的顺序本身就是路由策略的一部分。
设想一个服务走私有代理,而该域名的其余部分走直连:
function FindProxyForURL(url, host) {
host = host.toLowerCase();
if (host === 'restricted.example.net') {
return 'PROXY proxy.example.net:8080';
}
if (dnsDomainIs(host, '.example.net')) {
return 'DIRECT';
}
return 'PROXY proxy.example.net:8080';
}这里的名字只是示例。把宽泛的后缀检查移到精确主机例外之前,受限服务就会直连出去。脚本可能更短或更快,却在做错事。
在不丢失优先级的前提下合并条件
当一个大列表确实是一组同级、同结果且精确的主机名时,合适的查找结构可能比反复的模式检查更清晰。这种等价性必须先被证明。精确名称、wildcard 和地址段规则并不会自动属于同一个可互换集合。
同样,如果两个名字有意使用不同路由,去掉 www. 就是策略变更。优化字符串比较不应悄悄重新定义目标。
去掉判断并不需要的昂贵操作
主机名相等判断不需要 DNS。只有剩余策略确实需要地址时才做解析,并在受支持的 PAC 环境允许复用时,避免在一次求值中重复同一次查询。
在文件旁边放一小组预期判断:那条特定例外、宽后缀下的同级主机、一个无关主机名,以及相关地址字面量。要比较返回的路由以及任何回退条目的顺序,而不只是 JavaScript 能否解析。当这些结果一致后,再确认浏览器确实加载了修改后的 PAC。
只有当同样的用例仍返回原本的路由、并且多余求值工作消失时,性能提升才可信。宽泛的 DIRECT 捷径可以消除延迟,同时改变出口 IP。