[webkit-gtk] dns prefetching knob

Marco Peereboom slash at peereboom.us
Wed Mar 9 09:44:06 PST 2011

On Wed, Mar 09, 2011 at 08:55:37AM -0800, Martin Robinson wrote:
> On Wed, Mar 9, 2011 at 6:28 AM, Marco Peereboom <slash at peereboom.us> wrote:
> > Hence the knobbing part. ??Some people have legitimate use for it which
> > is of course fine. ??I want it for performance reasons but also to
> > prevent DNS tracking. ??Between DNS prefetching, link hovering and the
> > empty DNS lookups webkit generates one can get near pixel resolution on
> > how the user moves his mouse. ??This comes in handy for "Online
> > Behavioral Tracking". ??Being a practical paranoid I'd like to prevent
> > that.
> Is it possible for you to make the tools you used to generate your
> performance number available publically? This would help us fix any
> performance issues that exist as bugs. This may very well be some
> weird corner case that we're hitting in libsoup. Let's fix it!

Sure, it is far less interesting than you'd hope for ;-)

The patch at the bottom is what generates the numbers I quoted.  It goes
against the in tree cvs version of xxxterm.

Tree is at:
CVSROOT=anoncvs at opensource.conformal.com:/anoncvs/xxxterm

The DNS lookup stuff I measured with the adsuck stats but I don't think
that is pertinent to this discussion.  If you guys want a rundown on
that as well let me know and I'll show ya.

> I do not think there is any harm in exposing this setting. I do
> believe that those pushing for it should try to clarify what it is
> though. From what I gather it's effectively two pieces:
> 1. A backport of a Settings.cpp DNS prefetch change to the stable branch.


> 2. New code which exposes this setting in the WebKitWebSettings WebKitGTK+ API.


> Really it should just be the change to WebKitWebSettings and a request
> to merge both changes back into the stable branch. Be aware that we
> are desperately close to cutting the stable branch for 1.4.x.

This is why I really really really would like to get this cranking :-)

> --Martin

Index: xxxterm.c
RCS file: /cvs/xxxterm/xxxterm/xxxterm.c,v
retrieving revision 1.348
diff -u -p -u -p -r1.348 xxxterm.c
--- xxxterm.c	8 Mar 2011 23:19:36 -0000	1.348
+++ xxxterm.c	9 Mar 2011 17:38:34 -0000
@@ -218,6 +218,9 @@ struct tab {
 	WebKitWebSettings	*settings;
 	int			font_size;
 	gchar			*user_agent;
+	struct timeval		sod;
+	struct timeval		eod;
 TAILQ_HEAD(tab_list, tab);
@@ -492,6 +495,7 @@ char		*user_agent = NULL;
 int		save_rejected_cookies = 0;
 time_t		session_autosave = 0;
 int		guess_search = 0;
+int		dns_prefetch = FALSE;
 struct settings;
 struct key_binding;
@@ -5768,6 +5772,7 @@ notify_load_status_cb(WebKitWebView* wvi
 	struct history		*h, find;
 	const gchar		*s_loading;
 	struct karg		a;
+	struct timeval		elapsed;
 	DNPRINTF(XT_D_URL, "notify_load_status_cb: %d\n",
@@ -5780,6 +5785,7 @@ notify_load_status_cb(WebKitWebView* wvi
 	switch (webkit_web_view_get_load_status(wview)) {
 		/* 0 */
+		gettimeofday(&t->sod, NULL);
 #if GTK_CHECK_VERSION(2, 20, 0)
@@ -5865,6 +5871,11 @@ notify_load_status_cb(WebKitWebView* wvi
 			gtk_label_set_text(GTK_LABEL(t->label), "(untitled)");
 		gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
+		gettimeofday(&t->eod, NULL);
+		timersub(&t->eod, &t->sod, &elapsed);
+		fprintf(stderr, "prefetch %d:  page load time: %ld.%.6ld  ->   %s\n",
+		    dns_prefetch, elapsed.tv_sec, elapsed.tv_usec, uri);
@@ -6618,6 +6629,8 @@ stop_cb(GtkWidget *w, struct tab *t)
 setup_webkit(struct tab *t)
+	g_object_set(G_OBJECT(t->settings),
+	    "dns-prefetching", dns_prefetch, (char *)NULL);
 	    "user-agent", t->user_agent, (char *)NULL);

More information about the webkit-gtk mailing list