Is there a way to generate a mesh from pts using bmesh without a loop in python?

I am very new but far as I know there are at least two ways that one could generate a mesh via python from raw points (such as from a xyz file or something else that isn’t directly supported in Blender)

assuming I have two lists of data containing vertex locations and face connectivity:

verts = [[x0,y0,z0], [x1,y1,x1], [x2,y2,z2]]
faces = [[0,1,2]]

the first way:

bpy.types.Mesh.from_pydata(verts,[],faces) #empty one is edges but not necessary

the second way:

from bpy_extras.object_utils import object_data_add
mesh = bpy.data.meshes.new(name='mesh')
object_data_add(bpy.context,mesh)
bm = bmesh.new()
bm.from_mesh(mesh)


#added this dictionary in there for looking up the appropriate vertices later on
#just incase anything happened with the indices of the vertices after doing #bm.verts.index_update()

verts = {}
for i,pt in enumerate(pts):
    v = bm.verts.new(pt)    
    verts[i] = v
    del v

bm.verts.index_update()

for face in faces:
    vs = [verts[i] for i in face]
    bm.faces.new(vs)

bm.to_mesh(mesh)

Personally I like using bmesh, I just find it easier to use and more intuitive, and I guess it is geared more towards scripting than bpy.

Is it possible to achieve the same resulting mesh in either of these two methods using bmesh but WITHOUT all the loops?

Or, computationally speaking, what would be the cheapest/fastest way to do this in blender if I have 1,000s/1,000,000s of points?

Much appreciated all.