EM trains use an invisible fuel item representing current levels of EM train upgrade researches inserted by nearby charger as visualized by the Beam and Circle charging display options.
One of this node's first ESI commits was startup settings to adjust on_tick entity update cycle tick length as well as how many entities per sub-cycle are updated.
ei_update_functions = {
function() ei_powered_beacon.update() end,
function() ei_powered_beacon.update_fluid_storages() end,
function() ei_neutron_collector.update() end,
function() ei_matter_stabilizer.update() end,
function() orbital_combinator.update() end,
function() ei_fueler.updater() end,
function() ei_gate.update() end,
function() em_trains.train_updater() end,
function() em_trains.charger_updater() end,
}
Given currently 9 update_functions, default update cycle length of 60 ticks / 9 functions = 6.66 sub-cycles; value is rounded up ergo 7 cycles of default 10 entities per 60 tick update cycle length per entity updater meaning maximum of IE 70 EM trains per 1 second (60 ticks). Original EI/ESI scripting updated every train every tick and was indeed untenable.
Be aware at present fuel density is not modified concurrent with update cycle length so higher values may result in EMT running out of fuel before next update cycle—which may or may not matter given their negligible friction and air resistance and extreme acceleration/top speed.
That said the EMT on_tick does have room for further optimization—particularly if used on multiple surfaces—however for both differentiation of aesthetic as well as functional purposes the mechanism is likely to remain the same. Pull requests will of course be considered