If you have a DFA with m nodes and you run it on a string with n characters, at each step you have to not only test states inherited from previous step but also the first state of the DFA again. So after m character in the string (assuming m < n) worst case scenario is that you have mn actives states to test (each state need only one lookup to advance or be dismissed)
An example, consider a{l}b regular expression (all words starting with a repeated l times, follow by a b), its DFA have m = l + 1 nodes. Matching it against a string a{k}b with k>l means you will hit the worst case scenario of having (m - 1) active states after l characters in the string.
What did i miss ? Or does the literature hand wave the practical implementation to only concern itself with the theoretical question of knowing if a given full string (ie not one of it sub-string) match a regular expression.
From where i stand running an NFA or DFA will take O(nm) times (with m being number of node in NFA or DFA and n number of characters). Only thing is that NFA have more nodes than a DFA.