On Sun, 29 Jan 2017 18:34:23 -0600, Michael Catanzaro <[email protected]> 
wrote:
> On Mon, 2017-01-30 at 00:27 +0200, Adrian Perez de Castro wrote:
> > Also, I wondering... Would it make sense to embed a GtkSourceView in an
> > Epiphany tab for this?
> 
> Maybe. Can it be made non-editable?
> 
> GtkSourceView syntax highlighting works almost instantly, so that would
> surely be preferable.

Yes. The widget inherits from GtkTextView, which has an “editable” boolean
property:

  https://developer.gnome.org/gtk3/stable/GtkTextView.html#GtkTextView--editable

I took a quick peek at how “ephy-source://” is handled, and it could be that
including the “prism.js” script first and then the content, letting the script
detect which HTML elements need to be highlighted might have to do with the
sluggishness. I would do something like generating the following code:

  <html>
    <head>
          <link rel="stylesheet" type="text/css" 
href="ephy-resource:///prism.css">
        </head>
    <body>
          <pre id="highlight" style="display: none">${HTML_SOURCE}</pre>

          <!-- Do whatever is needed to turn of Prism's auto-detection
               of code block elements. -->
          <script type="text/javascript" 
src="ephy-resource://prism.js"></script>

          <script type="text/javascript">
                let el = document.getElementById('highlight');
                el.innerHTML = Prism.highlight(el.textContent, 
Prism.languages.html);
            el.style.hidden = "";  // Show the element.
          </script>
        </body>
  </html>

Note how the <pre> element is initially hidden, we do the syntax highlighting,
update the DOM, and then change the “display” style property *last*. This
completely avoids displaying elements while they are getting updated, which
saves relayout and redraws. My guess is that relayouts (which are expensive)
are the main culprit for highlighting being slow at the moment.

Cheers,

—
🎩 Adrián

P.S: I need to set that horrible thing called JHBuild to be able to try this
     kind of experiments myself with Epiphany's “master” branch. Often I get
     away with using the system-wide WebKitGTK+ but currently that's not
     working ;-)

Attachment: pgpCcFxT1hPgW.pgp
Description: PGP signature

_______________________________________________
epiphany-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/epiphany-list

Reply via email to