I battled with this issue, with much the same results. I posted a question to StackOverFlow with teh question which is most effecient doc.getItemValue("Field") or getComponent("Field").getValue() The answer was NEITHER
Here is a link to the answer:
http://stackoverflow.com/questions/18303862/which-is-the-most-efficient-way-to-access-the-value-of-a-control
If working with the document you must use getItemValue(), however, the most effecient way to access the backend document is by using the NotesDataSource object set to document1 by default but might be different and then use document1.getValue("Field")
working directly with the array in within the NotesDocument or the DataSource does not work in either JS or LS. I believe the most effecient method would be were document1 is the datasource
var myArray:Array = document1.getValue("SourceArray");
myArray[3] = "Some Value";
document1.setValue("SourceArray",myArray);
I have a process that cycles through a bunch (a technical term) of access to the backend document and I noticed an improvement in speed when I accessed the fields through the getValue in the datasource rather than getItemValue in the document. I am no expert in how the XPages works under the covers but the explaination in the stackoverflow make a lot of sense. I went through my code and change most of it to access the dataSource rather than the doc (got to love the search of the source code in XPages). I found a few places where I still needed to use getComponent (whcih if I read it right should actually be your last choice) or doc.getItemValue.