A possible workaround would be to add an empty memory layer in your project which acts as a placeholder for your large point dataset. This memory layer is saved, alongside any styles etc. that you typically applied, and as it is empty, will load immediately when you open your project. You can use the following in the Python Console to create a simple point layer:
mem_layer = QgsVectorLayer("Point", "Enter_name", "memory")
You can change
Enter_name to the name of large point layer, remove the original point layer from your project and save.
Now the next time you load your project, you could enter the following code. The code, which would populate your memory layer with all the attributes and features of the point dataset, will not run immediately as only the function is defined:
from PyQt4.QtCore import *
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
root = QgsProject.instance().layerTreeRoot()
if layer.name() == "Enter_name": # Change to match your memory layer name
node = root.findLayer(layer.id()) # Optional line
if node.isVisible() == Qt.Checked: # Optional line
real_layer = QgsVectorLayer("path/to/point.shp","point","ogr") # Change path to your dataset
feats = [ feat for feat in real_layer.getFeatures() ]
attr = layer.dataProvider().fields().toList()
To run this, check the memory layer and type
load() into the console when you are ready to pull the data into the memory layer.
Note: I've added that the script will only run if the memory layer is checked. These lines of code are not necessary and can be removed (remember to match indentation) but were added as I was looking for a more dynamic function but not sure if it is possible.