[HN Gopher] I'm making a small RPG and I need feeback regarding ...
___________________________________________________________________
I'm making a small RPG and I need feeback regarding performance
Author : ibobev
Score : 58 points
Date : 2025-11-07 13:52 UTC (9 hours ago)
(HTM) web link (jslegenddev.substack.com)
(TXT) w3m dump (jslegenddev.substack.com)
| calebjmatthews wrote:
| Just downloaded and tried it on my M1 Mac and the performance was
| what I'd expect for a game like this, both in and out of battle.
| Totally smooth and ~15% of CPU usage in both cases. By the way, I
| love the pixel art, and the gameplay has potential, it's a style
| I've never personally played before but I could see it being
| compelling.
| JSLegendDev wrote:
| Thanks for the feedback! Very much appreciated!
| BugsJustFindMe wrote:
| > _is it just my machine? I'm using a Macbook Air M3 with 16GB of
| RAM_
|
| Using one of the singularly most powerful personal computers ever
| made. It's probably not the _machine_ if they don 't notice
| everything else being unexpectedly bad too.
| Lord-Jobo wrote:
| Well. That's a bit misleading.
|
| A real example: MacBook Pro m4 will have absolutely god awful
| performance on certain web based games * (compared to windows
| or even android), regardless of the browser or any browser
| performance settings. This is not the hardware explicitly,
| obviously it's a very high performance chipset, but it's
| definitely the hardware in terms of what the OP is asking.
| Because that particular hardware is falling down all over the
| place in this scenario when others are not.
|
| Fixing it? Sure that's almost certainly on the games side, some
| kind of inefficient process or element that doesn't work right
| in that environment and needs to be hammered out or replaced.
|
| But for diagnosis? Yeah, "it's the hardware" is the right
| answer. And you can't fix it without diagnosis.
|
| *replicated on latest chrome, Firefox, safari, and Brave, with
| the games: Idlescape and (now dead)osrsIdle ~8 months ago
| jesse__ wrote:
| > Well. That's a bit misleading.
|
| Uhh .. wut?
|
| The game appears to be similar to a point-and-click adventure
| game, which were popular in the 80s, and ran just fine.
|
| In 1988, a CRAY Y-MP supercomputer had "64 megawords of
| memory". I have no idea how large a word was on those
| machines, but by todays standards, that means 128MB. Let's go
| with that. The Y-MP was the size of two massive fridges.
|
| Now, the Macbook air OP owns, which is smaller than a
| toaster, has 128 TIMES as much memory in it as a
| supercomputer did back in 1988. Similar story for processing
| power, storage, etc. Point and click adventure games haven't
| changed all that much, and even back then didn't require a
| supercomputer to run.
|
| > But for diagnosis? Yeah, "it's the hardware" is the right
| answer.
|
| Given the above, how you came up with this is beyond me.
| moron4hire wrote:
| No, it's true. There can be defects in the graphics driver
| that make certain, specific functions in GLSL or WGSL
| either completely broken or woefully inefficient.
|
| It can be very dependent on hardware _generation_ , too.
| One of my past projects was a very simple, photosphere-
| based learning environment. Photosphere rendering is
| incredibly simple. But on Intel processors with Iris Xe
| integrated GPUs used by one particular year of iMacs (I
| don't remember which, it only impacted 2 users and it was
| several years ago), I couldn't use the standard cube
| sampler because it was just broken. I had to split my
| photospheres into 6 cube faces and render 6 quads
| separately to be able to use the not-broken 2d sampler. The
| issue didn't appear on any other generation of Iris Xe on
| macOS and it didn't appear on _any_ generation of Iris Xe
| on any other OS. It was very specifically the combination
| of macOS and that generation of GPU.
| shkkmo wrote:
| > There can be defects in the graphics driver
|
| Which is software, not hardware. Just not the software
| written by this dev.
| jesse__ wrote:
| > There can be defects in the graphics driver
|
| Yes, video drivers are, generally, buggy and unreliable.
| The hardware they're hooked up to is fucking amazing.
|
| Also, I can 99.9999% guarantee that this guys' problem is
| not a driver bug, so trying to nerd-snipe me with "but
| driverzzz broroooooo" is pedantic and annoying. The guy
| is drawing like 100 quads; it should run at a bazillion
| frames a second on literally a toaster.
| thaumasiotes wrote:
| > The guy is drawing like 100 quads
|
| I'm curious about this. I always had the impression,
| mostly from reading Shamus Young, that there's no such
| thing as drawing something other than a triangle.
|
| Blender guides tell you to divide your model into
| quadrilaterals. Though I did find one reddit post saying
| "I imported this model from a console game and it's all
| triangles. I thought models were supposed to use quads."
| The answer was "that model is finished, so it's in
| triangles because that's what you actually draw".
|
| What's going on? Is there such a thing as drawing
| polygons with more than three sides? Why is the current
| advice "use quads" to the point that people don't even
| realize they're drawing triangles?
| SAI_Peregrinus wrote:
| Cray Y-MP had a 64-bit word size. They came with 32, 64, or
| 128 MWords. So 256, 512, or 1024MiB.
| aleph_minus_one wrote:
| > > _is it just my machine? I'm using a Macbook Air M3 with
| 16GB of RAM_
|
| > Using one of the singularly most powerful personal computers
| ever made.
|
| Some arbitrary PC Master Racer: "Hold my beer, and I will show
| you a _powerful_ personal computer. " :-)
| mvkel wrote:
| > performance issues
|
| What kind? It would be helpful to know what you're experiencing,
| attempts you've made to fix, etc.
|
| Or is this a thinly veiled "I've been working on this for a while
| and it's taking longer than I thought and want some
| encouragement." Which is fine! It's a great thing to ask for.
| duttish wrote:
| Do you have a profiler at hand?
|
| If you have a friend who is encountering the performance problems
| enable profiling report export and ask them to send that over to
| you. Hopefully that'll show you what is taking so many cycles.
| b1tshift wrote:
| On an M2 Mac with 24GB the game went smooth for a few fights and
| then went down to around 10fps and got slower with every attack
| an enemy did in the fight. The longer I played the slower it got.
| CPU and memory usage was stable all the time.
| doyougnu wrote:
| Not a game dev. Besides profiling, I would create game
| scenarios that exercise certain parts of the game engine.
|
| For example, I would create a game fight scenario where the
| player has infinite health and the enemy just attacks super
| fast at some settable rate. That way you could monitor whats
| happening in extreme abnormal conditions with the hypothesis
| that if the game works in extreme conditions then it will work
| in normal conditions.
|
| Another example. If you have random encounters like in old
| school JRPGs then I would create a scenario where a fight
| happens per step of the player, the fight loads, then the enemy
| immediately dies, rinse wash and repeat. That should allow you
| to asses how the game performs after 100s of fights quickly.
|
| The idea here is to create tests that improve your signal to
| noise ratio. So you create a scenario that will create a large
| signal so that then you can more easily diagnose the
| performance issues.
| whizzter wrote:
| Sounds like the culprit though, could be tons of small objects
| added for effects or something that still don't show up in
| memory usage but adds iteration time?
| svnt wrote:
| This is the future of troubleshooting: where did the LLM decide
| to introduce recursion based on calculation that draws on an
| otherwise unused global counter and a separate timer initiated
| at launch for absolutely no reason.
| godshatter wrote:
| It can't be hardware, as others have noted these kinds of games
| have been working great on machines that are magnitudes slower
| than the OPs machine. Maybe it's some kind of search that is
| running linearly on an assumed small dataset and it gets bigger
| than imagined, instead of it running a binary search or
| something. Maybe some of the data is unreasonably large for
| what it contains and can't get cached as easily.
|
| And, as others have mentioned, if you really want to know,
| profile.
| golem14 wrote:
| Isn't the glaringly obvious problem Garbage Collection?
|
| I'd try digging into this first. Try to completely disable VC
| and see if there are any slowdowns before you run out of
| memory. Go from there.
| golem14 wrote:
| Hah, keep disabling VC, but also disable GC.
| magicmicah85 wrote:
| Without downloading the exe (work laptop right now, can try
| later), have you followed the optimization suggestions in
| KAPLAY's guides?
|
| https://kaplayjs.com/docs/guides/optimization/
|
| Assuming it's capable of running in your browser, I'd suggest
| using chrome's dev profiling tools to help with finding the
| optimization areas. Based on feedback from everyone else, sounds
| like something is not cleaning up as the game keeps running.
| beepbooptheory wrote:
| Yes and it is extremely straightforward to find the right thing
| to look at profiling it: what does your `requestAnimationFrame`
| look like?
| sionisrecur wrote:
| I'd suggest getting a SteamDeck and use it as the lower limit on
| performance. If it runs there, it will run everywhere else.
| Narishma wrote:
| Even a Steam Deck is overkill for a game like this. This is
| NES-levels of graphics.
| WhyOhWhyQ wrote:
| No this doesn't look like NES graphics at all. This is more
| like the SNES era.
| sarchertech wrote:
| The NES isn't spinning up objects for every bullet on the
| screen or a million other ways a novice developer can blow up
| a GC.
| VegaKH wrote:
| Here is my crappy, not finished game that maybe will run fine or
| maybe not. Could you please do some free testing for me, and
| optimally do a screen recording showing performance and send it
| to me along with your notes?
|
| Here is the link to where you can download it, and also maybe,
| you know... PAY FOR IT? These broken unfinished games don't make
| themselves, you know.
| petercooper wrote:
| This is absolutely fine for someone to request on their
| personal blog to a group of followers who may well be
| interested in the game and support the author. People have used
| their blogs for this sort of thing for decades.
| recursive wrote:
| It wasn't posted by the developer.
| VegaKH wrote:
| I didn't realize that this wasn't posted by the dev, and that
| it was only meant for his normal subscribers. So my criticism
| is a little harsh here.
| thaumasiotes wrote:
| > Here is the link to where you can download it, and also
| maybe, you know... PAY FOR IT?
|
| Why criticize someone for hosting their in-progress game on
| itch.io? That's... a completely normal thing to do.
| gwbas1c wrote:
| Why are you worried about performance for a 2D game that's
| basically moving a few sprites around the screen? A game like
| this shouldn't be taxing for modern hardware; and should even run
| cleanly on pretty much any computer made in the last 15-20 years.
| (Or even older, if you weren't using Javascript.)
|
| As some of the other comments imply that there are some
| performance issues; more than using a profiler, I would make sure
| that your mental model of the event loop from your framework is
| correct. If all you're doing is moving some sprites around the
| screen, you need points where your code pauses _because it has
| nothing to do._ This could either be awaiting something from the
| framework, or putting most of your logic in callbacks that are
| triggered by the framework.
|
| A different way to say it: Between frames, there's not that much
| calculation that your game needs to do when you're just moving a
| few sprites around in 2D. The event model that you hook into
| should be something where your game does its calculations, and
| then waits between frames.
| lloeki wrote:
| > Why are you worried about performance for a 2D game that's
| basically moving a few sprites around the screen? A game like
| this shouldn't be taxing for modern hardware
|
| > As some of the other comments imply that there are some
| performance issues
|
| Because there's nothing implied and they experience perf issues
| first hand? TFA:
|
| > I've been experiencing performance issues
|
| > I'm using a Macbook Air M3 with 16GB of RAM
| jesse__ wrote:
| First off, yay for making games! I love working on games, and
| have spent many, many hours doing it, so welcome to the club :)
|
| Second, let me introduce you to my good friend, the profiler. A
| profiler is an absolutely indispensable tool for making games.
| Find one that you like, and learn to wield it with laser-guided
| precision.
|
| Generally, there are two things you want a good profiler to tell
| you about; execution speed, and memory. Finding a profiler that
| tells you about execution speed is pretty easy (basically all of
| them at least nominally do that), and finding one that also
| profiles memory (in a useful way) is somewhat harder. I'm not
| sure of the state of profilers for Javascript, but maybe the tool
| you're using (KAPLAY) has one built-in?
|
| From my long-forgotten days of programming javascript, one thing
| you want to look out for (which is difficult to spot without a
| profiler), is creating memory leaks. Memory leaks in Javascript
| can be a double-edged sword; you're both using more memory than
| you should, and the garbage collector has more pressure on it.
| Over time, this can bring an application to a crawl as the GC
| spends more and more time traversing leaked objects.
|
| Good luck friend. It's dangerous to go alone, take this :sword:
| lukan wrote:
| A bit offtopic, but if it would have been playable in the browser
| I would have tested it, but I don't want to download and install
| a (for me) random exe.
|
| (and I don't see how performance could be an issue unless a major
| screw up, but like others have said, use a profiler. Sounds like
| memory leak from what was shared here)
| DeathArrow wrote:
| If it wasn't for Javascript, that kind of game should have been
| able to run on a 2Mhz 8086 and 640kb of RAM.
| aleph_minus_one wrote:
| PC was ridiculed for its bad graphics capabilities by fans of
| other home computers. Only over time PC's capabilities for
| graphics and video games improved piece by piece until after
| many years PC fans had the last laugh.
| o11c wrote:
| Even with Javascript, there should only be a 10x performance
| penalty at worst, and getting to 2x penalty is feasible.
|
| We _do_ need to scale based on screen size though - copying
| pixels around is expensive.
|
| But a low-end machine from 10 years ago should be mandated for
| all developers.
| yomismoaqui wrote:
| Forget about performance, specially in a 2d game like this one.
| Focus on making it fun (really-really fun is possible).
|
| I have played games that didn't performed so well because they
| were so fun. Games are about fun, anything else (narrative,
| performance, sound...) is secondary.
| debo_ wrote:
| If frames are dropping, it's likely not fun.
| xantronix wrote:
| Related to the initial poor performance of Electron on macOS
| Tahoe?
|
| https://github.com/electron/electron/issues/48311
| ceigey wrote:
| That was my gut feeling too, or at least something Tahoe
| related. I reckon they're using Gemshell based on the game
| icon, which they've also been talking about on their YouTube
| channel.
|
| On Gemshell's store page (https://l0om.itch.io/gemshell) it
| seems they're in turn using Neutralino JS, which should be
| using a Webview, like Tauri.
| butz wrote:
| You can use developer tools in the browser to simulate slower
| CPU. Use performance profiling to find which functions are taking
| up the most time. Try switching to battery saving mode, it might
| throttle your CPU a bit too. If you really want to dive deep in
| performance improvements, you should purchase lowest end laptop
| with integrated GPU, if budget allows. And how about providing an
| embedded web version of your game, because downloading unsigned
| executables these days should be considered a no-no.
| JSLegendDev wrote:
| Hi everyone! I'm the dev behind this work-in-progress game.
|
| This post was intended for my existing audience and I didn't
| expect for it to be posted on HN.
|
| Anyway, now that it's here, feedback on performance is still very
| much appreciated!
|
| The reason I'm not making this web playable despite being built
| using web technologies is that I'm targeting Steam for this game.
| Therefore, I need to make sure the game works well when installed
| as an executable on Mac, Windows, Linux.
|
| There was already trust established between me and my audience so
| that's why it felt appropriate to tell them to download
| executables.
|
| I understand why HN users not familiar with me, would be wary of
| downloading random executables from the internet. It's a good
| instinct to have!
| lukan wrote:
| "The reason I'm not making this web playable despite being
| built using web technologies is that I'm targeting Steam for
| this game. Therefore, I need to make sure the game works well
| when installed as an executable on Mac, Windows, Linux."
|
| If it runs on the web, it should run the same as an executable,
| otherwise your exporter is broken. I would likely debug on the
| web first (just to get access to chrome dev tools including the
| profiler and performance meassurement tools). Is there some way
| to do comfortable debugging/profiling with the way you export
| via GemShell?
| TylerE wrote:
| That _should_ is doing a lot of potentially very painful
| heavy lifting in your statement.
| zyx321 wrote:
| Intel i5-9350, UHD Graphics 620, Windows 11 v25H2
|
| Completely unplayable. It runs fine at first, and then suddenly
| drops to below 1FPS for no discernible reason. This happens
| regardless whether I am on the world map or combat scene. I am
| running the exe, couldn't find the browser version.
|
| On an unrelated note, I am surprised to see a JS program working
| without the usual 200MB NW.js runtime (as seen with RPG-MV)
| JSLegendDev wrote:
| That's because I'm using GemShell. It's tool that generates
| executables using, under the hood, Neutralino which is similar
| to Tauri (uses the OS's webview rather than packaging a
| Chromium instance).
|
| More info here, if you're interested :
| https://jslegenddev.substack.com/p/export-web-games-for-desk...
| tithos wrote:
| You may want to add instructions to the game currently it is
| unplayable
| OhMeadhbh wrote:
| can confirm. very slow. here's the output I got on Debian 13 on
| an older i5, but it doesn't look like it's telling us very much.
| ./Small-RPG libEGL warning: DRI2: failed to authenticate
| VMware: No 3D enabled (0, Success). libEGL warning: egl:
| failed to create dri2 screen VMware: No 3D enabled (0,
| Success). libEGL warning: egl: failed to create dri2
| screen ** (WebKitWebProcess:2822): WARNING **:
| 14:52:20.184: The GStreamer FDK AAC plugin is missing, AAC
| playback is unlikely to work.
___________________________________________________________________
(page generated 2025-11-07 23:00 UTC)