Ad-filter loading and QRegExp performance

Lubos Lunak l.lunak at suse.cz
Mon Jan 29 16:41:03 CET 2007


On Monday 29 January 2007 15:14, Robert Knight wrote:
> Hello,
>
> Out of curiosity, I did a little profiling of Konqueror ( KDE 4 )
> startup recently using callgrind.
> I was surprised to see that according to the output, about 5-10% of
> the time is spent processing regular expressions for ad filters.

 Does this apply to KDE3 as well?

> QRegExp seems to have a mechanism internally to delay parsing the
> expression until it is needed ( ie. until indexIn() , exactMatch() or
> a similar method is called on the regexp).  Whenever a QRegExp is
> copied, the engine preparation is performed first, so copying a
> QRegExp loses the benefits of this delayed parsing.
> KHTML stores the ad-filters in a QVector<QRegExp> internally, which
> means copies inside Qt when using the append() method to add a new
> filter to the internal list.  This forces all ad-filter reg-exps to be
> parsed on startup.
>
> Konqueror ships with almost 200 ad filters out of the box, and parsing
> all of these takes some time.
>
> Initially I tried replacing QVector<QRegExp> with QVector<QRegExp*>
> instead, but I realised that KHTMLSettings needs to be copied, and so
> these pointers would need to be shared somehow.  I am not sure of the
> best way to do that.

 A simpler way should be storing also QVector<QString>, initially have 
QVector<QRegExp> empty and fill it only when it's needed for the first time.

> The alternative, would be to modify the QRegExp code so that the
> assignment operator did not automatically parse the reg exp.  Who
> should I get in touch with to discuss this?

 That indeed looks like the best choice.

-- 
Lubos Lunak
KDE developer
--------------------------------------------------------------
SUSE LINUX, s.r.o.   e-mail: l.lunak at suse.cz , l.lunak at kde.org
Lihovarska 1060/12   tel: +420 284 028 972
190 00 Prague 9      fax: +420 284 028 951
Czech Republic       http//www.suse.cz


More information about the Kde-optimize mailing list