Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:根据条件在内存中加载大量数据_Javascript_Greasemonkey - Fatal编程技术网

Javascript:根据条件在内存中加载大量数据

Javascript:根据条件在内存中加载大量数据,javascript,greasemonkey,Javascript,Greasemonkey,每次我的greasemonkey脚本启动时,我都会自动加载许多不同的正则表达式模式。95%的加载内存在任何阶段都是不需要的,所以我想找到一种方法,如果我知道数据不会被使用的话,一开始就不把数据放到内存中 这是一个基本的例子: var patterns = [ { name : 'p1', url : 'http://www.someurl.com', pattern1 : /./, pattern2 : /./, patte

每次我的greasemonkey脚本启动时,我都会自动加载许多不同的正则表达式模式。95%的加载内存在任何阶段都是不需要的,所以我想找到一种方法,如果我知道数据不会被使用的话,一开始就不把数据放到内存中

这是一个基本的例子:

 var patterns = [
   {
     name    : 'p1',
     url     : 'http://www.someurl.com',
     pattern1 : /./,
     pattern2 : /./,
     pattern3 : /./,
   },
   {
     name    : 'p2',
     url     : 'http://www.someurl2.com',
     pattern1 : /./,
     pattern2 : /./,
     pattern3 : /./,
   },
   {
     name    : 'p3',
     url     : 'http://www.someurl3.com',
     pattern1 : /./,
     pattern2 : /./,
     pattern3 : /./,
   },

 ];
……还有更多的图案


如果url与当前url(location.href)不匹配,我不需要加载任何数据。

如果需要,使用document.write()从单独的javascript文件中包含数据

使用document.write()包含单独javascript文件中的数据(如果需要)

由于这是一个GreaseMonkey脚本,我假设它驻留在用户的机器上,而不是从外部站点生成的。如果不是这样的话,你可能想考虑基于URL即时生成JavaScript。
否则,您可以将模式分配JavaScript存储在单独的文件中,根据加载的站点的URL只检索其中一个文件,并通过eval()运行其内容,就像它是一个JSON请求一样。

由于这是一个GreaseMonkey脚本,我假设它驻留在用户的机器上,而不是从外部站点生成的。如果不是这样的话,你可能想考虑基于URL即时生成JavaScript。
否则,您可以将模式分配JavaScript存储在单独的文件中,根据加载的站点URL仅检索其中一个文件,并通过eval()运行其内容,就像它是一个JSON请求一样。

最好的方法是,如果您可以通过GM_getResourceText+eval按需加载数据。元数据块中定义的资源数据将在userscript的第一次安装时下载

文件:

您需要考虑如何存储数据-可能每个站点都有一个资源(我知道)


缓解性能问题的另一个更简单的解决方案是将正则表达式存储为简单字符串,并仅在需要时创建RegExp对象。例如:
patterns:[“,”,“]
newregexp(the_pattern)
当实际需要表达式时。

最好的方法是通过GM_getResourceText+eval按需加载数据。元数据块中定义的资源数据将在userscript的第一次安装时下载

文件:

您需要考虑如何存储数据-可能每个站点都有一个资源(我知道)


缓解性能问题的另一个更简单的解决方案是将正则表达式存储为简单字符串,并仅在需要时创建RegExp对象。例如:
patterns:[“,”,“]
newregexp(the_pattern)
当表达式实际需要时。您可以坚持当前的模式定义,删除所有不需要的模式:

var patterns = [
   //patterns array as defined in question
];
var newpatterns = [];
var count = 0;

for (var i = 0 ; i < patterns.length ; i++ ){
  if (href.indexOf(patterns[i].url) == -1) {
     newpatterns[count++] = patterns[i];
     console.log("remove " + patterns[i].name);
  }
}
patterns = newpatterns;

您可以坚持当前的模式定义,删除所有不需要的模式:

var patterns = [
   //patterns array as defined in question
];
var newpatterns = [];
var count = 0;

for (var i = 0 ; i < patterns.length ; i++ ){
  if (href.indexOf(patterns[i].url) == -1) {
     newpatterns[count++] = patterns[i];
     console.log("remove " + patterns[i].name);
  }
}
patterns = newpatterns;

我不太明白。你能说得更详细一点吗?我不太明白。你能扩展一点吗?我想过这样做,但我不需要有数千个javascript文件和大量重复数据吗?它可能会变得非常混乱。理想情况下,我希望在javascript中内置一个函数,在访问时只加载var中的内容。我考虑过这样做,但我是否不必拥有数千个javascript文件和大量重复数据?它可能会变得非常混乱。理想情况下,我希望在javascript中内置一个函数,在访问时只加载var中的内容。这是一个很好的方法,特别是在需要时只启动模式。这可以马上实现,这是一个很好的方法,特别是在需要的时候启动模式。这可以马上实现。这是一个好主意,但实际上不起作用,因为您仍在将对象加载到内存中,将对象传递给函数,然后将对象加载到内存的另一部分。看起来工作比以前多了!;-)这样一次只加载一个模式,并且只在内存中保存与页面相关的模式。这是一个好主意,但实际上不起作用,因为您仍在将对象加载到内存中,将对象传递给函数,然后将对象加载到内存的另一部分。看起来工作比以前多了!;-)这一次只加载一个模式,并且它将只在内存中保留与页面相关的模式。