Drag Blocks to Canvas performance when you have 1000+ custom blocks
For your case, I'd suggest creating a custom block manager where you can adapt the UI for your blocks as you wish (eg. search, DOM virtualization, etc.)
Read full answer below ↓Question
GrapesJS version
- I confirm to use the latest version of GrapesJS
What browser are you using?
Chrome v96
Reproducible demo link
No demo
Describe the bug
How to reproduce the bug?
- Add to Block manager more than 1000 blocks, in my case 7,864 font awesome icons.
- Try to drag any block from block panel
Explanation
I added every font awesome pro icons as single block, use the below code, where jsonIcons is a json variable that contains all the 7,864 icons, i need to archieve this to drag and drop every icon of the list to the canvas
$.each(jsonIcons,function(index, value) {
let fontAwesomeIcon = {
category: 'Icons',
label: value,
media: '<em class="' + value + ' fa-4x"></em>',
attributes: {
class: "gjs-fonts"
},
content: '<i class="' + value + ' fa-2x"></i>',
id: "fontAwesomeIcon" + index
};
editor.BlockManager.add(fontAwesomeIcon.id, fontAwesomeIcon);
});
the main trouble is when i try to drag an icon block, the performance of the dragging events and drop the block are too slow, same for the green drop marker, how can i solve this issue? there is a way to improve the performance having a lot of blocks?
Code of Conduct
- I agree to follow this project's Code of Conduct
Answers (2)
For your case, I'd suggest creating a custom block manager where you can adapt the UI for your blocks as you wish (eg. search, DOM virtualization, etc.)
Thanks for reporting this, @jloguercio.
Great question about Drag Blocks to Canvas performance when you have 1000+ custom blocks. The recommended approach with Canvas is to use the event-driven API.
Start here:
- Check the GrapesJS documentation for your specific module
- Look for the
on()event listener method - Most operations can be achieved by listening to editor and component events
Common patterns:
// Listen for changes
editor.on('change', () => console.log('something changed'));
// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));
If you're still stuck:
- Share a minimal CodeSandbox reproduction
- Include what you've already tried
- Mention your GrapesJS version
- The community is here to help!
Related Questions and Answers
Continue research with similar issue discussions.
Issue #3759
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
GrapesJS version[X] I confirm to use the latest version of GrapesJSWhat browser are you using? chrome new versionReproducible demo link htt...
Issue #4323
Performance issue while dragging component to canvas when you have 2k component on canvas
GrapesJS version[X] I confirm to use the latest version of GrapesJSWhat browser are you using? Google Chrome Version 101.0.4951.41 (Officia...
Issue #4015
Drag and drop not working well in case of RTL
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? Chrome v96 Reproducible demo link https://...
Issue #4612
Cannot Drop MJML Components onto Blank Canvas after version 0.19.4
GrapesJS version [X] I confirm to use the latest version of GrapesJS What browser are you using? 105.0.5195.125 (Official Build) (x86_64) R...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins →Premium plugins ship with support, regular updates, and production-ready features — save days of integration work.
Browse premium plugins →Related tutorials
In-depth guides on the same topic.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Tutorial
GrapesJS vs Webflow vs Tilda: What to Choose for Your Business in 2026
Choosing the right website platform in 2026 is no longer just about building a site
Tutorial
GJS Market 2.0 - Donations, Tracking, Labels and Better Product Discovery
We’ve rolled out a new set of GrapesJS marketplace updates across GJS Market, focused on improving how creators distribute products
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.