Serving png image tiles using geoserver

If you're happy to use Leaflet, you can get the best, and cached, performance by using the GeoWebCache endpoint, like this:

var leafletLayer = new L.TileLayer.WMS(rootURL + "geoserver/gwc/service/wms", {
    layers: 'workspace:layer_name',
    format: 'image/png',
    transparent: true

The /gwc endpoint will include all the fancy caching and what not to make it faster. You will need to invalidate that cache if you change the underlying data, but you can do that using the REST API without too much effort.