building a splat map shader, which is better?

Possible noob queston here but I just don’t get shaders.
Which is faster, and are there better alternatives?

1:

 SubShader {
   	  LOD 400
      Tags { "Queue"="Geometry+1" "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf Lambert addshadow
      struct Input {
          float2 uv_Tex1;
          float2 uv_Tex2;
          float2 uv_Tex3;
          float2 uv_Tex4;
          float2 uv_SplatMap;
      };
      sampler2D _Nor1;
      sampler2D _Nor2;
      sampler2D _Nor3;
      sampler2D _Nor4;
      sampler2D _Tex1;
      sampler2D _Tex2;
      sampler2D _Tex3;
      sampler2D _Tex4;
      sampler2D _SplatMap;
      float4 _Color;
      void surf (Input IN, inout SurfaceOutput o) {
      	half3 vSplat=tex2D (_SplatMap, IN.uv_SplatMap);
     	half4 vNotBlack=half4(1,1,1,1)-(vSplat.r)-(vSplat.g)-(vSplat.b);
      	
      	o.Albedo = (tex2D (_Tex1, IN.uv_Tex1).rgb)*vNotBlack;
    	o.Albedo += ((tex2D (_Tex2, IN.uv_Tex2).rgb)*vSplat.r);
       	o.Albedo += ((tex2D (_Tex3, IN.uv_Tex3).rgb)*vSplat.g);
        o.Albedo +=((tex2D (_Tex4, IN.uv_Tex4).rgb)*vSplat.b);
       	o.Emission=o.Albedo*_Color*.1;
      }
      ENDCG
    } 

2:

SubShader {
  Tags { "Queue"="Geometry+2" "RenderType" = "Opaque" }
  CGPROGRAM
  #pragma surface surf Lambert addshadow
  struct Input {
      float2 uv_Tex1;
      float2 uv_Tex2;
      float2 uv_Tex3;
      float2 uv_Tex4;
      float2 uv_SplatMap;
  };
  sampler2D _Tex1;
  sampler2D _Tex2;
  sampler2D _Tex3;
  sampler2D _Tex4;
  sampler2D _SplatMap;
  void surf (Input IN, inout SurfaceOutput o) {
 	half4 vNotBlack=half4(1,1,1,1)-(tex2D (_SplatMap, IN.uv_SplatMap).r)-(tex2D (_SplatMap, IN.uv_SplatMap).g)-(tex2D (_SplatMap, IN.uv_SplatMap).b);
  	o.Albedo = (tex2D (_Tex1, IN.uv_Tex1).rgb)*vNotBlack;
	o.Albedo += ((tex2D (_Tex2, IN.uv_Tex2).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).r));
   	o.Albedo += ((tex2D (_Tex3, IN.uv_Tex3).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).g));
    o.Albedo +=((tex2D (_Tex4, IN.uv_Tex4).rgb)*(tex2D (_SplatMap, IN.uv_SplatMap).b));
  }
  ENDCG
} 

1 Uses a temp var to store the image and reuses the var, 2 recalls the image for each drawcall as far as I know, but frankly I don’t know.

Any help much appreciated :).

James

Your method #1 is roughly the same as saving a GameObject.Find result. You write that it "store the image." That might be the confusion. A tex2D is only getting a single lowly color.
A texture lookup converts the 0-1 uv coords into the actual pixel size of the current texture, computes the current mipmap level, goes out to graphics card memory (for that mipmap level) fetches the four pixels around the coord, and performs a weighted average. But, it’s all done in optimized hardware, who’s only goal in life is lookups. Even so, doing all of that is not fast.
For fun, my best results were searching “texture sampler performance.” There’s no such thing as Unity-code on a shader – Unity translates to whatever language your GPU needs. So general info about shader performance is going to apply to Unity.