What skimage's function does, is check whether a horizontal ray to the left of the point intersects each of the polygon sides. If the number of crossings is odd, it is inside, if it is even it is outside. skimage's implementation is also quite efficient: some time ago, as a learning exercise, I reimplemented skimage's points_inside_polygon
as a numpy gufunc, see here, and I think it ran about 2x faster than skimage's implementation. Nothing to write home about.
This algorithm works very well to check if a single point is inside a single polygon, but will be suboptimal for other situations. In particular, if you have many points inside a given polygon, you may want to borrow ideas from polygon rasterization. Information on the web is kind of scattered, but there are several more or less complete slide sets from college courses, see e.g. this. You would want to use a sweep line algorithm, where you first sort your polygon vertices by e.g. y coordinate, and then scan them in order, updating a list of polygon vertices that cross the current y-coordinate. To check if a point with y coordinate y0 is inside the polygon, you would compute the intersection points of the active vertices at that y coordinate, sort them by x-coordinate, and check whether your point x coordinate falls in an inside or outside segment.
The skimage algorithm, for $n$ points in a polygon with $m$ vertices, will be an $\mathcal{O}(mn)$ algorithm. The one I described right after would require sorting both the points and the vertices, so $\mathcal{O}(n\log n + m\log m)$, but after that you have work per point proportional to the number of sides crossing at that y-coordinate, which will be smaller than $m$ for most polygons.
So basically, it is highly dependent on the exact characteristics of your points and polygons, but the answer may very well be: yes, there are better methods out there.