Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with long pages #15

Open
PazzaVlad opened this issue Jan 20, 2017 · 22 comments
Open

Problem with long pages #15

PazzaVlad opened this issue Jan 20, 2017 · 22 comments

Comments

@PazzaVlad
Copy link

PazzaVlad commented Jan 20, 2017

I just install hexo and try to use hexo-browsersync. But I notice a bug: when generated page size bigger than some number (~1000 words) it can't be fully loaded, in chrome source code it looks like this:

screen shot 2017-01-20 at 19 05 19

If there is not so much characters in a page, everything is ok. So it happens only in big posts. When I uninstall hexo-browsersync bug is disappear, so it's definitely problem with hexo-browsersync.

I suppose it's could be some stream or buffer limit, but I'm new to node and can't solve this...

@giuem
Copy link

giuem commented Apr 30, 2017

I meet the same problem. And it seems that this problem is related to theme, I'm trying to find the answer...

@xsfishxs
Copy link

xsfishxs commented May 5, 2017

+1 Meet the same problem. Seems like a problem caused by the buffer size.

@tcrowe
Copy link
Contributor

tcrowe commented Dec 5, 2017

Is this still a problem? We recently updated the module too.

@giuem
Copy link

giuem commented Dec 5, 2017

@tcrowe Problem still remains. Can you reproduce this bug?

@tcrowe
Copy link
Contributor

tcrowe commented Dec 5, 2017

I don't know if this is the same bug but I did get a very weird problem with a large post.

screen shot 2017-12-05 at 9 26 55 am

As you can see in the image it had intermittent blank spots. There was no error from hexo or the browser when this happened.

This is how I tried to reproduce your bug:

# create the project
mkdir hexo-bsync-big-text
cd hexo-bsync-big-text
hexo init

# generate some random text for the posts
# the issue reports anything around 1000 words
npm install chance-cli -g
hexo new post "one"
hexo new post "two"
hexo new post "three"

paragraph_count=100

for (( i = 0; i < $paragraph_count; i++ )); do
  chance paragraph >> source/_posts/one.md
  echo '\n\n' >> source/_posts/one.md
done

for (( i = 0; i < $paragraph_count; i++ )); do
  chance paragraph >> source/_posts/two.md
  echo '\n\n' >> source/_posts/two.md
done

for (( i = 0; i < $paragraph_count; i++ )); do
  chance paragraph >> source/_posts/three.md
  echo '\n\n' >> source/_posts/three.md
done

npm install
npm install hexo-browsersync --save
# it installed [email protected]

hexo serve --debug

On a hunch I tried commenting out the Stylus code and the page started to render all the text again. I'm using landscape theme in my demo.

Which theme are you using @giuem ?

@giuem
Copy link

giuem commented Dec 6, 2017

I'm using this theme. And I have try your demo with this theme, the bug doesn't reproduce. Maybe this bug is related to post content?

The bug looks like this, html code was cut off.
snipaste_2017-12-06_12-15-41

snipaste_2017-12-06_12-17-46

@tcrowe
Copy link
Contributor

tcrowe commented Dec 6, 2017

I tried it again with your theme (very nice!) but I did not reproduce the error.

If you would please try a few things:

Somewhere around here:
https://github.com/hexojs/hexo-browsersync/blob/master/lib/browsersync.js#L31

Add:

console.log('op', op)
console.log('pos', pos)
console.log('snippet', snippet)

Lets see what the output is.

Another thing you can try is upgrade all modules:

# upgrade hexo and get module updater
npm install npm-check-updates hexo@latest -g

# in your project, updates versions
ncu -an 
npm install

# clean
rm db.json debug.log

hexo serve --debug

You can also tell us npm ls --depth=0 which can show us other plugins that may modify source

Thank you!

@arsenicoco
Copy link

I am having the same issue with this theme (although slightly modified): typing. I don't think it has to deal with the theme itself. The only thing I see in the console is this:

WebSocket connection to 'ws://localhost:3000/browser-sync/socket.io/?EIO=3&transport=websocket&sid=GGauSBElfMuLBbrVAAAE' failed: WebSocket is closed due to suspension.

I assume this could be well the reason for dropping rendering at an almost random point.

@kyya
Copy link

kyya commented Apr 10, 2018

The same problem, may be the error is here.
sometimes the pos of </body> may has wrong value.

@tcrowe
Copy link
Contributor

tcrowe commented Apr 11, 2018

Do you know how to get a failing test case for this, @anapopo ? We could not reproduce the error.

@fatfatson
Copy link

pos 138 
op <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head> <body> <pre>Cannot GET /es6-promise.map</pre> </body> </html> 
snippet <script id="__bs_script__">//<![CDATA[ document.write("<script async src='http://HOST:3000/browser-sync/browser-sync-client.js?v=2.24.6'><\/script>".replace("HOST", location.hostname)); //]]></script>

it's very strange, every time the log shows a error repsonse, but the browser show the page ok

@fatfatson
Copy link

fatfatson commented Jul 29, 2018

  function converter(content, req, res, callback) {
    var op = content.toString('utf8');
    var pos = op.lastIndexOf('</body>');

    //console.log('op', op)
    console.log('op last', op.substring(op.length-3000))
    console.log('op length', op.length)
    console.log('pos', pos, )
    return callback(null,op);

    if (!~pos) {
      return callback(null, content);
    }

    // op = op.substring(0, pos) + snippet + op.substring(pos);
    callback(null, op);
  }

i don't know why here the op is already truncated,
even the plugin does nothing, the result is wrong.
but if commenting the the app.use(...), then result is correct...

@fatfatson
Copy link

OK, I think I have found the problem!
it's in connect-injector:

      write: function (chunk, encoding) {
        if (this._interceptCheck()) {
          if(!this._interceptBuffer) {
            debug('initializing _interceptBuffer');
            this._interceptBuffer = new WritableStream();
          }

            debug('write', new Buffer(chunk,encoding).length);
            return this._interceptBuffer.write(new Buffer(chunk,encoding));
          //return this._interceptBuffer.write(chunk, encoding);
        }

it redirects res.write to its own WritableStream, but fails to provide a suitable encoding, (here is undeinfed, but it should be utf8), so data with none-ascii would be lost.
replace the write with Buffer solves it.

@tcrowe
Copy link
Contributor

tcrowe commented Jul 29, 2018

@fatfatson 🤔

That's interesting you may have found a solution after all this time. We could not reproduce it. Were you able to? If so, how?

@fatfatson
Copy link

@tcrowe making a long post( >130K in my case) with chinese would reproduce it

@yuki-takei
Copy link

yuki-takei commented Mar 11, 2019

@tcrowe

@fatfatson is right. This problem has been reproduced with hexo-browsersync:0.3.0.
Have you ever tested with CJK(Chinese/Japanese/Korean) strings?

How to reproduce

  1. Install browser-sync:0.3.0
  2. Copy japanese lolem ipsum from here
  3. Create test.md and paste lolem ipsum 10 times. It should be over 13000 characters.
  4. hexo serve and go to /test.html

What happens?

  • Hexo will not render the whole contents.
    • Only 8000 characters were rendered in my environment.
    • The partial of footer (if you devide it) will not be rendered.

What is the expected result?

  • The whole contents are rendered.

@tcrowe
Copy link
Contributor

tcrowe commented Mar 11, 2019

@yuki-takei Thank you! I wont be able to look at it for a few days but I will review this and test again soon. 👍

@YunYouJun
Copy link

I meet the same problem.
May I know the progress about this problem?
Or any temporary methods to solve it?

@coder-linx
Copy link

This problem is caused by hexo-server, _config.yml add settings

server:
  compress: true

@YunYouJun
Copy link

This problem is caused by hexo-server, _config.yml add settings

server:
  compress: true

Cool, it works. Thanks!

@Chorer
Copy link

Chorer commented Mar 17, 2020

same problem.It has remain for a long time.And I found it happends only when hexo s.

@ExtraBits42
Copy link

Same problem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests