Re-wrote parsing for ISO-type data (isis, marc) to use in-memory cache of
[webpac] / all2xml.pl
index 76009de..98f5de1 100755 (executable)
@@ -61,6 +61,8 @@ my %type2tag = (
        'feed' => 'feed'
 );
 
+my $cache;     # for cacheing
+
 sub data2xml {
 
        use xmlify;
@@ -90,7 +92,15 @@ sub data2xml {
                return $va <=> $vb;
        }
 
-       foreach my $field (sort by_order keys %{$config->{indexer}}) {
+       my @sorted_tags;
+       if ($cache->{tags_by_order}->{$type}) {
+               @sorted_tags = @{$cache->{tags_by_order}->{$type}};
+       } else {
+               @sorted_tags = sort by_order keys %{$config->{indexer}};
+               $cache->{tags_by_order}->{$type} = \@sorted_tags;
+       }
+
+       foreach my $field (@sorted_tags) {
 
                $field=x($field);
                $field_usage{$field}++;
@@ -167,8 +177,9 @@ sub data2xml {
                                # filter="name" ; filter this field through
                                # filter/[name].pm
                                my $filter = $x->{filter};
-                               if ($filter) {
+                               if ($filter && !$cache->{filter_loaded}->{$filter}) {
                                        require "filter/".$filter.".pm";
+                                       $cache->{filter_loaded}->{$filter}++;
                                }
                                # type="swish" ; field for swish
                                if ($swish) {