You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Application with multiple iframes performances problems on hot reload #2969
I've an application that contains 2 sub iframes
Webpack generates 3 html files for the application
In dev mode, in case of code change, only the top level window might listne the events / try to refresh the page
or the main window need a way to advert the subframes to avoid listening
Actual Behavior
in dev mode, all the frames + root window are listening the hot reload changes.
In case of code change, the frames + root window tries to reload the page in same time
Chrome devTools frequently crashes because of to many logs (3x the progress logs) + interrupted sourcemaps decoding
For Bugs; How can we reproduce the behavior?
create an app with an iframe, both pointing to html pages managed by webpack
For Features; What is the motivation and/or use-case for the feature?
Do not ignore section how we can reproduce it, i.e. core and configuration, otherwise we can't help
In dev mode, in case of code change, only the top level window might listne the events / try to refresh the page
or the main window need a way to advert the subframes to avoid listening
You want me to produce a full application to explain you the problem ?
Expected, why do you avoid changes here?
In case of liveReload (page reload), the subframe is destroyed during the top window unload
Then a new subframe is created.
Devtools encounter problems because it starts to decode sourcemap then destroy and load a new frame
I search a way to inform the subframes not to listen to socket events or at least to not refresh code.
But if I disable hot or liveReload, I do it also for top level window.
There's no way to provide different configs for each page produced by the same webpack build
With injectHot and injectClient I only have the compile config as argument.
How do I do a distinction between chunk entry of root index and chuck
entries of frame index ? More it seems only called one time, not on each entry chunk
I've take a look at it
I correctly see how to do it for webpack 4 (in lib/utils/devServerPlugin.js) in prependEntry, as I control all the chunks
const prependEntry = (originalEntry, additionalEntries) => {
if (typeof originalEntry === 'function') {
return () =>
Promise.resolve(originalEntry()).then((entry) =>
prependEntry(entry, additionalEntries)
);
}
if (typeof originalEntry === 'object' && !Array.isArray(originalEntry)) {
/** @type {Object<string,string>} */
const clone = {};
Object.keys(originalEntry).forEach((key) => {
// entry[key] should be a string here
const entryDescription = originalEntry[key];
// ===========> job to do to decide to inject or not, depending of 'key' chunk
clone[key] = prependEntry(entryDescription, additionalEntries);
});
return clone;
}
// in this case, entry is a string or an array.
// make sure that we do not add duplicates.
/** @type {Entry} */
const entriesClone = additionalEntries.slice(0);
[].concat(originalEntry).forEach((newEntry) => {
if (!entriesClone.includes(newEntry)) {
entriesClone.push(newEntry);
}
});
return entriesClone;
};
until this is developed, is there's any way to do it through custom plugin I can wrote or something else ? I'm using webpac-dev-server@3.11.2 and webpack@4.
I know how to do it inside your code for webpack 4, but useless to create a PR that didn't cover the webpack 5 case, or it is ?
what it will require I think is a modification / enhancement of the injectClient init param signature, or another init param.
Is it considered as global ?
Activity
alexander-akait commentedon Jan 19, 2021
Do not ignore section how we can reproduce it, i.e. core and configuration, otherwise we can't help
Expected, why do you avoid changes here?
paztis commentedon Jan 19, 2021
You want me to produce a full application to explain you the problem ?
In case of liveReload (page reload), the subframe is destroyed during the top window unload
Then a new subframe is created.
Devtools encounter problems because it starts to decode sourcemap then destroy and load a new frame
I search a way to inform the subframes not to listen to socket events or at least to not refresh code.
But if I disable hot or liveReload, I do it also for top level window.
There's no way to provide different configs for each page produced by the same webpack build
alexander-akait commentedon Jan 19, 2021
Minimum or configuration
paztis commentedon Jan 19, 2021
original comment updated with webpack config and index files
alexander-akait commentedon Jan 20, 2021
You need to use
injectHotas function and return false forindex-frame1andindex-frame2paztis commentedon Jan 20, 2021
paztis commentedon Jan 26, 2021
any other idea @alexander-akait ?
alexander-akait commentedon Jan 26, 2021
We need improve
injectClientandinjectHotand pass entry to callbackpaztis commentedon Jan 26, 2021
Great that was my idea.
alexander-akait commentedon Jan 26, 2021
Feel free to send a PR
paztis commentedon Jan 28, 2021
I've take a look at it
I correctly see how to do it for webpack 4 (in lib/utils/devServerPlugin.js) in prependEntry, as I control all the chunks
But in webpack 5 mode, I don't see how to do it
Any idea of it ?
alexander-akait commentedon Jan 29, 2021
We should improve our check, yes, it is not implemented
paztis commentedon Feb 2, 2021
until this is developed, is there's any way to do it through custom plugin I can wrote or something else ? I'm using webpac-dev-server@3.11.2 and webpack@4.
I know how to do it inside your code for webpack 4, but useless to create a PR that didn't cover the webpack 5 case, or it is ?
alexander-akait commentedon Feb 2, 2021
I don't think it is possible to solve on plugin level without extra hacks
paztis commentedon Feb 2, 2021
Will you accept PR for version 3.11, or you stop enhancement on it an onli work on v4 ?
alexander-akait commentedon Feb 2, 2021
If this does not require global changes, we can accept it, but you need send two PRs for v3 and v4
paztis commentedon Feb 2, 2021
what it will require I think is a modification / enhancement of the injectClient init param signature, or another init param.
Is it considered as global ?
alexander-akait commentedon Feb 2, 2021
I think yes, for me it is not global changes
paztis commentedon Feb 6, 2021
PR created in v3: #2995
Tell me if it is ok before I start master report
paztis commentedon Feb 7, 2021
Here is the PR for master: #2998
alexander-akait commentedon Feb 8, 2021
I will look at this in this week
paztis commentedon Feb 14, 2021
Have you found time to look at it ?
alexander-akait commentedon Feb 14, 2021
On the next week I am working on dev server, so I will look at near future
paztis commentedon Mar 2, 2021
any news for the review ?
alexander-akait commentedon Mar 2, 2021
Still on my roadmap (near future)
paztis commentedon Mar 10, 2023
any updated ? I open it 2 years ago now
alexander-akait commentedon Mar 10, 2023
@paztis Yeah, sorry for that, let's do rebase of you PR, I want to do a new release soon, so let's incude this in a new release
alexander-akait commentedon Mar 10, 2023
Anyway why don't use
Function?