Surfingkeys is more customizable and has more features. You can use Surfingkeys API with javascript to add more customizations. It's good for adding custom keybindings to certain websites. Look at this config repo to see what's possible with Surfingkeys: https://github.com/b0o/surfingkeys-conf
It also supports neovim editing in browser, markdown previewer, pdf previewer with key bindings, etc.
Vimium is more robust as they have resisted the temptation to open their apis and allow unlimited customization. It's good for you if you don't have the need to add more customization or if you don't know programming.
Surfingkeys require you to know javascript a bit add advanced customization. And, it requires some troubleshooting when your config goes wrong. It's like Vimium for power users.